|
|
界面的显示方面就都讲完啦,下面来介绍下控件的响应。
前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理。其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEGIN_MESSAGE_MAP,可以将DUI_MSGTYPE_CLICK消息映射到指定的函数(比如OnClick),这和在Notify判断msg.sType是一样的效果,具体请参见duilib的RichListDemo。
先看看下面几段代码:
- DUI_BEGIN_MESSAGE_MAP(CPage1, CNotifyPump)
- DUI_ON_MSGTYPE(DUI_MSGTYPE_CLICK,OnClick)
- DUI_ON_MSGTYPE(DUI_MSGTYPE_SELECTCHANGED,OnSelectChanged)
- DUI_ON_MSGTYPE(DUI_MSGTYPE_ITEMCLICK,OnItemClick)
- DUI_END_MESSAGE_MAP()
复制代码- LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- LRESULT lRes = 0;
- BOOL bHandled = TRUE;
- switch (uMsg)
- {
- case WM_KEYDOWN: lRes = OnKeyDown(uMsg, wParam, lParam, bHandled); break;
- case WM_LBUTTONDOWN: lRes = OnLButtonDown(uMsg, wParam, lParam, bHandled); break;
- case WM_MOUSEMOVE: lRes = OnMouseMove(uMsg, wParam, lParam, bHandled); break;
- default: bHandled = FALSE; break;
- }
- if (bHandled) return lRes;
-
- return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
- }
复制代码- void Notify(TNotifyUI& msg)
- {
- if( msg.sType == _T("windowinit") )
- {
- }
- else if( msg.sType == _T("click") )
- {
- }
- }
复制代码 我们再来看看MFC的两段代码:- BEGIN_MESSAGE_MAP(CMFCDlg, CDialog)
- ON_BN_CLICKED(IDC_BUTTON_ADD_FILES, &CMFCDlg::OnBnClickedButtonAddFiles)
- ON_BN_CLICKED(IDC_BUTTON_CLEAR_FILES, &CMFCDlg::OnBnClickedButtonClearFiles)
- ON_BN_CLICKED(IDC_BUTTON_DELETE_FILES, &CMFCDlg::OnBnClickedButtonDeleteFiles)
- END_MESSAGE_MAP()
复制代码- LRESULT DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- LRESULT lRes = 0;
-
- switch (uMsg)
- {
- case WM_KEYDOWN: lRes = OnKeyDown(uMsg, wParam, lParam, bHandled); break;
- case WM_LBUTTONDOWN: lRes = OnLButtonDown(uMsg, wParam, lParam, bHandled); break;
- case WM_MOUSEMOVE: lRes = OnMouseMove(uMsg, wParam, lParam, bHandled); break;
- default: break;
- }
-
- return CDialog::DefWindowProc(uMsg, wParam, lParam);
- }
复制代码
|
|