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也是同样的用法。
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也是同样的用法。
相关文章推荐
- MFC SendMessage或PostMessage发送自定义消息
- MFC发送自定义消息-PostMessage和SendMessage
- MFC发送消息函数PostMessage(异步)和SendMessage(同步)的异同
- Qt实现类似sendmessage和postmessage发送自定义消息
- MFC使用SendMessage()发送自定义消息实现进程间通信
- MFC中不同对话框间使用SendMessage发送自定义消息的具体实现
- MFC使用SendMessage发送自定义消息实现进程间通信
- MFC中SendMessage和PostMessage两种发送消息用法
- MFC使用SendMessage()发送自定义消息实现进程间通信
- MFC中SendMessage和PostMessage两种发送消息用法
- VC++ 添加自定义消息响应函数以及发送消息SendMessage投递消息PostMessage的简单测试
- MFC使用SendMessage()发送自定义消息实现进程间通信
- MFC使用SendMessage()发送自定义消息实现进程间通信
- MFC使用SendMessage()发送自定义消息实现进程间通信
- MFC使用SendMessage()发送自定义消息实现进程间通信
- MFC 消息发送机制
- Vc/MFC中自定义消息及其PostMessage触发使用
- 消息传递机制(postmessage与sendmessage的区别)
- 在MFC中,发送并处理自定义消息
- MFC中在工作线程下画图(自定义消息的发送)