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

MFC/C++学习系列之简单记录8——消息映射

MFC/C++学习系列之简单记录8——消息映射

  • 前言
  • 消息映射机制
    • DoDataExchange 函数
    • BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 宏
    • 与WPF对比
  • 总结


前言

每天学习一点MFC的小知识!


消息映射机制

说起来很高大上,其实就是前端界面控件和后台代码命名的绑定。当前端控件执行某些操作时,需要把这个事件或消息映射到MFC的成员类上。通过这种方式让后台代码可以响应前端事件和消息,完成指定操作。

具体代码是什么呢?

在这里插入图片描述
首先,我在界面上放置了一个按钮和Tab控件。后端如何知道前端控件的呢?

DoDataExchange 函数

用于在对话框控件和对应的变量之间进行数据交换的函数。

void CMFCtest1Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_TAB1, Tab1);
	DDX_Control(pDX, IDC_BUTTON1, m_Btn1);
}
  • DDX_Control 宏用于将对话框中的控件与类中的控件变量进行关联。
  • IDC_TAB1 控件与 Tab1 成员变量关联
  • IDC_BUTTON1 控件与 m_Btn1 成员变量关联。
    这里通过DoDataExchange函数,利用DDX_Control 宏将按钮与成员变量关联。在界面前端,放置控件时,需要添加变量,才能有变量关联操作!
    在这里插入图片描述

BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 宏

BEGIN_MESSAGE_MAP(CMFCtest1Dlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, &CMFCtest1Dlg::OnBnClickedButton1)
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CMFCtest1Dlg::OnTcnSelchangeTab1)
END_MESSAGE_MAP()
  • 用于将Windows消息和控件通知映射到类的成员函数。
  • ON_WM_SYSCOMMAND() 映射系统命令消息到 OnSysCommand 函数。
  • ON_WM_PAINT() 映射绘画消息到 OnPaint 函数。
  • ON_WM_QUERYDRAGICON() 映射查询拖动图标的消息到 OnQueryDragIcon 函数。
  • ON_BN_CLICKED与ON_NOTIFY就是我们自己定义的事件处理程序的映射。这里的按钮映射了一个点击事件,这里的Tab映射了一个选择切换事件。
    在这里插入图片描述
    这里要注意类列表的选择,如果Btn控件在Dlg1中的控件选择了Dlg2的类列表,会出现Dlg2中无Btn1控件而报错!

与WPF对比

在WPF中,.xaml文件中定义控件名称,并在后面直接可以添加事件或双击控件添加。这时,界面前端的代码中会具体显示事件函数名称,而后端会主动生成对应的函数。

//前端
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="112,187,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>
//后端
 private void button_Click(object sender, RoutedEventArgs e)
{

}

相对于MFC的添加事件,在使用上来说,WPF的事件生成更容易,上手更简单!


总结

本文介绍了MFC的消息映射,并举例说明,同时也与WPF语言进行了对比。


http://www.kler.cn/a/446722.html

相关文章:

  • 基于LabVIEW的USRP信道测量开发
  • 详解 Qt WebEngine 模块
  • 使用Python开发高级游戏:创建一个3D射击游戏
  • 【进程篇】操作系统
  • EGO Swarm翻译
  • 全面解析 Golang Gin 框架
  • 2.6 网络面试问题
  • 二叉树 -- 堆(详解)
  • 网安信息收集(web层面)
  • springboot——登录认证(包括jwt技术、拦截器过滤器)
  • redis 在 win10中的使用
  • Linux Swap: 深入解析 mkswap, mkfs.swap, 和 swapon
  • Kubernetes(k8s)安装详细过程
  • 服务器数据恢复—RAIDZ离线硬盘数超过热备盘数导致阵列崩溃的数据恢复案例
  • Docker 部署 新版 Nacos、Seata
  • Spring Cloud Gateway 源码
  • DB-GPT V0.6.3 版本更新:支持 SiliconCloud 模型、新增知识处理工作流等
  • Redis篇--常见问题篇3--缓存击穿(数据查询上锁,异步操作,熔断降级,三种缓存问题综合优化策略)
  • RabbitMQ消息可靠性保证机制7--可靠性分析-rabbitmq_tracing插件
  • sqlite3 支持位运算 和view和 triger
  • 使用JUnit进行集成测试
  • QT网络(一):主机信息查询
  • 【Super Tilemap Editor使用详解】(七):图块集纹理编辑器(Tileset Atlas Editor)
  • 矩形嵌套 之一题多解dp篇
  • 安全工具 搭建带有 Web 仪表板的Interact.sh
  • 自毁程序密码—阿里聚安全(IDA动态调试)