1.PostMessage和SendMessage函數的區別
用戶(hù)可以通過(guò)PostMessage和SendMessage函數來(lái)發(fā)送自定義消息,其區別在于:
PostMessage只把消息放入隊列,不管消息處理程序是否處理都返回,然后繼續執行,這是個(gè)異步消息投放函數;
SendMessage必須等待消息處理程序處理消息完了之后才返回,繼續執行,這是個(gè)同步消息投放函數;
而且,PostMessage的返回值表示PostMessage函數執行是否正確;而SendMessage的返回值表示其他程序處理消息后的返回值。
2.自定義消息的發(fā)送方法
(1)在 resource.h 或 stdax.h 文件添加如下代碼定義一個(gè)自己的消息:
#define WM_MY_MESSAGE WM_USER +1
(2)在消息處理函數所在的類(lèi)的頭文件中添加如下代碼:
//{{AFX_MSG(C...)
afx_msg ........
afx_msg ........
afx_msg void On
//}}AFX_MSG
DECLARE_MESSAGE_MAP( )
(3)在消息處理函數所在的類(lèi)的cpp文件中添加如下代碼:
BEGIN_MESSAGE_MAP(... , ...)
//{{AFX_MSG_MAP(CPostmessageView)
ON_COMMAND .......
ON_MESSAGE(WM_MY_MESSAGE, On
......
END_MESSAGE_MAP()
(4)在消息處理函數所在的類(lèi)的cpp文件中手動(dòng)添加消息相應函數代碼:
void CPostmessageView::On
........
........
}
(5)在需要發(fā)送消息的地方添加代碼:
PostMessage(WM_MY_MESSAGE);
或
SendMessage(WM_MY_MESSAGE);
3.從一個(gè)類(lèi)向MainFrame類(lèi)發(fā)送自定義消息
直接使用PostMessage或SendMessage函數只能向函數所在的類(lèi)發(fā)送消息,如果想向MainFrame類(lèi)發(fā)送消息,可以使用下面的代碼:
((CMainFrame*)AfxGetMainWnd())->PostMessage(WM_XXX);
或
((CMainFrame*)AfxGetMainWnd())->SendMessage(WM_XXX);
聯(lián)系客服