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

MFC 基础篇(一)

目录

一.SDK编程

二.为什么要学MFC?

三.MFC能做什么?

四.MFC开发环境搭建

五.MFC项目创建

六.消息映射机制


一.SDK编程

Application Programming Interface 应用程序编程接口。

Software Development Kit 软件开发工具包,一般会包括API接口文档,示例文档,帮助文档,使用手册,相关工具等。

SDK程序基本骨架:

int WinMain(){// 设计窗口外观及交互响应,注册,申请专利RegisterClass(...)// 生产窗口CreateWindow(...)// 展示窗口ShowWindow(...)// 粉刷窗口UpdateWindow(...)// 进入消息循环while (GetMessage(...)) {// 消息转换TranslateMessage(...);// 消息分发DispatchMessage(...);}
}

这是使用SDK创建一个窗口的过程,可以看出来,十分复杂。

重要概念:

窗口就是屏幕上的一片区域,接收用户的输入,显示程序的输出。可以包含标题栏,菜单栏,工具栏,控件等。

句柄(handle) (资源的编号,二级指针,门把手),窗口句柄,文件句柄,数据库连接句柄。

C++窗口类对象与窗口并不是一回事,它们之间惟一的关系是C++窗口类对象内部定义了一个窗口句柄变量,保存了与这个C++窗口类对象相关的那个窗口的句柄。窗口销毁时,与之对应的C++窗口类对象销毁与否,要看其生命周期是否结束。但C++窗口类对象销毁时,与之相关的窗口也将销毁

二.为什么要学MFC?

在写SDK程序时,需要程序员自己处理各种消息,实现窗口创建,注册,绘制,销毁,程序耗费很多精力在这些地方上,为了提升效率,有大佬把 SDK 进行封装,这就是MFC的诞生,使 Windows桌面应用程序开发效率大大提升。

MFC就是封装了各种系统调用,方便程序开发。SDK相当于手工作坊时代,MFC相当于流水线。因为MFC是封装了 Windows操作系统的API,所以写出来的程序也只支持在 Windows 上运行。

三.MFC能做什么?

四.MFC开发环境搭建

VS2019下安装MFC

组件列表

五.MFC项目创建

创建MFC应用

选择程序类型

MFC文档类型

  1. 基于对话框的 MFC 项目: 基于对话框的 MFC 项目是一种常见的 MFC 应用程序类型,它的主要界面是一个对话框窗口。对话框窗口通常包含了控件(如按钮、编辑框、列表框等)和菜单等元素,用于与用户交互。该类型的 MFC 项目适合处理简单的界面和交互逻辑。

  2. 基于单个文档的 MFC 项目: 基于单个文档的 MFC 项目是一种支持处理单个文档的应用程序类型,它包含了一个文档视图框架和一个文档类。该类型的 MFC 项目适合处理只有一个文档的应用场景,如文本编辑器等。

  3. 基于多个文档的 MFC 项目: 基于多个文档的 MFC 项目是一种支持处理多个文档的应用程序类型,它包含了一个文档视图框架和多个文档类。该类型的 MFC 项目适合处理多个文档之间相互关联的应用场景,如电子表格、绘图工具等。

基于对话框的 MFC 项目适合处理简单的界面和交互逻辑;基于单个文档的 MFC 项目适合处理只有一个文档的应用场景;而基于多个文档的 MFC 项目适合处理多个文档之间相互关联的复杂应用场景。

根据需要选择即可

根据需要选择即可

六.消息映射机制

MFC(Microsoft Foundation Class)消息映射机制是一种方便的事件处理方式,它将 Windows 操作系统中的消息与 MFC 应用程序中的事件进行关联。通过使用消息映射机制,开发人员可以很方便地处理用户界面上的各种事件。

在 MFC 中,每个控件都可以接收 Windows 消息,例如鼠标点击、键盘输入等。当控件接收到消息时,MFC 就会将消息转换为一个事件,并将其传递给响应的事件处理函数。这个过程就是消息映射。

消息映射的实现需要借助一个类似于表格的结构,称为消息映射表。每个消息映射表条目包含了一个消息 ID 和一个事件处理函数。当控件接收到消息时,MFC 就会查找消息映射表,并调用相应的事件处理函数来响应该消息。

BEGIN_MESSAGE_MAP(CMFCTest1Dlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_TEST_BTN, &CMFCTest1Dlg::OnBnClickedTestBtn)
//1 消息映射表
END_MESSAGE_MAP()//2 自动生成消息响应函数
void CMFCTest1Dlg::OnBnClickedTestBtn()
{MessageBox(_T("Test"));
}// 3 消息响应函数的声明
afx_msg void OnBnClickedTestBtn();

CMFCTest1Dlg是一个对话框;IDC_TEST_BTN是以一个控件按钮的消息ID;OnBnClickedTestBtn 是处理按钮点击事件的成员函数;

当点击对话框的按钮,就会触发控件按钮的消息ID,控件接收到消息,就会查找消息映射表,调用对应函数进行处理。

相关文章:

  • uniapp踩坑之项目:uniapp数字键盘组件—APP端
  • js原型链
  • CVF 在 TNEWS 数据集上测试
  • leetcode:13. 罗马数字转整数(python3解法)
  • 【Linux】:初识git || centos下安装git || 创建本地仓库 || 配置本地仓库 || 认识工作区/暂存区(索引)以及版本库
  • 5G创新突破 | 紫光展锐5G芯片全球首发R17 NR广播端到端业务演示
  • 为什么 conda 不能升级 python 到 3.12
  • python 按字段查询数据库
  • Kubernetes rancher、prometheus、ELK的安装
  • flink状态和检查点
  • Xcode15 framework ‘CoreAudioTypes‘ not found
  • OTP语音 NV040C芯片在智能闹钟的应用
  • Mac安装opencvJava踩坑
  • VS Code Counter统计代码量(vscode扩展工具)
  • linux开机自动挂载目录
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • exports和module.exports
  • HTTP 简介
  • Java程序员幽默爆笑锦集
  • JS变量作用域
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Netty源码解析1-Buffer
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • React-redux的原理以及使用
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Sublime text 3 3103 注册码
  • sublime配置文件
  • 编写高质量JavaScript代码之并发
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 少走弯路,给Java 1~5 年程序员的建议
  • 系统认识JavaScript正则表达式
  • 详解移动APP与web APP的区别
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (06)金属布线——为半导体注入生命的连接
  • (12)Linux 常见的三种进程状态
  • (42)STM32——LCD显示屏实验笔记
  • (C语言)共用体union的用法举例
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (ros//EnvironmentVariables)ros环境变量
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (windows2012共享文件夹和防火墙设置
  • (二)fiber的基本认识
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • ***利用Ms05002溢出找“肉鸡
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .net core 6 集成和使用 mongodb
  • .NET Core 项目指定SDK版本
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET中 MVC 工厂模式浅析
  • @在php中起什么作用?