在MFC项目开发中,涉及到不同模块间数据信息的传递,如用户在登录界面成功登录后向系统管理模块发送用户名和密码等信息。

  首先,需明确以下两点:

  • 谁要发送这个消息--消息发送方
  • 谁要接受这个消息--消息接收方

  本文以对象A向对象B发送消息为例进行讲解,具体如下:

1.消息发送方:发送消息

  首先在A的头文件(*.h)中自定义这个消息:

 #define WM_MyMessage WM_USER+100

或者:

 const UINT WM_MYMESSAGE = WM_USER + n

需注意以下几点:

  • 所有自定义消息都是以WM_USER消息为基础加上一个任意的自然数n来表示的,

    n一般至少大于100

  • 该消息一般加在stdafx.h 或resource.h 或*.h中,一般都是全局变量头文件

  • A是向外发送消息的对象,因此在A的某个方法(函数)里就会调用用来发消息的函数B::SendMessage()/B::PostMessage(),因为是B接受消息。

2.消息接收方:接受消息

  消息接收方对象接受一个消息,需有以下三部分:

  • 在头文件(*.h)中有该消息的处理函数的原型;
  • 在实现文件(*.cpp)中有接受消息映射的宏;
  • 在实现文件(*.cpp)中有该消息的处理函数的具体实现。

2.1 头文件中加上自定义消息的处理函数原型

  在DECLARE_MESSAGE_MAP()语句之前,加如下形式的函数原型:

 afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

对Win32来说,wParam, lParam是传递消息最常用的手段。

2.2 实现文件中加上接受消息映射的宏

  在cpp文件里,BEGIN_MESSAGE_MAP语句之后,加如下形式的代码:

 ON_MESSAGE(WM_MyMessage, OnMyMessage)

也就是说WM_MyMessage消息对应OnMyMessage函数。注意,上面是不用分号结尾的。

2.3 在实现文件中给出消息处理函数的具体实现

 LRESULT CBDlg::OnMyMessage( WPARAM wParam, LPARAM lParam )
{
//处理用户自定义消息
......
return ;
}

如何在MFC对话框之间自定义消息传递的更多相关文章

  1. 如何在MFC对话框应用程序中使用ColorPicker控件

    在日常的应用程序开发中,当涉及到曲线绘制时,为了将多条不同类型的曲线区分开,常常需要将它们指定不同的颜色.今天在这里简单的记录一下,如何实现及使用ColorPicker控件.程序用到4个文件依次为:C ...

  2. MFC技术内幕系列之(四)---MFC消息映射与消息传递内幕

    ////////////////////////////////////////////////////////////////////////////////////                 ...

  3. 【MFC】如何在MFC创建的程序中更改主窗口的属性 与 父窗口 WS_CLIPCHILDREN 样式 对子窗口刷新的影响 与 窗体区域绘制问题WS_CLIPCHILDREN与WS_CLIPSIBLINGS

    如何在MFC创建的程序中更改主窗口的属性 摘自:http://blog.sina.com.cn/s/blog_4bebc4830100aq1m.html 在MFC创建的单文档界面中: (基于对话框的, ...

  4. MFC对话框中显示背景图片

    在MFC对话框中显示图片,四个步骤. 1.首先得在VC6.0或者VS2008(其他版本也是一样)中导入GDI文件.(网上下载:) GDI含义是图形设备接口,主要任务是负责系统与绘图程序之间的信息交换, ...

  5. 【VS开发】【CUDA开发】如何在MFC中调用CUDA

    如何在MFC中调用CUDA 有时候,我们需要在比较大的项目中调用CUDA,这就涉及到MFC+CUDA的环境配置问题,以矩阵相乘为例,在MFC中调用CUDA程序.我们参考罗振东iylzd@163.com ...

  6. 基于MFC对话框的2048游戏

    在之前一篇<简单数字拼板游戏学习>基础上修改,地址:http://www.cnblogs.com/fwst/p/3706483.html 开发环境:Windows 7/ Visual St ...

  7. MFC对话框显示BMP图片

    1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...

  8. MFC对话框中使用CHtmlEditCtrl

    MFC对话框中使用CHtmlEditCtrl 感谢原帖作者: http://blog.csdn.net/tingya/article/details/2028172 我在VS2008校正了一些代码. ...

  9. MFC对话框中显示BMP,JPG图片

    //************************************ // 方法说明:    显示JPG和GIF.BMP图片 // 参数说明:    CDC * pDC           设 ...

随机推荐

  1. Delphi 服务操作

    unit Service; interface uses Windows,Messages,SysUtils,Winsvc,Dialogs; function  StartServices(Const ...

  2. 简单QT界面信号图形化输入输出

    右键->转到槽,选择信号 就可以输入代码 右键->转到槽,选择信号 就可以输入代码 2个文本框接受输入数字,第3个文本框输出相加结果 void Dialog::on_pushButton_ ...

  3. div简单布局理解

    以下是div的理解

  4. MySQL 查询结果以百分比显示

    找了一些资料,然后我是用到了MySQL字符串处理中的两个函数concat()和left()1.[CONCAT(str1,str2,...)  返回来自于参数连结的字符串.如果任何参数是 NULL, 返 ...

  5. 280行代码:Javascript 写的2048游戏

    2048 原作者就是用Js写的,一直想尝试,但久久未动手. 昨天教学生学习JS代码.最好还是就做个有趣的游戏好了.2048这么火,是一个不错的选择. 思路: 1. 数组 ,2维数组4x4 2. 移动算 ...

  6. Web API核查表:设计、测试、发布API时需思考的43件事[转]

    Web API核查表:设计.测试.发布API时需思考的43件事   当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是 ...

  7. Nginx 在安装入门

    1.首先需要安装必要的库,PCRE,zlib sudo apt-get install libpcre3 libpcre3-dev 假设找不到文件的话就下载源文件进行安装. 2.解压下载的nginx源 ...

  8. 实现Android语音识别服务接口 RecognitionService的方法

    之前的一篇文章介绍过SpeechRecognizer类,该类能够作为对外的一个接口,并通过Intent传递一个ComponentName获取可支持语音识别的功能的服务,一般的用户手机中假设安装了语音识 ...

  9. Protobuf-net基础

    本文在于巩固基础 先了解什么是protobuf Protobuf是google开源的一个项目,用户数据序列化反序列化,google声称google的数据通信都是用该序列化方法.它比xml格式要少的多, ...

  10. jQuery源码笔记——数据缓存

    数据缓存是为了解决内存泄露,他的原理是,当我们将数据存储到一个对象上面,实际上是将所有的数据存到一个单独的数据对象里,而这个对象只提供一个接口,这个接口可以访问自己存在数据对象里自己的数据. 这是一个 ...