Duilib 改造之路 1 擴充套件標籤

2021-06-27 15:11:15 字數 927 閱讀 9225

大約耗時:1-15分鐘

duilib的介面繪製大部分是根據xml檔案來實現的,除了預設標籤之外,它為程式設計師留下了乙個使用者自定義標籤userdata,我們可以通過getuserdata和setuserdata來設定這個值實現資料繫結,如果需要繫結的元素很多該怎麼辦?

上面是乙個自定義duilib控制項的xml描述,裡面包含了大量的自定義標籤,他是怎麼實現的?

首先來了解duilib對標籤的處理方式,面對duilib大量的**,該怎麼去?

答案是:ctrl+f,在使用第三方**時我們完全沒有必要浪費時間掌握所有**,因為這是和原始碼作者的"分工合作",我們不需要重複工作

因為duilib使用xml作為標識工具,所以原始碼裡面必然有與標籤名相同的部分.例如"name"這個標籤,我們通過在duilib專案中查詢"name"(包含引號),就會找到

duilib就是通過setattribute函式來繫結資料的,那麼我們只要在這裡新增我們的自定義標籤就可以了?然後你真的乙個個去加麼?這樣維護起來方便麼?

這是我的修改方式,直接把所有duilib預設的標籤全部存放到乙個map容器裡面,這樣我們就不需要重複新增標籤

最後新增乙個獲取函式,這樣我們就可以很方便地使用自定義標籤了,這也是對duilib修改的第一步,雖然很賤單,但是因為後面我們將會使用到很多自定義標籤來完成繁瑣的資料繫結,所以這一步很重要

注意:1,要在duilib中新增對stl支援,當然也可以考慮使用duilib中的容器類

1,Duilib訊息機制

說到訊息,對於windows訊息,一般分為 1,標準訊息 除了wm command外的以wm 開頭的訊息 2,通告訊息,控制項發出。3,命令訊息,wm command.傳送訊息會想到什麼?sendmessage,postmessage,區別是?post 把訊息丟到訊息丟到訊息佇列中去,立即返回,而s...

Duilib教程 自動布局1

我們要實現乙個帶標題欄和狀態列的程式,同時要支援拉伸,即包括最小化 最大化,圖如下 在duidesigner中,拖動視窗邊框,即可看到效果,標題欄和狀態列的位置都不變,即隨視窗大小而改變。看屬性,發現,status和title都有屬性 height,而中間的,什麼屬性都沒有。在視窗設定如下 可以知道...

Duilib教程 自動布局1

我們要實現乙個帶標題欄和狀態列的程式,同時要支援拉伸,即包括最小化 最大化,圖如下 在duidesigner中,拖動視窗邊框,即可看到效果,標題欄和狀態列的位置都不變,即隨視窗大小而改變。看屬性,發現,status和title都有屬性 height,而中間的,什麼屬性都沒有。在視窗設定如下 可以知道...