首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MFC/C++学习系列之简单记录8——消息映射

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

原创
作者头像
升级打怪的菜鸟
发布2024-11-20 22:29:41
发布2024-11-20 22:29:41
5762
举报
文章被收录于专栏:MFCMFC

好事发生

文章推荐:VC++6.0入门——第六讲 菜单编程

文章链接:https://cloud.tencent.com/developer/article/2467679

文章简介:本文详细介绍了VC++6.0入门——第六讲 菜单编程,对于我这种刚接触VC++ 6.0的新人来说很有帮助,一步步贴图进行教学菜单编程,值得学习!


前言

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


消息映射机制

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

具体代码是什么呢?

首先,我在界面上放置了一个按钮和Tab控件。后端如何知道前端控件的呢?

DoDataExchange 函数

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

代码语言:cpp
复制
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 宏

代码语言:cpp
复制
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文件中定义控件名称,并在后面直接可以添加事件或双击控件添加。这时,界面前端的代码中会具体显示事件函数名称,而后端会主动生成对应的函数。

代码语言:csharp
复制
//前端
<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进行了对比。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 好事发生
  • 前言
  • 消息映射机制
    • DoDataExchange 函数
    • BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 宏
    • 与WPF对比
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档