1.PostMessage和SendMessage函数的区别
用户可以通过PostMessage和SendMessage函数来发送自定义消息,其区别在于:
PostMessage只把消息放入队列,不管消息处理程序是否处理都返回,然后继续执行,这是个异步消息投放函数;
SendMessage必须等待消息处理程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数;
而且,PostMessage的返回值表示PostMessage函数执行是否正确;而SendMessage的返回值表示其他程序处理消息后的返回值。
2.自定义消息的发送方法
(1)在 resource.h 或 stdax.h 文件添加如下代码定义一个自己的消息:
#define WM_MY_MESSAGE WM_USER +1
(2)在消息处理函数所在的类的头文件中添加如下代码:
//{{AFX_MSG(C...)
afx_msg ........
afx_msg ........
afx_msg void OnMyMessage(/*WPARAM wParam, LPARAM lParam*/);//参数有无根据实际情况而定
//}}AFX_MSG
DECLARE_MESSAGE_MAP( )
(3)在消息处理函数所在的类的cpp文件中添加如下代码:
BEGIN_MESSAGE_MAP(... , ...)
//{{AFX_MSG_MAP(CPostmessageView)
ON_COMMAND .......
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
......
END_MESSAGE_MAP()
(4)在消息处理函数所在的类的cpp文件中手动添加消息相应函数代码:
void CPostmessageView::OnMyMessage(/*WPARAM wParam, LPARAM lParam*/)
{
........
........
}
(5)在需要发送消息的地方添加代码:
PostMessage(WM_MY_MESSAGE);
或
SendMessage(WM_MY_MESSAGE);
3.从一个类向MainFrame类发送自定义消息
直接使用PostMessage或SendMessage函数只能向函数所在的类发送消息,如果想向MainFrame类发送消息,可以使用下面的代码:
((CMainFrame*)AfxGetMainWnd())->PostMessage(WM_XXX);
或
((CMainFrame*)AfxGetMainWnd())->SendMessage(WM_XXX);
转载声明: 本文转自http://wmnmtm.blog.163.com/blog/static/3824571420097510938616/
相关推荐
VC++6.0下强大的自定义消息程序的编写,绝对经典的,超实用的
在vc++6.0环境下实现了带图标的菜单功能,并将实现带图标菜单的功能封装到了IconMenu类,可供方便的代码复用。
给VC++6.0编译出的.exe添加图标
vc++6.0取得西瓜视频https内容,并且自定义StringSplit来分离字符串,
用vc++6.0mfc做的钟表,功能齐全,代码清楚,很适合初学者。值得参考!祝你们成功!
用vc++6.0做的基于摄像头的程序,可以拍照、录像,文件可保存用户自定义的路径,也可以保存到默认路径。
可在vc++6.0中应用可添加到工具栏。添加方式如下:在vc++应用环境中,鼠标右键“自定义”选择“附加项和宏定义”,浏览选中本文件(addinvc.dll)并打开。再在附加项和宏定义中勾选规范代码的插件。
环境:Window XP SP3、VC++ 6.0 VC++中编写模式对话框非常容易,只需要在呼叫一个不带参数的对话框类的构造方法之后,然后呼叫对话框的DoModal方法即可,而书写一个非模式对话框比较复杂。 不过当本人按照《Visual ...
VC 6.0 消息处理和自定义消息对话框用法,通过重载函数OnCmdMsg从而使不能够处理主框架命令的非模式对话框,具备了响应主框架命令的功能。二是说明自定义消息的用法。重载OnCmdMsg后,改变的窗口标题,自定义消息...
如果大家用惯了微软的 Visual Studio 2005/2008 ,再用回 Visual C++ 6.0 的时候,会感觉 ...这个小软件可以稍微满足大家的需求,可以自定义设置 Visual C++ 6.0 各个窗口的字体、字体大小、字体颜色、背景色等等!
VC++6.0对txt文件的操作,其中两个top文件是存储数组的当前最大数量,两个txt文件是具体存储的数据。主要是利用了自定义类的数组对数据进行操作。
在自定义区域内,鼠标光标会发生变化,使用mousemove函数
Win7下VC++6.0打开文件出错的解决方法,之前找到个加载错误,自己编译了一个,可正常加载: 1 将下载的文件放到 common所在目录\Common\MSDev98\AddIns\ 2 打开vc6,右击工具栏,选 自定义->加载项和宏文件,勾选file...
里面有VC++6.0编译的例子,如果不能运行的话可能你的电脑上确实vc6相关dll,安装下vc6即可。 注:不是报表控件源码,是如何使用控件的源码,网上没有控件本身的源码,说控件本身源码的都是骗人的。 作者思路新奇,...
本代码用VC++6.0软件编写,实现自定义端点画线、自定义圆心半径画圆,其中画线算法用到了DDA、逐点逼近、Bresenham、中点画线法;画圆算法使用了Bresenham、中点画圆法。各算法可以分别选择使用哪种画图,比较哪种...
vc6.0 自定义属性页继承自CTabCtrl
PC 机和下位机通讯常用的RS232数据帧组包解包,这个类是提供一个自定义的数据帧格式,所有通讯按自定义的数据帧格式进行组包和解包处理。
管理方面:采用了一个独特的树状管理体系,打破了以前传统的菜单式管理体系,使其一目了然操作方面:采用动态的控制面板,...报表方面:自定义了一个报表控件,可拖动,放大,缩小等,甚至可以在报表时执行排序操作.直观,明了.
摘 要: 在VC++6.0中利用MSComm控件实现串口通信时实时性较差,系统资源利用不足,无法满足高速串口数据采集软件的编程要求.针对高速串口数据采集软件的设计要求,提出了基于多线程技术和自定义消息机制的异步串口通信的...