MFC中SendMessage和PostMessage兩種發送消息用法

1.可經過SendMessage或PostMessage發送消息;函數

SendMessage是發送消息以後待消息響應執行完才返回;而PostMessage將消息發送出去以後就馬上返回。線程

2.兩種消息的原型:ci

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)原型

各參數含義:ast


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()  

相關文章
相關標籤/搜索