1. 程式人生 > >MFC中SendMessage和PostMessage兩種傳送訊息用法

MFC中SendMessage和PostMessage兩種傳送訊息用法

前一段時間做專案,用到訊息響應機制,為了記憶,特發與此!待事件充裕之時再進行整理。

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)
各引數含義: hWnd:其視窗程式接收訊息的視窗的控制代碼。 可取有特定含義的兩個值: (1)HWND_BROADCAST:訊息被寄送到系統的所有頂層視窗,包括無效或不可見的非自身擁有的視窗、  被覆蓋的視窗和彈出式視窗。訊息不被寄送到子視窗  (2)NULL:此函式的操作和呼叫引數dwThread設定為當前執行緒的識別符號PostThreadMessage函式一樣 Msg:指定被寄送的訊息。 wParam:指定附加的訊息特定的資訊。 IParam:指定附加的訊息特定的資訊。 返回值:如果函式呼叫成功,返回非零值:如果函式呼叫失敗,返回值是零。若想獲得更多的錯誤資訊,請呼叫GetLastError函式。 例如:(傳送訊息)
 #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>