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

相关文章
相关标签/搜索