zoukankan      html  css  js  c++  java
  • duilib教程之duilib入门简明教程4.响应按钮事件

    上一个Hello World的教程里有一句代码是这样的:CControlUI *pWnd = new CButtonUI;    也就是说,其实那整块绿色背景区域都是按钮的区域。(这里简要介绍下,CControlUI 是duilib中所有控件的基类,而CButtonUI则是按钮类,更多的控件会在后面的教程一一介绍。)
        那么怎样响应按钮的点击消息呢?
        我们需要几个步骤:
        1、调用AddNotifier函数将消息加入duilib的消息循环
        2、给按钮设置一个唯一的控件ID(SetName函数)
        3、在Notify函数里处理按钮点击消息。
        代码如下:

    1. class CDuiFrameWnd : public CWindowWnd, public INotifyUI
    2. {
    3. public:
    4.     virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); }
    5.     virtual void    Notify(TNotifyUI& msg) 
    6.     {
    7.         if(msg.sType == _T("click"))
    8.         {
    9.             if(msg.pSender->GetName() == _T("btnHello")) 
    10.             {
    11.                 ::MessageBox(NULL, _T("我是按钮"), _T("点击了按钮"), NULL);
    12.             }
    13.         }
    14.     }
    15.     virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
    16.     {
    17.         LRESULT lRes = 0;
    18.         if( uMsg == WM_CREATE ) 
    19.         {
    20.             CControlUI *pWnd = new CButtonUI;
    21.             pWnd->SetName(_T("btnHello"));      // 设置控件的名称,这个名称用于标识每一个控件,必须唯一,相当于MFC里面的控件ID
    22.             pWnd->SetText(_T("Hello World"));   // 设置文字
    23.             pWnd->SetBkColor(0xFF00FF00);       // 设置背景色
    24.             m_PaintManager.Init(m_hWnd);
    25.             m_PaintManager.AttachDialog(pWnd);
    26.             m_PaintManager.AddNotifier(this);   // 添加控件等消息响应,这样消息就会传达到duilib的消息循环,我们可以在Notify函数里做消息处理
    27.             return lRes;
    28.         }
    29.         if( m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes) ) 
    30.         {
    31.             return lRes;
    32.         }
    33.         return __super::HandleMessage(uMsg, wParam, lParam);
    34.     }
    35. protected:
    36.     CPaintManagerUI m_PaintManager;
    37. };
    复制代码


    运行结果如图:

  • 相关阅读:
    倒排索引在MYSQL,PostgreSQL,ElasticSearch中的设计思想
    MySQL Group Replication: What Is It? Replicated Database State Machine & Paxos implementation
    Redis 6.0 docker Cluster
    What is the "Docker Subnet" used for?
    Windows MYSQL 8.0 或者 5.7 查找my.ini 修改端口号
    Kerberos Network Authentication Service Window & Mac
    协合新能源集团有限公司 | 红海 eHR BPMN
    基于 springBoot 实现webSocket方式的扫码登录
    Python中IO编程-StringIO和BytesIO
    Neo4j基本入门
  • 原文地址:https://www.cnblogs.com/blogpro/p/11427042.html
Copyright © 2011-2022 走看看