主頁 > 軟體工程 > DuiVision自定義控制元件開發指南

DuiVision自定義控制元件開發指南

2020-09-23 15:11:44 軟體工程

DuiVision是參考了仿PC管家程式、金山界面庫、DuiEngine、DuiLib等多個基于DirectUI的界面庫開發的。 
本文主要介紹基于DuiVision的自定義控制元件如何開發,通過自定義控制元件實作控制元件的擴展。

DuiVision代碼結構

DuiVision代碼的整體架構如下圖所示: 

代碼可以分為DuiVision庫、DuiVision應用程式、DuiVision插件幾部分,其中DuiVision應用程式和DuiVision插件都是基于DuiVision庫開發的。 
DuiVision庫的類結構中幾個重要的類說明如下: 
CDuiObject: 
是所有DuiVision物件的基類,每個物件都包含有ID、名字、區域這些DUI物件基礎的東西,同時也可以給物件設定一個事件處理物件(CDuiHandler),DUI基類還封裝了一些虛函式,包括物件加載(每個物件都可以對應到xml描述檔案中的一個node節點,DUI基類封裝了對xml節點的加載方法,包括讀取xml節點名、節點屬性,并對基礎的屬性進行處理)、訊息處理、設定物件更新標識等。 
CControlBase: 
是所有DUI控制元件的基類,定義了所有控制元件都具有的屬性,以及公共的方法、虛函式等,CControlBase定義的虛函式用于派生的控制元件實作特定的功能,包括滑鼠、鍵盤操作、控制元件的畫圖函式、控制元件大小和位置變更函式等。 
CControlBaseFont: 
所有需要顯示文字的控制元件都可以從此控制元件派生,這個控制元件定義了一些文字的公共屬性和方法,包括文字標題、字體、對齊方式等。 
CDlgBase: 
對話框類,實作了對話框的所有功能,可以支持模態和非模態對話框,對話框中會包含若干子控制元件,對話框可以定義對應的xml描述檔案,通過xml檔案可以加載下層的所有子控制元件,所有的事件處理也都是從對話框發起,然后逐層遞回呼叫到子控制元件的處理函式。 
DuiSystem: 
是DuiVision的所有資源的入口,承擔了所有資源的統一管理功能(圖片、配置、字串、對話框、事件處理物件都可以作為資源),同時作為工具類提供了很多公共的函式,DuiSystem是一個單例物件,一個應用程式或插件中只有一個DuiSystem的實體物件。

自定義控制元件的開發

控制元件概述

所有控制元件都是從CControlBase或ControlBase的某個派生類派生的,對于一個控制元件,主要要完成的事情包括:初始化(屬性的決議和處理)、位置資料的處理(位置和大小變更)、畫圖、事件的處理(滑鼠事件、鍵盤事件等); 
初次之外,對于復雜一些的控制元件,可能還要考慮控制元件焦點、tooltip、影片、動作回應等事情。下面會依次對控制元件的這些功能如何開發進行說明。

建構式和解構式

控制元件的初始化在控制元件的建構式中: 
CControlBase(HWND hWnd, CDuiObject* pDuiObject); 
控制元件的解構式主要用于釋放控制元件中申請的記憶體、圖片等資源,特別需要注意的是,如果控制元件中有用到一些圖片資源,在解構式中一定要釋放,釋放的方法都比較類似,例如Button控制元件中定義了Button的圖片,在解構式中就用如下的方法進行圖片的釋放:

CDuiButton::~CDuiButton(void)
{
    if(m_pImageBtn != NULL)
    {
        delete m_pImageBtn;
        m_pImageBtn = NULL;
    }
}


圖片的定義

很多控制元件中都需要定義圖片資源,例如Button控制元件中定義的Button的圖片,就是由下面這種四種狀態的圖片組成的,DuiVision中很多控制元件的圖片都需要包含多個狀態的圖片: 

在ControlBase.h中有按鈕類圖片的狀態定義:

enum enumButtonState
{
    enBSNormal = 0,
    enBSHover,
    enBSDown,
    enBSDisable,
    enBSHoverDown,  
    enBSDisableDown
};

完整的狀態有六種,分別是正常狀態、滑鼠移動到控制元件上的狀態、滑鼠在控制元件上按下的狀態、禁用狀態、按下時滑鼠移動到控制元件上的狀態、按下時控制元件被禁用的狀態,一般只會用到前四種狀態,后面兩種狀態是檢查框、廣播按鈕這樣的控制元件才有的。 
DuiVision中的控制元件用到的這種多狀態圖片一般是按照每種狀態的圖片橫向排列在一個大圖中,順序就是按照上面定義的順序,當然對于自定義控制元件也可以按照其他的方式制作大圖,只要畫圖時候按照定義的方式進行決議就可以了。 
除了按鈕的圖片,下面列出了一些常見的多狀態圖片。 
檢查框的六狀態圖片: 
 
廣播按鈕的六狀態圖片: 

Edit控制元件的外框的四狀態圖片: 

在自定義控制元件中定義圖片資源,可以使用DuiVision提供的幾個宏來減少代碼量,舉個例子,例如定義上面按鈕的圖片資源,需要寫的代碼如下: 
1、在頭檔案的類定義中使用DUI_IMAGE_ATTRIBUTE_DEFINE宏來定義一個圖片,這個宏的引數是圖片資源的變數名中的一部分,例如Btn表示按鈕的圖片,這個宏一般定義在控制元件的屬性定義部分的上面:
    DUI_IMAGE_ATTRIBUTE_DEFINE(Btn);        // 定義按鈕圖片
    DUI_DECLARE_ATTRIBUTES_BEGIN()
        DUI_COLOR_ATTRIBUTE(_T("crtext"), m_clrText, FALSE)
    DUI_DECLARE_ATTRIBUTES_END()


實際通過這個宏會定義兩個類成員變數,分別是:
Image* m_pImageBtn;
CSize m_szieBtn;

這兩個變數分別是圖片物件指標和圖片的大小,同時這個宏會定義幾個針對這個圖片的初始化和通過xml屬性加載用到的函式,使用這個宏之后我們可以不用關心復雜的圖片定義、加載的細節。

2、定義圖片的屬性,用于xml檔案中定義圖片時候的屬性名字,例如針對這個Btn圖片的屬性定義:
DUI_CUSTOM_ATTRIBUTE(_T("img-btn"), OnAttributeImageBtn)

這里定義的img-btn就是在xml中對應的按鈕的圖片屬性名,OnAttributeImageBtn是對應的圖片屬性加載用到的函式,在上面的圖片定義宏中已經隱含的定義了這個函式,所以這里只要按照命名規則寫就可以了,命名規則就是OnAttributeImage+前面定義的圖片變數名一部分。

3、解構式中對圖片資源的釋放 
按照上一節所說的解構式寫法就可以,注意其中的圖片資源的變數名就是按照 “m_pImage+前面定義的圖片變數名一部分” 這樣的規則。

4、在控制元件的cpp實作檔案的解構式下面增加下面這段代碼
// 圖片屬性的實作
DUI_IMAGE_ATTRIBUTE_IMPLEMENT(CDuiButton, Btn, 4)

通過上面這個宏可以實作在頭檔案中定義的圖片的初始化、xml屬性加載相關的幾個函式,這個宏的第一個引數是控制元件的型別,第二個引數和頭檔案中定義的名字一部分相同,第三個引數表示這個圖片橫向分割為幾個小圖片。

5、圖片的使用 
主要是在畫圖函式中使用,參加控制元件的畫圖的章節。

位置資料處理

控制元件的位置資料是根據父控制元件的位置變化可能需要進行調整的,DuiVision已經對位置資料的計算進行了封裝,包括支持相對位置,當一個控制元件的位置發生變化時候,控制元件內的一些位置資訊可能需要相應的進行調整,控制元件內的位置調整就需要控制元件多載SetControlRect虛函式進行調整了。
對于自定義控制元件,如果控制元件中沒有類似需要計算的相對位置,則不需要實作這個函式,如果有的話,就需要多載這個函式進行內部的一些位置資料的計算。

畫圖

控制元件要在界面顯示出來,就必須要實作DrawControl虛函式,下面是檢查框控制元件的畫圖函式,增加了每一步的說明:
void CCheckButton::DrawControl(CDC &dc, CRect rcUpdate)
{
    int nWidth = m_rc.Width();
    int nHeight = m_rc.Height();

    if(!m_bUpdate)  // 是否需要重畫整個控制元件
    {
        // 申請記憶體dc
        UpdateMemDC(dc, nWidth * 6, nHeight);

        // 用記憶體dc初始化GDI+的graph物件
        Graphics graphics(m_memDC);
        CRect  rcTemp(0, 0, nWidth, nHeight);

        // 畫種狀態的圖片
        for(int i = 0; i < 6; i++)
        {
            // 將背景資訊先復制到記憶體dc對應狀態的位置
            m_memDC.BitBlt(i * nWidth, 0, nWidth, nHeight, &dc, m_rc.left ,m_rc.top, SRCCOPY);

            // 在記憶體dc對應狀態的位置畫檢查框對應狀態的圖片
            graphics.DrawImage(m_pImage, Rect(rcTemp.left, rcTemp.top + (nHeight - m_sizeImage.cy) / 2,   m_sizeImage.cx, m_sizeImage.cy),
                i * m_sizeImage.cx, 0, m_sizeImage.cx, m_sizeImage.cy, UnitPixel);

            // 計算下一個狀態的記憶體dc位置
            rcTemp.OffsetRect(nWidth, 0);
        }

        // 如果設定了檢查框文字,則畫文字到記憶體dc
        if(!m_strTitle.IsEmpty())
        {
            m_memDC.SetBkMode(TRANSPARENT);

            rcTemp.SetRect(0, 0, nWidth, nHeight);

            // 設定字體
           ......

            // 設定對齊方式等引數
            ......

            // 每一種狀態的記憶體dc中疊加上文字的內容
            ......
        }
    }

    // 將保存的記憶體dc內容中對應當前狀態的部分復制到實際界面顯示的dc
    dc.BitBlt(m_rc.left,m_rc.top, m_rc.Width(), m_rc.Height(), &m_memDC, m_enButtonState * nWidth, 0, SRCCOPY);
}


檢查框控制元件的實際顯示效果如下: 
 
DrawControl函式的實作思路: 
1、傳入的引數dc和rcUpdate分別表示實際畫圖的dc和重繪的區域,在DrawControl中第一次需要執行一次完整的畫圖的流程,將顯示內容存盤到一個記憶體dc中,以后如果這個控制元件的界面顯示沒有變化的話,DrawControl只需要將保存的記憶體dc的內容復制到顯示的dc就可以了,這樣可以加快顯示的速度,如果所有控制元件都沒有變化,實際上整個界面的顯示就是把所有控制元件的記憶體dc內容一層一層復制到顯示dc,先后一次性顯示出來,復制時候是按照控制元件添加的順序進行復制的。DrawControl中用于控制是否重新畫圖還是僅復制記憶體dc的開關是m_bUpdate變數,如果為true表示僅復制記憶體dc,false表示要重畫控制元件。 
2、如果是重畫整個控制元件,則需要使用UpdateMemDC函式申請記憶體dc,每個控制元件類中都有保存一個記憶體dc成員變數,UpdateMemDC函式中會判斷如果申請的寬度或高度和以前保存的不一樣,就會先釋放掉以前保存的記憶體dc,然后在按照新的尺寸申請一個新的,如果和以前一樣大小就使用以前的。注意申請記憶體dc時候一般并不是只申請和控制元件大小相同的記憶體dc,而是按照控制元件有多少種狀態,就申請幾倍大小的記憶體dc,例如檢查框控制元件有六種狀態,一般的按鈕有四種狀態,如果是簡單顯示一個文字或圖形,沒有多種狀態的,則申請和控制元件大小相同的記憶體dc就可以了。對于多個狀態的記憶體dc申請,可以按照每種狀態的圖片在記憶體dc中橫向排列或縱向排列,或者復雜的控制元件可能會包含了多個子圖形的多個狀態混合排列在記憶體dc中,上面檢查框的代碼中是按照橫向排列的,因此申請時候是width乘以6。 
3、DuiVision大部分的控制元件都使用的GDI+進行畫圖,因此會使用記憶體dc創建一個GDI+的圖形物件,Graphics graphics(m_memDC);然后就是具體的控制元件的畫圖操作。 
4、對于檢查框的具體畫圖操作,是先畫6種狀態下的檢查框圖片到記憶體dc對應圖片的位置,然后再畫文字到每種狀態對應的位置,這里檢查框圖片對應每種狀態是不同的,文字在每種狀態下都是相同的,但也需要重復畫到每種狀態的位置。 
5、對于檢查框,還需要考慮控制元件處于焦點狀態下時候要畫控制元件周圍的虛線框m_bIsFocus成員變數表示當前控制元件是否處于焦點狀態,m_bShowFocus表示這個控制元件是否要顯示焦點框,這是由showfocus屬性決定的,只有這兩個變數都為true時候才需要畫焦點框。 
6、DrawControl最后將記憶體dc復制到顯示dc時候,需要注意的是根據當前的狀態,決定把記憶體dc中對應狀態部分的內容復制到顯示dc,檢查框的記憶體dc是按照狀態橫向排列的,所以使用m_enButtonState * nWidth定位到橫向的具體記憶體dc位置。

事件處理

控制元件的事件處理最常用的是滑鼠和鍵盤事件的處理,相關的幾個需要實作的虛函式如下:

virtual BOOL OnControlMouseMove(UINT nFlags, CPoint point);
virtual BOOL OnControlLButtonDown(UINT nFlags, CPoint point);
virtual BOOL OnControlLButtonUp(UINT nFlags, CPoint point);
virtual BOOL OnControlKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);

檢查框的滑鼠移動事件處理函式如下:

BOOL CCheckButton::OnControlMouseMove(UINT nFlags, CPoint point)
{
    enumButtonState buttonState = m_enButtonState;
    if (!m_bIsDisable && !m_bMouseDown)
    {
        // 設定狀態
        ......
    }

    if(buttonState != m_enButtonState)
    {
        UpdateControl();
        return true;
    }
    return false;
}

主要實作思路就是判斷滑鼠位置是否在控制元件的范圍內,從而決定控制元件當前的狀態應該更改為什么,并且要判斷滑鼠按下和非按下情況下,對應的狀態是不一樣的。 
根據這些判斷可以計算出新的控制元件狀態,在函式進入的時候會保存之前的狀態,最后需要比較一下新舊狀態是否一致,不一致情況下就需要重新重繪一下控制元件的界面,重繪方法是呼叫UpdateControl函式。 
滑鼠按下和放開的事件處理和上面的函式是類似的,另外像按鈕或檢查框等控制元件,在滑鼠放開的時候需要發送一個點擊事件(滑鼠點擊就是滑鼠在一個控制元件上按下又放開,一般都是在放開時候觸發一個點擊事件),檢查框的滑鼠放開事件代碼如下,可以看到通過呼叫SendMessage函式可以發送一個點擊事件:

BOOL CCheckButton::OnControlLButtonUp(UINT nFlags, CPoint point)
{
    enumButtonState buttonState = m_enButtonState;
    if (!m_bIsDisable)
    {
        if(m_rc.PtInRect(point))
        {
            // 發送DUI訊息           
        }
        else
        {
            ......    
        }
    }
    m_bMouseDown = false;

    ......
    return false;
}


控制元件的使用

按照以上控制元件的開發方法開發了一個控制元件之后,如果將控制元件應用在DuiVision應用程式中,有兩種方法,可以將控制元件添加到DuiVision庫代碼中或者僅作為自定義控制元件,添加到自己的應用程式中。 
如果你開發的控制元件是一個很多人都會用到的控制元件,建議添加到DuiVision庫中,可以提交到github專案中,如果覺得合適會合入主線版本,這樣其他人也都可以使用。 
如果僅是某個專案中使用的特殊控制元件,建議按照自定義控制元件的方式添加到自己的應用程式工程中。

控制元件添加到DuiVision庫中的方法

1)首先把控制元件的頭檔案和cpp分別放在DuiVision庫的include和source目錄下,然后添加到DuiVision工程中; 
2)在DuiVision.h中添加對控制元件頭檔案的參考; 
3)在DuiSystem的LoadDuiControls函式中添加如下的控制元件注冊代碼:
REGISTER_DUICONTROL(CDuiUserControl, NULL);

完成以上幾步就可以使用新的控制元件了。

控制元件添加到自己的應用程式工程中的方法

自定義的控制元件代碼開發完成后,將代碼添加到用戶自己的代碼工程中,然后在控制元件使用之前注冊到DuiVision庫中就可以,建議注冊代碼放在主程式的DuiSystem初始化之后,下面的代碼演示了在主程式中注冊類名為CDuiUserControl的自定義控制元件的方法,藍色部分代碼就是用于注冊自定義控制元件的代碼:

BOOL CDuiVision1App::InitInstance()
{
    //初始化
    ......

    // 注冊用戶自定義控制元件控制元件
    REGISTER_DUICONTROL(CDuiUserControl, NULL);

    // 創建主視窗
    ......
    return FALSE;
}


說明:因為字數限制,部分代碼省略,完整內容可以參考CSDN博客中的文章
附:
DuiVision開源代碼下載地址(github):https://github.com/blueantst/DuiVision 
藍螞蟻作業室主頁:http://www.blueantstudio.net
DuiVision QQ群:325880743 

使用DuiVision開發的一些界面演示:








uj5u.com熱心網友回復:

學習,感謝分享。

uj5u.com熱心網友回復:

厲害了

uj5u.com熱心網友回復:

厲害了,我的兔哥哥

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

系統的按鈕應該五種狀態:常規、懸停、按下、禁用、焦點。你說的:滑鼠在控制元件上按下的狀態、按下時滑鼠移動到控制元件上的狀態,兩種其實是同一種狀態。焦點按鈕與常規按鈕的區別是,2k 下焦點就是邊框變粗,XP 則是帶虛線框,7 上面則是顏色深淺不斷切換的影片、8、10 則是淡藍色高亮邊框。具有焦點的按鈕,按下空格鍵、Enter 鍵應該視為按鈕被按下。系統的復選(勾選)按鈕,單選按鈕,每種狀態都是四種:常規、懸停、按下、禁用,而不是三種,不過你沒有包含禁用效果,因此常用也就三種。三態勾選框所有狀態加起來應該是 12 張圖,而圓形單選按鈕,兩種狀態加起來是 8 張圖。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/112541.html

標籤:界面

上一篇:MFC透明界面,滑鼠根本點不到界面上啊

下一篇:如何區分出等密度散點和不等密度散點

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more