zoukankan      html  css  js  c++  java
  • duilib入门简明教程 -- 响应按钮事件(4) (转)

    原文转自 http://www.cnblogs.com/Alberl/p/3343610.html

        上一个Hello World的教程里有一句代码是这样的:CControlUI *pWnd = new CButtonUI;
        也就是说,其实那整块绿色背景区域都是按钮的区域。(这里简要介绍下,CControlUI 是duilib中所有控件的基类,而CButtonUI则是按钮类,更多的控件会在后面的教程一一介绍。)
        那么怎样响应按钮的点击消息呢?
        我们需要几个步骤:
        1、调用AddNotifier函数将消息加入duilib的消息循环
        2、给按钮设置一个唯一的控件ID(SetName函数)
        3、在Notify函数里处理按钮点击消息。
        代码如下:
    复制代码
    class CDuiFrameWnd : public CWindowWnd, public INotifyUI
    {
    public:
        virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); }
        virtual void    Notify(TNotifyUI& msg) 
        {
            if(msg.sType == _T("click"))
            {
                if(msg.pSender->GetName() == _T("btnHello")) 
                {
                    ::MessageBox(NULL, _T("我是按钮"), _T("点击了按钮"), NULL);
                }
            }
        }
    
        virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
        {
            LRESULT lRes = 0;
    
            if( uMsg == WM_CREATE ) 
            {
                CControlUI *pWnd = new CButtonUI;
                pWnd->SetName(_T("btnHello"));      // 设置控件的名称,这个名称用于标识每一个控件,必须唯一,相当于MFC里面的控件ID
                pWnd->SetText(_T("Hello World"));   // 设置文字
                pWnd->SetBkColor(0xFF00FF00);       // 设置背景色
    
                m_PaintManager.Init(m_hWnd);
                m_PaintManager.AttachDialog(pWnd);
                m_PaintManager.AddNotifier(this);   // 添加控件等消息响应,这样消息就会传达到duilib的消息循环,我们可以在Notify函数里做消息处理
                return lRes;
            }
    
            if( m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes) ) 
            {
                return lRes;
            }
    
            return __super::HandleMessage(uMsg, wParam, lParam);
        }
    
    protected:
        CPaintManagerUI m_PaintManager;
    };
    复制代码

    运行结果如图:

  • 相关阅读:
    「USACO15FEB」Censoring (Silver) 审查(银) 解题报告
    「Luogu P2278」[HNOI2003]操作系统 解题报告
    「Luogu P1210」回文检测 解题报告
    「Luogu P4987」回文项链 解题报告
    「Luogu P1435」回文字串 解题报告
    「Luogu P3931」SAC E#1
    「UVA1328」Period 解题报告
    「Poj1845」Sumdiv 解题报告
    测试
    nginx、Apache、Lighttpd启用HSTS
  • 原文地址:https://www.cnblogs.com/happykoukou/p/7389226.html
Copyright © 2011-2022 走看看