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

news2024/9/24 5:22:21

我是荔园微风,作为一名在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.coloradmin.cn/o/833840.html

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

相关文章

Pytest自动化测试框架setup 和 teardown

Pytest - setup 和 teardown 执行用例肯定有些需要前置条件或后置操作,例如前置的用户登陆,后置的清理数据等操作; unittest提供了两种前置(setup、setupClass)和两种后置(teardown、teardownClass&#x…

工业生产数据采集器网关是什么?设备如何现场管理?

在制造业数字化转型的浪潮下,工业生产数据采集成为了提高生产效率和质量的关键环节。工业生产数据采集器网关是一种用于连接工厂设备并采集生产数据的智能设备,具备工业级设计和多种联网方式。其中,HiWoo Box作为一款工业边缘网关&#xff0c…

HCIP入门静态实验

题目及要求 第一步&#xff1a;拓扑的搭建 第二步&#xff1a;路由、IP的配置 r1: <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sys r1 [r1]int loop [r1]int LoopBack 0 [r1-LoopBack0]ip add 192.168.1.65 27 [r1-LoopBack0]int loop 1 […

Sorting Layer与Order in Layer

就像是两个数相比&#xff0c;比如34与26&#xff0c;Sorting Layer决定的是十位&#xff0c;而Order in Layer决定的是个位&#xff0c;如果Sorting Layer的级别比较高&#xff0c;则可以忽略Order in Layer的比较&#xff0c;当比较的二者的Sorting Layer级别相同&#xff0c…

RF手机天线仿真介绍(一):金属边框天线和LDS天线

目录 简介LDS天线LDS天线仿真 金属边框天线金属边框天线仿真 简介 最早的手机是外置式天线&#xff0c;从NOKIA开始采用内置式天线&#xff0c;开始采用内置金属片&#xff08;一般是0.1MM厚的不锈钢片冲压而成&#xff09;&#xff0c;随后为降低成本&#xff0c;后来改用FPC…

C++ 数组

**数组是具有一定顺序关系的若干对象的集合体&#xff0c;组成数组的对象称为该数组的元素。**数组元素用数组名与带方括号的下标表示&#xff0c;同一数组的各个元素具有相同的类型。数组可以由除void型以外的任何一种类型构成&#xff0c;构成数组的类型和数组之间的关系&…

全排列、子集、组合、子序列

全排列、子集、组合、子序列 1、全排列①回溯&#xff08;DFS&#xff09;交换法②回溯&#xff08;DFS&#xff09;选择法③ 插入法 2、子集①回溯选择法② 动态规划 ③ 位运算方式组合 1、全排列 全排列&#xff08;Permutation&#xff09;&#xff1a;全排列是指给定一组元…

【漏洞复现】Ruijie RG-BCR860 后台命令执行漏洞(CVE-2023-3450)

文章目录 前言声明一、简介二、漏洞概述三、影响版本四、环境搭建五、漏洞复现六、修复方式 前言 Ruijie RG-BCR860 2.5.13 版本存在操作系统命令注入漏洞&#xff0c;攻击者可通过该漏洞获取服务器敏感信息&#xff0c;导致服务器被沦陷。 声明 请勿利用文章内的相关技术从事…

git删除已经提交的大文件

当你不小心把一个巨大的二进制文件提交到git仓库的时候&#xff0c;此时删除再提交也没有用了&#xff0c;大文件已经在仓库中留底了。另外比如需要删除某个需要保密的文件&#xff0c;都是相同的解决办法。 我本来想着把dll放在三方库里面提交到仓库里&#xff0c;省得在不同…

入门级:路由器配置静态路由

软件&#xff1a;cicso packet tracer 8.0 拓扑图&#xff1a;路由器&#xff1a;Router-PT、连接线&#xff1a;Serial DTE、连接口&#xff1a;Serial口&#xff08;serial是串行口,一般用于连接设备,不能连接电脑&#xff09; 实验步骤&#xff1a; 1、构建拓扑图&#xf…

paddlenlp:社交网络中多模态虚假媒体内容核查

初赛之环境配置篇 一、背景二、任务三、数据集1、初赛阶段2、评分标准 四、环境操作五、写在最后 一、背景 随着新媒体时代信息媒介的多元化发展&#xff0c;各种内容大量活跃在媒体内中&#xff0c;与此同时各类虚假信息也充斥着社交媒体&#xff0c;影响着公众的判断和决策。…

re学习(27)攻防世界 re1-100

参考文章&#xff1a;攻防世界逆向高手题之re1-100_沐一 林的博客-CSDN博客 查壳&#xff1a; 用IDA打开&#xff0c;分析 编写脚本&#xff1a; d"{daf29f59034938ae4efd53fc275d81053ed5be8c}" d1d[1:11] d2d[11:21] d3d[21:31] d4d[31:41] print(d3d4d1d2) #…

我去,这是什么黑科技!用信号处理方法抑制瞬态噪声

对于语音增强来说&#xff0c;噪声一般可以分为稳态噪声&#xff08;如白噪声&#xff09;和瞬态噪声&#xff08;有的地方也叫非稳态噪声&#xff0c;如键盘声&#xff09;。如果对语音降噪有一定了解的读者会知道&#xff0c;一般的信号处理方法对稳态噪声比较有效&#xff0…

FreeIPA Server/Client不同版本组合,对podman rootless container的支持

FreeIPA Server/Client不同版本组合&#xff0c;对podman rootless container的支持 根据实验&#xff0c; CentOS 7.9 yum仓库自带的FreeIPA Server 4.6.8&#xff0c; ipa client版本支持CentOS 7.9 yum仓库自带的FreeIPA Client 4.6.8不支持subids&#xff0c;podman调用…

SqlServer2008如何解析Json—附详细代码

1、在数据库中创建存储过程parseJSON&#xff0c;具体文件请在如下链接下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1a-aNmSKk_yvv9wQTP3DCsg?pwdyxwx 提取码&#xff1a;yxwx 2、具体使用方法如下&#xff1a; DECLARE UserParameter NVARCHAR(MAX){"…

单元测试之 - Spring框架提供的单元/集成测试注解

Spring框架提供了很多注解来辅助完成单元测试和集成测试(备注&#xff1a;这里的集成测试指容器内部的集成测试&#xff0c;非系统间的集成测试)&#xff0c;先看看Spring框架提供了哪些注解以及对应的作用。RunWith(SpringRunner.class) / ExtendWith(SpringExtension.class)&…

无代码开发(BIP旗舰版-YonBuilder)

目录 我的应用 新建领域 菜单管理 应用构建 新建应用 对象建模 新增业务对象 新增业务实体 页面建模 新增页面 编辑页面 发布管理 我的应用 角色管理 yonbuilder开发平台&#xff0c;提供标准服务和专业开发服务&#xff1b; 本篇文章只演示标准服务的可视化应用…

软件外包开发的GO语言特点

Go语言&#xff08;也称为Golang&#xff09;是由Google开发的一种编程语言。它具有许多特点&#xff0c;使其成为许多项目范围的优秀选择。Go语言适用于需要高性能、并发和简洁易读的项目&#xff0c;特别是面向网络和分布式应用的项目。今天和大家分享项目的特点及适用的项目…

学习记录——TransNormerLLM、SRFormer、PLG-ViT、EfficientViT

关于Transformer Transformer 存在局限。首要的一点&#xff0c;它们有着对于序列长度的二次时间复杂度&#xff0c;这会限制它们的可扩展性并拖累训练和推理阶段的计算资源和时间效率。基于 Transformer的模型在提高窗口大小以优化性能的同时&#xff0c;也带来了相应的计算负…

刷完这个笔记,15K真的不能再少了....

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;得准备面试了&#xff0c;又不知道从何下手&#xff01;为了帮大家节约时间&#xff0c;特意准备了一份面试相关的资料&#xff0c;内容非常的全面&#xff0c;真的可以好好补一补&#xff0c;希望大家在都能拿到理想…