DuiLib响应按钮事件

配置方法以及需要重写的函数已经在在《初识DuiLib界面库》中已经介绍。
今天需要在之前代码的基础上加入相应Enter按钮的事件,并弹出messagebox按钮。
响应事件在Notify函数中进行处理。

#include "UIlib.h"
using namespace DuiLib;
# pragma comment(lib, "DuiLib_d.lib")
# pragma comment(lib, "DuiLib.lib")
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;//CControlUI是duilib中所有空间的基类 
            pWnd->SetName(_T("btnHello")); // 设置控件的名称,这个名称用于标识每一个控件,必须 唯一,相当于MFC里面的控件ID
            pWnd->SetText(_T("Hello World")); // 设置文字
            pWnd->SetBkColor(0xFF00FFFF); // 设置背景色
            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;
};
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
    CPaintManagerUI::SetInstance(hInstance);
    CDuiFrameWnd duiFrame;
    duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
    duiFrame.ShowModal();
    return 0;
}

运行截图如下:
DuiLib响应按钮事件_第1张图片
这里有一个问题,当我们点击窗口的关闭按钮后,窗口被关闭了,但是MessageBox窗口依然存在。这是为什么呢?

你可能感兴趣的:(DuiLib响应按钮事件)