Visual Studio 2022的MFC框架——应用程序向导

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022开发工具下的MFC框架知识。

MFC(Microsoft Foundation Class,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C++类的集合,是一套面向对象的函数库,以类的方式提供给用户使用。注意,微软的目的是简化程序员的开发工作,这是关键,是简化,不是代替。利用这些类,可以有效地帮助程序员完成Windows应用程序的开发。

在Visual Studio2022里面,有一个叫做MFC应用程序向导的东西,MFC应用程序向导是一个辅助我们生成源代码的向导工具,它可以帮助我们自动生成基于MFC框架的源代码。在该向导的每一个步骤中,程序员都可以根据需要来选择各种特性,从而实现定制应用程序。下面我们就利用MFC应用程序向导来创建一个基于MFC的单文档界面(SDI)应用程序。

首先,打开Visual Studio2022主界面,如下图。

启动Visual Studio2022,单击【文件】菜单,选择【新建】→【项目】在出现的新建项目对话框中,在右侧窗口中选择“MFC应用程序”。

 项目名称为Mfc,解决方案的名称为MfcApp。

单击【创建】按钮,出现MFC应用程序类型选项设置对话框,在“应用程序类型”的下拉列表框中选择“单个文档”,在“项目样式”的下拉列表框中选择“MFCstandard”,其他保持默认选择。

单击【下一步】按钮,出现“文档模板属性”设置对话框,保持默认选择。

 单击【下一步】按钮,出现“用户界面功能”设置对话框,保持默认选择。   

单击【下一步】按钮,出现“高级功能”设置对话框,保持默认选择。

单击【下一步】按钮,出现“生成的类”设置对话框,保持默认选择。

单击【完成】按钮, MFC应用程序向导就为我们创建了一个新的项目:Mfc。

现在, 按下“Ctrl+F5”键编译并运行程序, 可以看到运行结果。

在这个程序中,我们自己没有编写任何代码,就生成了一个带有标题栏,具有最小化框、最大化框、系统菜单和一个可调边框的应用程序。这个程序和我之前帖子中所创建的程序类似, 但多了菜单栏、工具栏及状态栏。这一切都是通过MFC应用程序向导生成的。

基于MFC的程序框架

MFC库是开发Windows应用程序的C++接口。MFC提供了面向对象的框架, 程序开发人员可以基于这一框架开发Windows应用, MFC采用面向对象设计, 将大部分的Windows API封装到C++类中, 以类成员函数的形式提供给程序开发人员调用。

我们看一下MFC应用程序向导帮助我们生成的这些代码。单击Visual Studiio菜单栏上的【视图】菜单,单击【类视图】菜单项,这将打开类视图子窗口,方便我们查看项目中的类组织结构。在“类图”中展开Mfc根节点,可以看到项目中所有的五个类。如果要查看某个类的成员信息,可以直接选中某个类,就会在下方的窗格中显示该类拥有的函数和属性。

在MFC中, 类的命名都以字母“C”开头。对于一个单文档应用程序,即我们在创建项目时应用程序类型中选择的“单个文档” , 都有一个CMainFrame 类、一个以“C+项目名+App”为名字的类、一个以“C+项目名+Doc”为名字的类和一个以“C+项目名+View”为名字的类。

作为初学者,在刚接触MFC的程序时, 一定要逐步熟悉MFC应用程序向导所生成的这几个类, 以及类中的代码。这样才能在读代码时, 知道哪些类哪些代码是向导生成的,哪些类哪些代码不是自动生成的。

在类视图窗口中的类名上双击,在右边的代码编辑器窗口中就会打开定义该类的头文件。

我们可以发现五个类都有一个基类, 例如, CMfcView派生于CView; CMainFrame 派生于CFrameWnd,这些基类都是MFC中的类, 可以查看一下这些基类的帮助信息。如果想查看某个类或函数的帮助,那么可以把当前光标放在该类或函数所在位置, 然后按F1键, 即可打开MSDN中的相应帮助。在MSDN帮助页中每个类的说明页底部都有一个“Hierarchy Chart”超链接, 单击此链接, 即可看到整个MFC类的组织结构图。  

下面的图是MFC类组织结构图。

1. 继承CObject的类

2. 继承CCmdTarget的类

3. 继承CWnd的类

4. 其它类

5. 层次结构图类别

 

从上面图中可以发现CFrameWnd是由CWnd派生的。另外,也可以发现从CWnd派生的还有CView 类。这就说明这个程序中的CMainFrame类和CMfcView类追本溯源有一个共同的基类:CWnd类。 CWnd类是MFC中一个非常重要的类,它封装了与窗口相关的操作。

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/27448.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型训练的一些坑点和判断

在没有完全复现chatgpt之前,这些东西都是包大人根据公开资料和实践经验收敛出来的判断,仅供参考,所有的论断都有可能被新技术推翻。 1.冷启动可能是一个很重要的东西。 大模型的训练过程就是一步一步从全网数据得到的语言模型逐渐逼近接近人…

RabbitMQ的安装

RabbitMQ的安装 1、Windows环境下的RabbitMQ安装步骤 使用的版本:otp_win64_23.2 rabbitmq-server-3.8.16 版本说明:https://www.rabbitmq.com/which-erlang.html#compatibility-matrix 1.1 下载并安装erlang RabbitMQ 服务端代码是使用并发式语言…

AI_背景知识

AI背景知识 一、生成式预训练模型(GPT: Generative Pre-trained Transformer)二、大语言模型(LLM: Large Language Model)1、大语言模型、GPT、Transormer 关系2、Transformer的多功能:从翻译到代码生成 三、词向量检索…

力扣:55. 跳跃游戏(Python3)

题目: 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 来源:力扣(LeetCode) 链接:力扣 示例&#xf…

想要保证办公协同文档的安全?这个权限科普你一定要看

企业在设置办公协同文档的时候,通常需要设置权限来确保数据的安全和保密性,并控制用户对文档的访问和编辑权限。looklook今天就从办公协同文档的权限出发,来和大家聊聊这些常见的权限设置。 办公协同文档的权限 1.阅读权限:只允许…

【vim 学习系列文章 4 - vim与系统剪切板之间的交互】

文章目录 背景1.1.1 vim支持clipboard 检查1.1.2 vim的寄存器 上篇文章:【vim 学习系列文章 3 - vim 选中、删除、复制、修改引号或括号内的内容】 背景 从vim中拷贝些文字去其它地方粘贴,都需要用鼠标选中vim的文字后,Ctrlc、Ctrlv&#x…

怎么绘制汤姆索亚历险记思维导图?掌握这几个绘制步骤就可以

怎么绘制汤姆索亚历险记思维导图?如果你正在为学习汤姆索亚历险记而感到困惑,或者你想要更好地理解小说中的人物关系、情节和舞台背景,那么一个清晰的思维导图就可以帮助你梳理思路。那么下面就给大家介绍一下绘制步骤。 在进行思维导图绘制的…

前端面试的性能优化部分(7)每天10个小知识点

目录 系列文章目录前端面试的性能优化部分(1)每天10个小知识点前端面试的性能优化部分(2)每天10个小知识点前端面试的性能优化部分(3)每天10个小知识点前端面试的性能优化部分(4)每天…

docker容器监控:Cadvisor +Prometheus+Grafana的安装部署

目录 Cadvisor PrometheusGrafana的安装部署 一、安装docker: 1、安装docker-ce 2、阿里云镜像加速器 3、下载组件镜像 4、创建自定义网络 二、部署Cadvisor 1、被监控主机上部署Cadvisor容器 2、访问cAdvisor页面 三、安装prometheus 1、部署Prometheus…

Clion开发Stm32之存储模块(W25Q64)驱动编写

前言 涵盖之前文章: Clion开发STM32之HAL库SPI封装(基础库) W25Q64驱动 头文件 #ifndef F1XX_TEMPLATE_MODULE_W25Q64_H #define F1XX_TEMPLATE_MODULE_W25Q64_H#include "sys_core.h" /* Private typedef ---------------------------------------------------…

LNMP搭建

LNMP:目前成熟的企业网站的应用模式之一,指的是一套协同工作的系统和相关软件 能够提供静态页面服务,也可以提供动态web服务。 这是一个缩写 L linux系统,操作系统。 N nginx网站服务,也可也理解为前端&#xff0c…

.ps1和.bat的区别

.ps1和.bat的区别 .ps1 和 .bat 是两种不同的脚本文件类型,分别用于 PowerShell 和 Windows 批处理。它们在语法、功能和用途上有很大的区别: 1. 文件类型: .ps1 是 PowerShell 脚本文件的扩展名,用于编写和执行 PowerShell 脚…

c++画出分割图像,水平线和垂直线

1、pca 找到图像某个区域的垂直线&#xff0c;并画出来 // 1、 斑块的框 血管二值化图&#xff0c;pca 找到垂直血管壁的直线, 还是根据斑块找主轴方向吧// Step 1: 提取斑块左右范围内的血管像素点坐标&#xff0c;std::vector<cv::Point> points;for (int y 0; y <…

公文校对要点:确保准确性和规范性

公文校对是确保文档准确性和规范性的重要步骤。以下是公文校对的要点&#xff1a; 1.拼写和语法检查&#xff1a;仔细检查文档中的拼写错误和语法错误。确保词语的正确拼写&#xff0c;并使用正确的语法结构和标点符号。 2.信息准确性&#xff1a;核对文档中的事实和数据&#…

MySQL流程控制(二十八)

二八佳人体似酥&#xff0c;腰悬利剑斩愚夫&#xff0c;虽然不见人头落,暗里教君骨髓枯。 上一章简单介绍了MySQL变量(二十七) ,如果没有看过,请观看上一章 一. 定义条件与处理程序 定义条件是事先定义程序执行过程中可能遇到的问题&#xff0c;处理程序定义了在遇到问题时应…

三言两语说透webpack对vue的编译

目录 1.写在前面 2.前置条件 3.源码分析 4.大厂面试回答 5.总结 1.写在前面 Webpack作为当下最流行的前端构建工具&#xff0c;它可以处理模块化的JavaScript项目&#xff0c;进行代码打包和优化。在Vue项目中&#xff0c;Webpack发挥着不可或缺的作用&#xff0c;它负责…

广州VR制作 | 利用VR元宇宙平台开展林地管理培训的优势

在林业领域&#xff0c;实地调查是获取准确数据和深入了解森林生态的重要手段。然而&#xff0c;传统的实地调查方法存在诸多问题&#xff0c;如时间成本高、人力物力投入大、安全风险高等。为了解决这些教学痛点&#xff0c;我们引入了虚拟现实(VR)技术&#xff0c;通过虚拟林…

我的创作纪念日【第一个2048day】

机缘 初心&#xff1a;研究生期间&#xff0c;帮老师做一个项目&#xff0c;过程中学习的东西想记录下来&#xff0c;于是&#xff0c;就选择了CADN让技术分享成为工作的一部分 收获 获得了1800多粉丝的关注获得了63万的访问量&#xff0c;其中《C#设计模式》专栏深受大家喜欢…

低代码平台:初创公司的理想选择

对于初创公司而言&#xff0c;时间和资源是宝贵的。他们需要快速构建和部署应用程序&#xff0c;以满足业务需求&#xff0c;提高效率&#xff0c;并保持竞争优势。在这个背景下&#xff0c;低代码平台成为了初创公司的一个理想选择。而Zoho Creator作为一款出色的低代码平台&a…

Python中的Pathlib可以完美替代os.path

相信现在依然有很多人习惯于使用os来处理文件/文件夹/路径等&#xff0c;但其实Python自带的Pathlib库处理这些更优雅、更安全&#xff0c;你会发现很多大型开源项目都在使用它 先看这个引例&#xff0c;假设我们需要获取某个文件夹下所有的txt文件&#xff0c;基于os会写成如…