問:如何把資源放入zip?
答: 先setresourcepath設定資源目錄,再setresourcezip設定壓縮資源檔名
問:如何設定窗體的初始化大小?
答:設定xml檔案的window標籤的size屬性。
問:如何設定滑鼠可拖動窗體的範圍大小?
答:設定xml檔案的window標籤的caption屬性。
問:如何設定窗體可以通過拖動邊緣改變大小?
答:在窗體建立函式的第三個引數設定為ui_wndstyle_frame才可響應拖動改變大小,和雙擊標題事件。
問:為何滑鼠移動到邊緣沒有改變窗體大小的箭頭出現,不能通過拖動改變窗體大小?
答:設定window標籤的sizebox屬性,例如sizebox="2,2,2,2"
問:窗體不可雙擊最大化如何實現?
答:在窗體建立函式的第三個引數設定為ui_wndstyle_dialog。
問:應用程式exe圖示如何設定?
答:使用窗體成員函式seticon,引數為資源icon的id。
問:初始化時,最大化窗體如何實現?
答:呼叫窗體的sendmessage給窗體傳送最大化訊息sc_maximize,sendmessage(wm_syscommand, sc_maximize,0);
問:動態改變窗體的大小如何實現?
答:使用窗體函式resizeclient,引數分別重設的寬和高。
問:如何設定窗體螢幕居中顯示?
答:使用窗體的centerwindow函式。
問:窗體透明度如何設定?
答:設定window標籤屬性bktrans="true" alpha="200" alpha的值為0-255。這種設定是全體窗體透明度,所有控制項都將變透明。
如果想單純設定背景透明度控制項不透明度,可以製作半透明的背景,設定window標籤的bktrans="true",並且不設定alpha屬性,切記!此時背景透明,其它控制項不透明。
單獨設定某個控制項的透明度,可以使用的fade屬性,或者mask屬性。fade表示設定透明度,取值0-255。mask為設定透明的顏色。
問:預設設定的為拉伸平鋪模式,如何設定不拉伸顯示?
答:設定的source和dest屬性,soure="左,上,右,下" dest="左,上,右,下"
表示將source區域的顯示到按鈕的dest區域上。這裡的右和下是指座標,不是指寬度和高度。右=左+width.下=top+height。
問:如何設定選定編輯框文字的背景顏色?
答:設定nativebkcolor屬性。
問:如何設定按鈕的滑鼠懸浮時的字型顏色?
答:設定按鈕的hottextcolor屬性,相對的還有pushedtextcolor和focustextcolor.
問:如何設定按鈕按下時字型的顏色?
答:設定按鈕的pushedtextcolor屬性,相對的還有hottextcolor和focustextcolor.
問:如何自定義xml控制項?
答:自定義控制項和複雜的控制項型別都是由簡單基本控制項組成。
在寫好乙個自定義的控制項xml模板後,
cdialogbuilder dlg_builder;
ccontrolui * pcontrol = dlg_builder.create("item.xml");
注意這裡的item.xml要放在主介面的xml所在的資料夾內,並且無需在指定路徑了。
該函式返回乙個ccontrolui的乙個控制代碼,得到這樣乙個控制代碼就是乙個控制項了。
如果要獲取複雜控制項的某個子控制項的控制代碼,然後想通過該控制代碼改變子控制項的狀態。
首先給這個子控制項取乙個名字,然後可以通過pcontrol的findsubcontrol("name")來獲取該
控制項的控制代碼了。得到控制代碼後就可以設定它的所有屬性了,例如
pbtn->setattribute(_t("normalimage"), _t("file='images\\downlist_ok.png' dest='20,14,32,26'"));就能更改它的狀態了。
問:多執行緒下如何更改dui的介面資訊?
答:1、在stdafx.h加入以下
#define vc_extralean
#include // mfc 核心元件和標準元件
#include // mfc 擴充套件
#include // mfc 自動化類
#ifndef _afx_no_ole_support
#include // mfc 對 internet explorer 4 公共控制項的支援
#endif
#ifndef _afx_no_afxcmn_support
#include // mfc 對 windows 公共控制項的支援
#endif // _afx_no_afxcmn_support
2、在程式初始化main的開始加入mfc的初始化。
// initialize mfc and print and error on failure
if (!afxwininit(::getmodulehandle(null), null, ::getcommandline(), 0))
3、設定頁屬性-->常規-->使用mfc設定為 use mfc in a shared dll
4、設定c++-->**生成-->執行時庫根據debug或者release設定為mdd或者md。
duilib繪圖部分
影象的繪製大部分使用了繪製引擎的drawimagestring函式,該函式實現知道影象名稱繪製到指定目標區域的功能
並且通過指定pstrmodify的屬性能夠進行不同需求的繪製,例如,僅扣取源影象的某個位置繪製到目標的某個區域、
設定四邊圓角繪製、為bmp等指定某種顏色為透明顏色、平鋪或者拉伸繪製、設定透明度等。
drawimagestring最終又呼叫crenderengine::drawimage進行繪製。
duilib中所有元素的顯示都在整個訊息迴圈的wm_paint中進行繪製。
第一次繪製之前會傳送乙個名為_t("windowinit")的通知。
然後為ccontrolui的繪製,繪製的順序為:背景顏色->背景圖->狀態圖->文字->邊框
會順序呼叫ccontrolui的以下函式。
paintbkcolor(hdc); // 繪製背景顏色
paintbkimage(hdc); // 繪製背景圖
paintstatusimage(hdc); // 繪製狀態圖
painttext(hdc); // 繪製文字
paintborder(hdc); // 繪製邊框
duilib中把檔案載入到記憶體後,由庫stb_image.c解析並最終轉為dib處理。
duilib支援從檔案、從包含檔案的壓縮包檔案和vc資源中載入。
載入後最終返回timageinfo結構體指標,包含hbitmap、影象寬度、影象高度、alpha通道、mask和資源型別等資訊。
載入函式為:timageinfo* crenderengine::loadimage(stringorid bitmap, lpctstr type, dword mask);
duilib中所有的資源只從載入一次,然後儲存在cpaintmanagerui中的m_mimagehash成員中,該成員為乙個
hashmap儲存timageinfo*資訊,當已經存在要繪製顯示的資訊時,直接從map中獲取顯示,否則從檔案載入
在新增到map中。
問:如何管理duilib介面**資源?
答:把所有xml檔案在同乙個目錄下,資源另外放在乙個地方。當如下進行布局資源時,skin目錄為設定資源的目錄,imagedir1目錄放置1.xml檔案利用到的資源,imagedir2放置2.xml檔案利用到的資源。
然後1.xml檔案檔案中的資源名稱需要加上相對於當前xml檔案的路徑資訊即可。例如:normalimage="imagedir1/1.png"這樣的形式。使用設計器為xml新增資源時會自動轉化為相對路徑。
skin/
1.xml
2.xml
imagedir1/
1.png
2.png
imagedir2/
1.png
2.png
需注意乙個問題,那就是字型的管理。字型對於乙個視窗來說是全域性的,索引從0開始,font = 0表示使用排在第一位的字型。如果乙個介面被拆分為多個xml檔案管理,並且當每個單獨的檔案自己新增字型時,聯合起來的時候,會跟其它的字型發生衝突,即索引不是原來的索引了。索引得從全域性來看。按照全域性的方式進行設定好索引後,對於每個xml檔案的預覽操作時,又看不到所見即所得的效果了。
duilib入門教程
duilib是乙個開源 的directui 介面庫,使用xml來描述介面風格,介面布局,將介面與邏輯分離,能夠快速開發美觀的介面。2.2編譯 開啟根目錄的duilib.sln,github上的工程是vs2013的,使用vs2017開啟時,會提示公升級工程,點公升級即可。如果沒有公升級成功,在工程配置...
DuiLib入門簡明教程
2013 duilib入門教程彙總 2013 duilib入門簡明教程 前言 1 2013 duilib入門簡明教程 vs環境配置 2 2013 duilib入門簡明教程 第乙個程式 hello world 3 2013 duilib入門簡明教程 響應按鈕事件 4 2013 duilib入門簡明教程...
duilib與CEF衝突問題
duilib與cef衝突問題 flyfish 關於嵌入式瀏覽器框架cef cef dom.h檔案中的定義是 cef virtual cefrefptrgetnextsibling 0 關於duilib引用了標頭檔案windowsx.h中的定義是 define getnextsibling hwnd ...