自定義消息的響應(yīng)和資源消息的響應(yīng)有很多類似之處;資源消息的響應(yīng)是以資源的ID號(hào)作為標(biāo)識(shí)的;自定義的消息要自己聲明消息ID。 一. 定義: 第一步要聲明消息: #define WM_MYMSG WM_USER+200 第二步要在類聲明中聲明消息映射: DECLARE_MESSAGE_MAP() 第三步要在類聲明中定義消息處理函數(shù): afx_msg LRESULT MyMsgHandler(WPARAM,LPARAM); 在.cpp中做的工作: 第四步要實(shí)現(xiàn)消息映射: BEGIN_MESSAGE_MAP() ON_MESSAGE(WM_MYMSG,OnMyMsgHandler) END_MESSAGE_MAP() 第五步要實(shí)現(xiàn)消息處理函數(shù)(當(dāng)然可以不實(shí)現(xiàn)): LRESULT CMainFrame::OnMyMsgHandler(WPARAM w,LPARAM l) { AfxMessageBox("Hello,World!"); return 0; } 二. 使用 1. 如果該自定義消息所在的類是有CWnd派生出來的,且在本類中調(diào)用,那么我們可以調(diào)用CWnd::SendMessage()函數(shù),具體定義為: LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 ); 此時(shí)我們只需要在引發(fā)消息的地方添加如下代碼: SendMessge(WM_MYMSG,0,0); 如果我們想在不同的情況下發(fā)送用戶消息,我們只需要將SendMessage的后兩個(gè)參數(shù)wParam,lParam加以標(biāo)識(shí)即可;在消息處理函數(shù),寫一個(gè)if條件語(yǔ)句(或switch語(yǔ)句)就可以了;將不同情況下的用戶消息區(qū)分開; 例如看下面的例子: ?、偌尤胂㈨憫?yīng)函數(shù)實(shí)現(xiàn)
在CCDlg類的實(shí)現(xiàn)文件中加入消息響應(yīng)函數(shù)的實(shí)現(xiàn)部分,代碼如下: void CCDlg::Customize(WPARAM wParam, LPARAM lParam)
{
CString strTittle;
strTittle.Format("自定義消息參數(shù):x=%d,y=%d",wParam,lParam);
SetWindowText(strTittle);
}
此函數(shù)的作用是將鼠標(biāo)的位置信息顯示在對(duì)話框的標(biāo)題欄部分。
?、冢藛尾糠?br data-filtered="filtered"> 在主框架的“幫助”主菜單中加入“自定義消息”子菜單,其ID設(shè)為ID_CUSTOMIZE,通過類向?qū)ы憫?yīng)該命令,函數(shù)名默認(rèn)。其函數(shù)體如下:
void CMainFrame::OnCustomize()
{
// TODO: Add your command handler code here
POINT pos;
//將消息參數(shù)定義為屏幕坐標(biāo)值
GetCursorPos(&pos);
pdlg->SendMessage(WM_CUSTOMIZE,(UINT)pos.x,pos.y);//這里就是將(UINT)pos.x,pos.y(注:它們分別對(duì)應(yīng)①中消息響應(yīng)函數(shù)的兩個(gè)參數(shù)WPARAM wParam和LPARAM lParam)兩個(gè)參數(shù)分別傳給消息響應(yīng)函數(shù)。
}
2. 如果不在本類中響應(yīng)自定義消息;那么我們只能用win32 的API函數(shù);例如,當(dāng)自定義消息在CMainFrame中,而觸發(fā)消息的地方不在CMainFrame類中,那么我們可以用如下語(yǔ)句: ::SendMessge(::AfxGetMainWnd()->m_hWnd,WM_MYMSG,0,0);
相關(guān)內(nèi)容網(wǎng)址: http://www.cnblogs.com/smartvessel/archive/2011/07/18/2109472.html http://blog.csdn.net/penpenandtongtong/article/details/18598907 http://www.oschina.net/question/565065_72596 http://blog./uid-24459558-id-299010.html 分類: MFC
標(biāo)簽: MFC的自定義消息的定義與使用 |
|