zoukankan      html  css  js  c++  java
  • Duilib教程-非DUI控件

    DUILIB并不是真正的DUI,至少有部分控件不是完全DUI的。其实包括:

    1.EDIT.

    它的实现原理是,CEditUI包含一个窗口CEditWnd,流程如下:

    1)鼠标单击,创建窗口见 EditUI.cpp第217行,在第223行有创建的代码:

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

    2)失去焦点时,删除自己,见EditUI.cpp第103行和第131行,

    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.RICHEDIT

    这个控件稍复杂,我也没仔细看,不过大概知道它是使用COM组件的东东,自己实现SCROLL_BAR。有兴趣的同学可以研究一下。

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

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

    真是诸事不顺啊。

  • 相关阅读:
    unity游戏框架学习-资源管理
    unity游戏框架学习-场景管理
    unity游戏框架学习-实现c#的网络框架
    unity游戏框架学习-SDK接入
    VMware搭建内网并通过iptables端口转发联网
    Mysql 锁总结
    Mysql 参数优化
    php 操作RabbitMQ
    在ubuntu16上搭建rabbitMQ环境
    RabbitMQ基本原理
  • 原文地址:https://www.cnblogs.com/lin1270/p/4189989.html
Copyright © 2011-2022 走看看