概述
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也是同样的用法。
最后
以上就是刻苦枫叶为你收集整理的MFC中发送自定义消息机制,PostMessage和SendMessage方式的全部内容,希望文章能够帮你解决MFC中发送自定义消息机制,PostMessage和SendMessage方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复