Duilib教程-非DUI控件

DUILIB並非真正的DUI,至少有部分控件不是徹底DUI的。其實包括:網絡

1.EDIT.this

它的實現原理是,CEditUI包含一個窗口CEditWnd,流程以下:spa

1)鼠標單擊,建立窗口見 EditUI.cpp第217行,在第223行有建立的代碼:code

m_pWindow = new CEditWnd();
ASSERT(m_pWindow);
m_pWindow->Init(this);

 

2)失去焦點時,刪除本身,見EditUI.cpp第103行和第131行,blog

LRESULT CEditWnd::OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
     LRESULT lRes = ::DefWindowProc(m_hWnd, uMsg, wParam, lParam);
    PostMessage(WM_CLOSE);
    return lRes;
}

在這裏,咱們也注意到了,它並無給父窗口發送 KillFocus消息,只是簡單地關閉本身。博客

2.RICHEDITit

這個控件稍複雜,我也沒仔細看,不過大概知道它是使用COM組件的東東,本身實現SCROLL_BAR。有興趣的同窗能夠研究一下。class

3.COMBOBOX原理

這時的非DUI部分主要是指彈出來的下拉框,它是使用一個HWND,而後這個HWND使用DUI的方式進行實現。它的實現方式與EDIT相似。軟件

這個控件也有BUG,就是,下拉框彈出來時,滾動鼠標滾輪時,下拉框就自動消失了,至關於它並不支持鼠標滾輪。

 

最後,固然嚴格提及來,FLASH、WEBBROWSER、ACTIVEX等控件都不屬於純DUI控件,不過實現難度實現太大,用現成的就行了。不過WEBBROWSER實在不該該使用微軟的WEBBROWSER控件,由於微軟的控件實在是弱爆了,對HTML各類不支持,包括CSS、JAVASCRIPT,更別提HTML5了。能夠考慮將 WEBKIT或是火狐加入到裏面來,如此的話,對WEB的支持是至關完美了。

 

PS:

最近一直在搞手機軟件,沒時間更新博客。

這裏又在建房子,無心中把我網線砸斷了,上不了網,因而乎終於有時間寫博客了。

我換了電信的網絡,而後發現竟然上不了Github了。

我換了WIN8.1的系統,而後發現竟然裝不了VM了,還有一堆綠色軟件用不了了。

《論語》讀了一年半了都沒讀完,我勒了個去。。。

真是諸事不順啊。

相關文章
相關標籤/搜索