duilib : 消息处理 tips
2014-06-28 14:13
239 查看
在duilib中的消息处理,分为系统消息处理和窗口消息处理.
如果消息处理放错了地方,就接收不到WM_DESTORY或WM_CLOSE的消息,从而无法处理.
duilib中的提供的消息处理函数名字好怪啊..., 必须要做注释才能不忘记, 我决定将消息处理函数的名字改了.
改成 sysMessageProc 和 WndMessageProc.
通过试验可以看出,
系统消息包括 : WM_CLOSE, WM_TIMER
窗口消息包括: WM_DESTROY, 用户自定义消息.
如果消息处理放错了地方,就接收不到WM_DESTORY或WM_CLOSE的消息,从而无法处理.
duilib中的提供的消息处理函数名字好怪啊..., 必须要做注释才能不忘记, 我决定将消息处理函数的名字改了.
改成 sysMessageProc 和 WndMessageProc.
/// HandleMessage 是 CWindowWnd::__WndProc 来的消息 /// 我将 改名 HandleMessage => WndMessageProc LRESULT CMyDlg::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { LRESULT lRc = 0; if (WM_DESTROY == uMsg) { ::KillTimer(this->GetHWND(), TIMER_SN_PLAY); } else if (WM_RE_LAYOUT_DLG == uMsg) { Layout(); } lRc = __super::HandleMessage(uMsg, wParam, lParam); return lRc; } // MessageHandler 处理的是 ::GetMessage 来的消息 /// 我将 改名 MessageHandler => SysMessageProc LRESULT CMyDlg::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled) { switch (uMsg) { case WM_CLOSE: { m_pOwner->RemoveFloatMsg(this); } break; case WM_TIMER: { if (TIMER_SN_PLAY == wParam) { m_nTimeToLeve += TIMER_DELAY_PLAY; if (m_nTimeToLeve > m_nTimeToLeveMax) { PostMessageW(WM_CLOSE, 0, 0); return S_FALSE; } } } break; default: break; } return __super::MessageHandler(uMsg, wParam, lParam, bHandled); }
通过试验可以看出,
系统消息包括 : WM_CLOSE, WM_TIMER
窗口消息包括: WM_DESTROY, 用户自定义消息.
相关文章推荐
- Duilib学习笔记《05》— 消息响应处理
- duilib消息处理
- Duilib消息处理流程图解
- DuiLib 对键盘消息的处理——ESC、空格键
- DuiLib消息处理剖析
- DUILib学习笔记---消息处理
- Duilib学习笔记《05》— 消息响应处理
- DuiLib消息处理剖析
- DuiLib消息处理剖析
- DuiLib介绍及其消息处理剖析
- duilib中CListUI控件消息处理的方法与技巧
- 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)
- DuiLib介绍及其消息处理剖析
- 解析duilib 消息处理函数-笔记1
- DuiLib消息处理剖析
- DuiLib消息处理剖析
- DuiLib介绍及其消息处理剖析
- duilib鼠标键盘消息处理
- 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)
- DuiLib消息处理剖析