MFC中SendMessage和PostMessage兩種傳送訊息用法
阿新 • • 發佈:2019-01-28
前一段時間做專案,用到訊息響應機制,為了記憶,特發與此!待事件充裕之時再進行整理。
1.可通過SendMessage或PostMessage傳送訊息;
SendMessage是傳送訊息之後待訊息響應執行完才返回;而PostMessage將訊息傳送出去之後就立刻返回。
2.兩種訊息的原型:
LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)
各引數含義:
hWnd:其視窗程式將接收訊息的視窗的控制代碼。如果此引數為HWND_BROADCAST,則訊息將被髮送到系統中所有頂層視窗,包括無效或不可見的非自身擁有的視窗、被覆蓋的視窗和彈出式視窗,但訊息不被髮送到子視窗。 Msg:指定被髮送的訊息。 wParam:指定附加的訊息特定資訊。 IParam:指定附加的訊息特定資訊。 返回值:返回值指定訊息處理的結果,依賴於所傳送的訊息。 B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam) #define WM_TESTSENDMSG WM_USER+200//給訊息一個ID
CString str="TEST";
CWnd *pWnd=CWnd::FindWindow(NULL,str);//得到視窗控制代碼
if(pWnd)
{
pWnd->SendMessage(WM_TESTSENDMSG,1,0);//向視窗傳送訊息或者pWnd->PostMessage(WM_TESTSENDMSG,1,0)
}
3.訊息響應
void Cxxxxx::OnReciveMessage(WPARAM wParam,LPARAM lParam)
{
//功能程式碼
}
//*.h檔案宣告 afx_msg void OnReciveMessage(WPARAM wParam,LPARAM lParam);
4.在訊息接收端將訊息ID和訊息響應聯絡起來
BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
//{{AFX_MSG_MAP(CXXXDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_TESTSENDMSG,OnReciveMessage)//將訊息ID和響應聯絡
END_MESSAGE_MAP()
<pre>