当前位置: 首页 > news >正文

MFC知识点(DDX_Control 与 DDX_Text ,ON_COMMAND和ON_MESSAGE)

1.DDX_Control 与 DDX_Text 区别

DDX_TEXT()的作用可以理解为把字符串变量和控件的文本(WindowText)关联起来, 
DDX_Control()
的作用可以理解为把变量和控件本身关联起来, 
DoDataExchange(pDX)
就是处理所有变量与其关联控件交换数据的函数。

void CView::DoDataExchange(CDataExchange* pDX)

CFormView::DoDataExchange(pDX);
DDX_Text(pDX, IDC_ID_VALUE, m_strID);
DDX_Control(pDX, IDC_ID_VALUE, m_editID);

在程序中
通过update(TRUE)取得控件上的值到m_strID,处理修改后通过update(FALSE)传回控件,界面显示
通过m_editID.GetWindText(str),取得值,处理后,通过m_editID.SetWindText(str)传回控件界面显示

2.MFC BEGIN_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CpassApp, CWinApp)
    ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()

这些都是宏定义,不是函数。 
在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之间添加你的消息响应函数,为每个消息处理函数加入一个入口

BEGIN_MESSAGE_MAP( theClass, baseClass )

参数:

theClass指定消息映射所属的类的名字。
baseClass指定theClass的基类的名字。


说明:
使用BEGIN_MESSAGE_MAP宏开始你的消息映射的定义。
在你的类的成员函数的实现文件(.CPP)中,使用BEGIN_MESSAGE_MAP宏开始消息映射,然后为每个消息处理函数加入一个入口,最后用END_MESSAGE_MAP宏结束消息映射。

每个消息映射入口的格式如下:
  ON_Notification(id, memberFxn)
  其中id指定了发送通知的控件的子窗口的ID,而memberFxn指定了处理该通知的父对象中的成员函数名。
  父对象的函数原型格式如下:
  afx_msg void memberFxn( );

  可能的消息映射入口如下:

 

映射入口何时向父对象发送消息
ON_BN_CLICKED  用户单击按钮时
ON_BN_DOUBLECLICKED用户双击按钮时

3.ON_COMMAND和ON_MESSAGE的区别

      在MFC应用程序中传输的消息有三种类型:窗口消息、命令消息和控件通知。
窗口消息(Window Message)
一般与窗口的内部运作有关,如创建窗口、绘制窗口和销毁窗口等。通常,消息是从系统发送到窗口,或从窗口发送到窗口。若需要窗口消息的完全的列表,请参考MFC文档。
命令消息
命令消息一般与处理用户请求相关,当用户单击一个菜单项或工具栏时,命令消息产生,并被发送到能处理该请求的类对象(如,装载文件、编辑文本和保存选项等)。
控件通知
通常,控件通知在某些重要事件发生时,由控件窗口发送到父窗口,如打开一个组合框。控件通知为父窗口进一步控制子窗口提供了机会。例如,打开一个组合框时,父窗口可以用组合框初建时得不到的消息填充它。
      ON_COMMAND 和ON_MESSAGE都是将消息处理函数加入消息路由表中,但是ON_COMMAND对应的消息ID一直都是WM_COMMAND,而ON_MESSAGE的消息ID为ON_COMMAND的第一个参数
在MFC中,ON_COMMAND, ON_MESSAGE, ON_NOTIFY它们的区别。
ON_NOTIFY是控件向其父窗口发送消息处理的宏,ON_COMMAND是菜单和工具栏项处理消息的宏,ON_MESSAGE是处理自定义消息的宏
ON_COMMAND用来处理WM_COMMAND消息。老式的windows控件发送WM_COMMAND作为对父窗口的通知消息。另外,菜单,工具栏也向框架窗口发送WM_COMMAND消息。
ON_MESSAGE主要用来处理用户自定义消息。
对于某些新型的windows控件(如ListCtrl等),向父窗口发送通知消息时需要包含大量的信息,WM_COMMAND已不适应这种要求(因为WM_COMMAND的wparam和lparam都已经填满了),ON_NOTIFY主要用来处理这些新型的windows控件向父窗口的发送的WM_NOTIFY通知消息。
 
 

相关文章:

  • JavaScript操作JSON的方法总结,JSON字符串转换为JSON对象
  • Navicat for SQL Server 安装的步骤是这样的
  • PAT1005
  • 联想IPMI固件SMASH-CLP 管理
  • Android网络编程1
  • SQL Anywhere(ASA) 数据库“File is shorter than expected -- transaction rolled back”错误修复...
  • 简单快速打造你自己的PHP MVC框架
  • php系统常量
  • 将xml文件转为c#对像
  • Angular.element和$document的使用方法分析,代替jquery
  • rsyslog日志服务的配置文件分析
  • HDU 2177 —— (威佐夫博弈)
  • 7.22号布置的作业
  • HDU2097 Sky数
  • 主机OS重装的节点加回RAC集群步骤示例(11gR2 RAC)
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • extjs4学习之配置
  • MySQL的数据类型
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • SwizzleMethod 黑魔法
  • Web Storage相关
  • Windows Containers 大冒险: 容器网络
  • 编写高质量JavaScript代码之并发
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 码农张的Bug人生 - 初来乍到
  • 区块链技术特点之去中心化特性
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​业务双活的数据切换思路设计(下)
  • #Ubuntu(修改root信息)
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $$$$GB2312-80区位编码表$$$$
  • (4)Elastix图像配准:3D图像
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (区间dp) (经典例题) 石子合并
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (五)网络优化与超参数选择--九五小庞
  • (一) springboot详细介绍
  • (一)为什么要选择C++
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .net实现客户区延伸至至非客户区
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @Service注解让spring找到你的Service bean
  • @synthesize和@dynamic分别有什么作用?
  • @在php中起什么作用?
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)