天天看點

Duilib自定義控件

方法一:

1.1 繼承IDialogBuilderCallback類,重寫CreateControl函數。

1.2 在使用該控件的類中繼承OnCreate函數,代碼如下:

        CDialogBuilder builder;

        CDialogBuilderCallbackEx cb;

        CControlUI* pRoot = builder.Create(_T("LoginMainWnd.xml"), (UINT)0,  &cb, &m_pm);

執行個體:在視窗MainWnd中自定義一個控件miFileName(該控件使用xml的形式定義),在控件miFileName裡面定義一個CaoGifAnim控件。

如圖:1、MainWnd中定義miFileName

Duilib自定義控件

2、miFileName控件中定義CaoGifAnim

Duilib自定義控件

3、mainWnd的CreateControl函數

Duilib自定義控件

4、miFileName控件的DoInit函數(關鍵是添加callback)

Duilib自定義控件

方法二:

2.1 在使用該控件的類中重寫CreateControl函數。

2.2 使用WindowImplBase類實作的建立視窗的方法。也就是不重寫OnCreate。

方法三:使用REGIST_DUICONTROL注冊(在DuiLib_Ultimate中封裝)。

未完待續...

在自定義控件中繼承實作

LPCTSTR GetClass() const;

LPVOID GetInterface(LPCTSTR pstrName);

在視窗中繼承實作

CControlUI* CreateControl();

說明一下:在自定義控件中添加void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);之後,在InitWindow中使用該控件對于的name找不到(這個問題找了很久的原因,最終發現是添加了SetAttribute導緻的)。

繼續閱讀