2013 duilib入門簡明教程 -- 響應按鈕事件(4)


    上一個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;
};

運行結果如圖:






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM