duilib教程之duilib入门简明教程4.响应按钮事件

廉价感情. 提交于 2019-11-28 20:39:21

上一个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. };
复制代码


运行结果如图:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!