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了,还有一堆绿色软件用不了了。

《论语》读了一年半了都没读完,我勒了个去。。。

真是诸事不顺啊。

相关文章
相关标签/搜索