您的位置:首页 > 其它

MFC中发送自定义消息机制,PostMessage和SendMessage方式

2017-11-26 11:34 519 查看
       MFC中有种消息队列,使用PostMessage()或者SendMessage()给窗体发送自定义消息,当窗体接收到消息时调用该消息对应绑定的方法。

PostMessage:把消息投放到线程的消息队列,不等消息被处理就立即返回;
SendMessage:消息被处理完后才返回,所以后面的代码不能立即执行;

具体实现方法:

1、首先在CMyMessageDlg.h中定义消息:例如

define WM_MYMESSAGE (WM_USER+100)

WM_USER为windows系统为非系统消息保留的ID,这里至少要用100(也可以以0x100这种形式),因为其它控件的消息会占用一部分。

 

2、在.H文件中,加入消息响应函数,如:

afx_msg LRESULT OnMyMessage(WPARAM w,LPARAM l);

该函数有规定的格式:

afx_msg LRESULT Function_Name(WPARAM w,LPARAM l);

3 在CMyMessageDlg.cpp中加入消息响应宏

在响应该消息的类中,在消息响应块中,

BEGIN_MESSAGE_MAP(CMyMessageDlg, CDialog)

   ON_WM_SYSCOMMAND()

   ON_WM_PAINT()

   ON_WM_QUERYDRAGICON()

   ON_MESSAGE(WM_MYMESSAGE,&CMyMessageDlg::OnMyMessage)

   //}}AFX_MSG_MAP

END_MESSAGE_MAP()

4 在.CPP文件中,编辑消息响应函数,如下:

LRESULT
CMyMessageDlg::OnMyMessage(WPARAM wParam, LPARAM lParam) {

   MessageBox(_T("My Message!"));

   return LRESULT
(0);

}

5、在程序中使用PostMessage(WM_MYMESSAGE , NULL, NULL)

在子线程中也可以使用PostMessage(),给主线程发送消息触发方法。

几种发送消息的写法:
   ::PostMessage(GetSafeHwnd(),WM_MYMESSAGE ,
0, 0); //GetSafeHwnd()表示得到当前窗口句柄,所以这条语句是发送给当前窗口
   GetParent()->PostMessage(WM_MYMESSAGE , 0,
0);//发送给父窗口 
   this->PostMessage(WM_MYMESSAGE , 0, 0);//发送给当前窗口

   HWND h= ::FindWindow(NULL, _T("窗口名字"));
   ::PostMessage(h,WM_MYMESSAGE , 0, 0);//发送给任意窗口

SendMessage也是同样的用法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: