天天看點

MFC的自定義消息(使用者消息)的定義與使用

MFC的自定義消息(使用者消息)的定義與使用
自定義消息的響應和資源消息的響應有很多類似之處;資源消息的響應是以資源的ID号作為辨別的;自定義的消息要自己聲明消息ID;
一.           定義:
第一步要聲明消息:
#define WM_MYMSG  WM_USER+200
第二步要在類聲明中聲明消息映射:
DECLARE_MESSAGE_MAP()
第三步要在類聲明中定義消息處理函數:
afx_msg LRESULT MyMsgHandler(WPARAM,LPARAM);
在.cpp中做的工作:
第四步要實作消息映射:
BEGIN_MESSAGE_MAP()
ON_MESSAGE(WM_MYMSG,OnMyMsgHandler)
END_MESSAGE_MAP()
第五步要實作消息處理函數(當然可以不實作):
LRESULT CMainFrame::OnMyMsgHandler(WPARAM w,LPARAM l)
{
AfxMessageBox("Hello,World!");
return 0; 
}
二.           使用
1.      如果該自定義消息所在的類是有CWnd派生出來的,且在本類中調用,那麼我們可以調用CWnd::SendMessage()函數,具體定義為:
LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );
此時我們隻需要在引發消息的地方添加如下代碼:
SendMessge(WM_MYMSG,0,0);
如果我們想在不同的情況下發送使用者消息,我們隻需要将SendMessage的後兩個參數wParam,lParam加以辨別即可;在消息處理函數,寫一個if條件語句(或switch語句)就可以了;将不同情況下的使用者消息區分開;
2.      如果不在本類中響應自定義消息;那麼我們隻能用win32 的API函數;例如,當自定義消息在CMainFrame中,而觸發消息的地方不在CMainFrame類中,那麼我們可以用如下語句:
::SendMessge(::AfxGetMainWnd()->m_hWnd,WM_MYMSG,0,0);      

繼續閱讀