免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Duilib教程-控件練習

Duilib教程-控件練習

一、控件消息的響應。

在HelloDuilib例子中,程序不能退出,在這里,我將添加一個關閉按鈕,當點擊它時,調(diào)用PostQuitMessage進行退出。

首先在界面的右上角添加一個關閉按鈕,并取名為“btnClose”。

然后在 CHelloDuilibWnd 中重載 WindowImplBase::Notify ();

代碼如下:

void CHelloDuilibWnd::Notify( TNotifyUI& msg ){    if (msg.sType == DUI_MSGTYPE_CLICK) // 先判斷消息類型,如果是單擊    {        if (msg.pSender->GetName() == _T ("btnClose")) // 如果控件名為 btnClose        {            PostQuitMessage(0);        }    }}

 

如是即可退出程序。

 

二、獲取XML中的控件

一般的情況下,可以在窗口初始化的時候獲取一個控件,當然你在什么時候獲取都是可以的,在初始化獲取,以后你就可以任意地使用了。

添加重載函數(shù):WindowImplBae::InitWindow,代碼如下:

void CHelloDuilibWnd::InitWindow(){    m_btnClose = static_cast <CButtonUI*> (m_PaintManager.FindControl(_T ("btnCloase")));    ASSERT(m_btnClose != NULL);}

把上面我們添加的關閉按鈕對象保存起來。

請注意,是使用 m_PaintManager 進行獲取,該對象負責管理所有工作,包括消息的傳遞,調(diào)用控件的繪制函數(shù)等,均由它處理。

 

三、標題欄

窗口有一個屬性 caption 指定了窗口標題欄的位置。默認0代表了窗口的最大值。比如說,我們想要標題欄高度為30像素,即可設為:(0,0,0,30)left, top, right都為0,只有bottom30right0表示為最右邊。當然如果全部設為0,會被認為沒有標題欄。

 

四、示例程序的練習。

在這里,我并不會為你介紹所有控件的編寫,只是作一個簡單的介紹,然后控件的編寫還需要你自己動手,只有自己寫過的代碼才是掌握了的代碼。如果以每天學一個控件的效率的話,大概頂多兩周即基本掌握所有控件的寫法。下面是我以前學習的一個例子,截圖如下,最后我也會附件貼上,希望對您的學習有所幫助。

當然我并沒有編寫所有的控件,比如menu、progressbar、sliderbar、tree等控件,這個示例是好久以前寫的了。

 

關于控件特定的屬性,如果你用心用過 DuiDesigner.exe的話,相信你已經(jīng)知道它在哪里了,DuiDesigner會將每個控件的特殊的屬性,單獨列出來,如下圖中Button控件的屬性:

 

其它控件亦是如此。

 

1.控件的基本屬性:

1)Name,名稱,即類 CControlUI::GetName () 所返回的值。

2)Text, 標題

3)TextPadding,文字偏移。比如文字從第2個像素開始顯示,則可設為(2,0,0,0)。注意,如果是使用單選框或是復選框,一定要使用到這個屬性,使文字顯示在圖片的右邊,即TextPaddingleft為設置為圖片的寬或更寬。

4)ShowHtml,標志Text屬性的值是否為html。注意:這里的HTML并不是真的HTML,它不能使用HTML標簽,只能使用內(nèi)定的,如<i> 表示圖片或文字傾斜等。

5)EndEllipsis,標志Text屬性,當顯示不完全時,最后是否以 ... 進行顯示。

 

關于float及 Layout 的 insertchildpadding、hscrollbar、vscrollbar等屬性,我會在自動布局中進行說明。

 

2.控件的特殊說明

1)DUILIB中并沒有 TAB 控件。它的實現(xiàn)方式為:

 

使用OptionUI即單選框代表TAB選擇框,TabLayout代表窗口顯示的區(qū)域。當Option被選擇的時候,調(diào)用CTabLayoutUI::Select (index),即可。具體如何操作,請參看示例。

 

2)DUILIB中并沒有單選框。

單選框和復選框都用OPTION表示,當然現(xiàn)在也有了CCheckBoxUI類,但我并不喜歡用,原因是DuiDesigner中并沒有提供這個控件,所以我不會使用它,以免造成不必要的麻煩。

區(qū)分單選框和復選框主要是靠 Group屬性,當指定了Group屬性時,這個OPTION就是一個單選框,且所有 Group相同的Option都是同一組,即他們中只有有一個處于選中狀態(tài)。如果Group為空,那它就是一個復選框。

 

3)Label顯示的文字是單行。Text控件顯示的文本是多行。

 

4)Combox 它的子項設置如下圖designer并沒有提供設置項,而且如果你的XML原來有COMBOX的子項設置項,這時候你用designer打開,并進行保存時,你的子項會被刪除,所以要注意副本保存工作。

 

使用 ListLabelElement。

如果使用代碼動態(tài)添加子項,就要使用類 CListLabelElementUI或是CListLabelContainerUI,前者只是TEXT項,當然可以使用 ShowHtml屬性進行圖片顯示。后者則可以添加多個控件,請試驗之。

 

四、關于BUG。

1.Align屬性。

UILabel181行。代碼如下:

if( _tcscmp(pstrName, _T("align")) == 0 ) {            if( _tcsstr(pstrValue, _T("left")) != NULL ) {                m_uTextStyle &= ~(DT_CENTER | DT_RIGHT | DT_VCENTER | DT_SINGLELINE);                m_uTextStyle |= DT_LEFT;            }            if( _tcsstr(pstrValue, _T("center")) != NULL ) {                m_uTextStyle &= ~(DT_LEFT | DT_RIGHT );                m_uTextStyle |= DT_CENTER;            }            if( _tcsstr(pstrValue, _T("right")) != NULL ) {                m_uTextStyle &= ~(DT_LEFT | DT_CENTER | DT_VCENTER | DT_SINGLELINE);                m_uTextStyle |= DT_RIGHT;            }            if( _tcsstr(pstrValue, _T("top")) != NULL ) {                m_uTextStyle &= ~(DT_BOTTOM | DT_VCENTER | DT_VCENTER);                m_uTextStyle |= (DT_TOP | DT_SINGLELINE);            }            if( _tcsstr(pstrValue, _T("vcenter")) != NULL ) {                m_uTextStyle &= ~(DT_TOP | DT_BOTTOM );                            m_uTextStyle |= (DT_CENTER | DT_VCENTER | DT_SINGLELINE);            }            if( _tcsstr(pstrValue, _T("bottom")) != NULL ) {                m_uTextStyle &= ~(DT_TOP | DT_VCENTER | DT_VCENTER);                m_uTextStyle |= (DT_BOTTOM | DT_SINGLELINE);            }        }

 

我們可以看到,它使用_tcsstr,即字符串查找,所以如果你使用了vcenter后,左、右對齊屬性均失效的。所以,顯示圖片+文字的時候,非常蛋疼的問題來了,文字顯示左對齊時,同時也是向上對齊的,它不垂直居中。。。舊版本沒有這個問題,這個是新版本改出來的BUG

 

2.如果你是手動編寫XML,且里面包含中文,一定要將該XML使用UTF-8方式進行保存,否則會遇到類似文字顯示不出來的BUG。

 

3.使用CListUI::SortItems時,如果你使用了自定義參數(shù),會導致崩潰,因為它并沒有將你的自定義參數(shù)保存,只保存了你的比較函數(shù),如果你在比較函數(shù)中使用了自定義參數(shù),很明顯會崩潰。

具體代碼在 UIList 866行,dwData該參數(shù)并未保存。

而在901行的函數(shù)ItemComareFunc中,卻使用了未初始化的m_compareData。

 

4.Tree控件,也有BUG。

在 UITreeView.cpp中的31行,看代碼:

this->SetFixedHeight(18);this->SetFixedWidth(250);

很顯然,一個TREE_ITEM寬度居然只有250像素,當你的TREE寬度大于250的時候,就會顯示該BUG了。

 

五、當你編寫完所有示例之后,就會知道為什么我在上一節(jié)中說,為什么一個WND一定要有一個Layout。其具體加載的流程如下:

 

Root即為第一個 Layout.

 

我的示例代碼:Duilib_test.zip

當然,你一定要熟悉DUILIB中所有DEMO,你不用所有代碼都去看過,但一定要知道他們都有些什么功能,當你在項目中遇到相似的情況時,可以從中去找解決方案。

比如,

360中OPTION的應用。

GAME中DEFAULT屬性應用,分隔條使用。

QQ有自動換膚、加載ZIP資源代碼。

TEST_APP中關于自動布局。。等等。

你一定要過目一遍甚至多遍。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Duilib學習筆記《07》— 資源加載
用Duilib界面庫開發(fā)的一個日歷控件
此電腦雙擊打不開只能右鍵打開怎么辦?雙擊打開顯示Duilib 加載資源文件失敗
ComboBoxEdit 方法與屬性設置
Duilib
Winform導出DataGridView當前頁以及全部數(shù)據(jù)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服