我是靠谱客的博主 刻苦枫叶,最近开发中收集的这篇文章主要介绍MFC中发送自定义消息机制,PostMessage和SendMessage方式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

       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方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部