Duilib學習筆記《04》 窗體顯示

2021-06-27 21:43:56 字數 2507 閱讀 6480

1#include "..\duilib\uilib.h"

2usingnamespaceduilib;

3#ifdef _debug

4#   ifdef _unicode

5#       pragma comment(lib, "..\\bin\\duilib_ud.lib")

6#   else

7#       pragma comment(lib, "..\\bin\\duilib_d.lib")

8#   endif

9#else

10#   ifdef _unicode

11#       pragma comment(lib, "..\\bin\\duilib_u.lib")

12#   else

13#       pragma comment(lib, "..\\bin\\duilib.lib")

14#   endif

15#endif

在工程中的stdafx.h標頭檔案中新增上述**。當然,也並不一定非要在stdafx.h檔案中新增,根據自己工程的實際情況進行設定即可。

在duilib中,所有的視窗均繼承自cwindowwnd類,在cwindowwnd類中由虛函式handlemessage來處理windows訊息(如wm_create、wm_size等等),所以對於本例的窗體類,同樣需要繼承cwinowwnd,同時窗體類中需要重寫虛函式handlemessage用於windows訊息的處理。

而對於duilib,我們此時更關心是介面元素是如何建立顯示出來的。實際上,在create建立窗體類時會觸發wm_create訊息,這個訊息也就都由窗體類中的handlemessage函式來處理,具體可檢視示例**窗體類中該函式。wm_create訊息對應的訊息處理函式oncreate:

1lresultcmainwnddlg::oncreate(uintumsg,wparamwparam,lparamlparam,bool& bhandled )

2

在窗體類的oncreate函式中載入窗體對應的xml布局檔案並動態建立介面元素。

1intapientry _twinmain(hinstancehinstance,

2hinstancehprevinstance,

3lptstrlpcmdline,

4intncmdshow)

5

在入口函式中設定相關初始化,然後建立視窗,這樣一來,編譯執行即可顯示對應的視窗。

:這裡知識粗略提一下,具體的在duilib原始碼分析系列再具體說明)

實際上,經過上述操作後就已經可以顯示出介面效果了。但這裡,對第二步中關於xml檔案的載入額外補充說明一下。

cpaintmanagerui::視窗訊息及圖形繪製管理器類。

cdialogbuilder: 建立控制項類,分析指令碼並用遞迴方式(_parse函式)建立所有控制項例項。

在m_pm.attachdialog操作中,duilib中內部處理:

-> initcontrols (初始化控制項)-> findcontrol-> __findcontrolfromnamehash->pmanager->m_mnamehash.insert(把控制項插入到hash中)

至此,介面已經可以顯示出來了,而如何進行事件處理、訊息響應呢?在duilib學習筆記《05》中再具體說明…0

DUILib學習筆記 訊息處理

win32下視窗訊息迴圈 msg msg while getmessage msg,null,0,0 1.訊息迴圈,在cpaintmanagerui messageloop duilib中增加了乙個訊息預處理,類似mfc pretranslatemessage msg msg while getme...

Duilib學習筆記《07》 資源載入

duilib的介面表現力能如此豐富,很大程度上得益於貼圖描述的簡單強大。通過之前的學習及參看相關例子,我們可以發現,在xml布局檔案中,不管是窗體背景還是控制項,都新增了對應的資源以此來美化介面。而很多人在參看例子時發現有著多種新增資源方式,其實總結下來可以簡單概括為一下兩種 簡單模式 使用檔名作為...

Duilib學習筆記《03》 控制項使用

高階控制項 一些控制項的基本顯示效果就如同上面兩幅圖所示。實際上,在 duilib學習筆記 01 duilib整體框架認識中我們就已經提到過duilib這個庫的組成,其中就提到了控制項這部分,如下圖所示 對應到工程 中,實際上是分為了兩部分 core和control。core中包含的是所有控制項公用...