C++学习| MFC简单入门
前言:因为接手了C++MFC的程序,所以需要对MFC编程方面有所了解。
C++之MFC简单入门
- MFC相关的概念
- MFC
- WIN32
- QT
- MFC项目基本操作
- MFC项目创建
- MFC项目文件解读
- 界面和代码数据交互——加法器
MFC相关的概念
MFC
MFC(Microsoft Foundation Classes微软基础类库):微软公司提供的一个类库,以C++类的形式封装了Windows API,并且包含一个应用程序框架,减少应用程序开发人员的工作量。
WIN32
WIN32程序和MFC程序生成的都是Windows应用程序。
WIN32开发:是windows下的最基本的编程方式,用Window提供的API(Application Programming Interface)为Window编写应用程序。
MFC封装了WindowsAPI,也相当于对WIN32封装。比起WIN32来说,MFC应用程序开发工作量简化了不少。但由于MFC是封装了Win32编程,所以在效率和灵活性上肯定没有Win32编程好。此外WIN32开发是面向过程的程序,而MFC开发则是面向对象。
QT
MFC和QT两者都是用于C++图形用户界面应用程序。
QT:跨平台C++图形用户界面应用程序开发框架,可以开发GUI程序也可以非GUI。QT是面向对象编程的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。
MFC和QT的区别:
- 跨平台方面,QT跨平台,可以在Windows、Linux、Mac等多平台开发;MFC因为是封装Windows API,所以只能用于Windows平台。
- GUI界面方面,QT做GUI开发比MFC好,而且支持CSS,界面设计更加方便和美观。
- 程序运行效率方面,MFC比QT高,因为MFC是浅层封装,而且VC对Windows进行了针对性优化,所以性能比较好。不过现在主流计算机系统的配置上来了,这点性能差别基本不介意。
- 发展上来说,QT一直在更新,而MFC在很多年前就已经停止更新了。不过MFC还是被保留了下来,因为过去很多软件还是用MFC开发,用户量还是比较大,重写工作量无法估计,所以短时间内QT还很难撼动MFC地位。
- 设计上来说,MFC是伪对象,而QT是真对象。MFC本质是访问包装起来C语言编写的Windows API,还是事件驱动的架构。而QT则是用C++编写的,是精心设计的卖你想对象,在命名,继承,类的组织等方面保持了优秀的一致性,代码写起来比较优雅。
- 创建界面上,MFC无法创建大小动态可变的子窗口,必须用代码来更改,软件国际化麻烦,需要对每个语言的版本重新修改软件,而QT有强大的layout机制。
- 文档帮助上,MFC提供了帮助文章MSDN需要单独付费而且还非常庞大,链接设计也一般,很难通过一个类跳转到相关的类。而QT帮助文档设计非常优秀,只有18M。
MFC项目基本操作
MFC项目创建
点击VS新建一个MFC项目,通常会有四个引用程序类型:单个文档、多个文档、基于对话框以及多个顶层文档(不常用)。
单个文档只有一个窗口,同一时刻只能操作一个文档,例如记事本。
多个文档可以有多个子窗口,允许同时操作多个文档,例如Notepad++。
基于对话框没有菜单、工具栏及状态栏,也不能处理文档。
MFC项目文件解读
创建了一个基于对话框的项目。
头文件:存放.h后缀的头文件。
源文件:存放.cpp后缀的文件。
资源文件:存放mfc界面相关的资源文件。
pch:预编译文件,可以把自己需要预编译的内容放入。预编译是程序正式编译前做一些代码文本的替换工作,这样调用这段代码时候就不需要进行调用的入栈出栈,节省时间,通常针对那种改动不大的代码。
targetver.h:定义程序运行的环境。如限制程序只能在XP下运行,限制程序在只能在Vin7下运行,或限制程序只能在XP以上系统运行。
Resource.h:就是资源文件中.rc后缀文件的头文件。
资源文件:ico是图标,rc和rc2是mfc界面的资源文件,指向同一个资源。但是rc2可以可视化编辑,而rc需要代码手工编辑。双击rc2后缀文件,然后找到Dialog文件下DIALOG后缀的的,双击即可查看对应可视化编辑的界面。
MFCApplication1:该类继承CWinApp,封装了关于程序流程的操作。相当于整个程序的主程序,程序主入口其实也是在这里头。
MFCApplication1Dlg:该类继承CDialogEx,封装了关于对话框窗口的操作。也是此应用程序运行后控制对话框界面的程序部分。
界面和代码数据交互——加法器
- 第一步:编辑界面。
添加一个静态文本框(Static Text),用来显示加法结果,这个是用户没有办法修改的。
添加两个个编辑框(Edit Control),用来交互让用户输入,输入两个要相加的数字。
添加一个按钮(Button),用来确认交互,确认是否要相加。
控件右键选择“属性”,对“描述内容”进行修改,得到下图。
- 第二步:为控件添加变量。
对静态文本框(Static Text)和编辑框(Edit Control),右键选择“添加变量”,然后注意设置类型、名称和变量类型。
注意命名规则,类的成员变量名一般以m_打头,以标识它是一个成员变量。
注意文本显示,Static Text的属性ID改为IDC_TEXT,不然无法修改,而且是控件控制。
- 第三步:为button添加函数响应。
四种方法:- Class Wizard类导向添加:按钮右键类导向。对象ID选中自己要的按钮ID,消息为函数处理类型,选择BN_CLICKED,然后添加处理程序。
- Add Event Handler实践处理程序:添加消息处理函数,默认就是BN_CLICKED。
- 属性视图“闪电”图标:点击就可以直接加入了控件事件了。
- 双击按钮控件:双击后会自动添加消息处理函数,并跳转到代码部分。
// 加法按钮响应函数
void CMFCApplication1Dlg::OnBnClickedButton1()
{//更新m_inputA,m_inputB获取界面输入的值UpdateData(true);//进行加法int a,b,c;a = m_inputA;b = m_inputB;c = a + b;//结果显示CString str1,str2;str1 = "结果:";str2.Format(L"%d", c);m_textShow.SetWindowTextW(str1+str2);
}
- 第四部:添加一个标题。
找到OnInitDialog()函数部分,添加上自己想要的标题代码。
CString str;
str = "ADD";
SetWindowText(str);
结果:
相关文章:

C++学习| MFC简单入门
前言:因为接手了CMFC的程序,所以需要对MFC编程方面有所了解。 C之MFC简单入门 MFC相关的概念MFCWIN32QT MFC项目基本操作MFC项目创建MFC项目文件解读界面和代码数据交互——加法器 MFC相关的概念 MFC MFC(Microsoft Foundation Classes微软…...

“一日之际在于晨”,欢迎莅临WAVE SUMMIT上午场:Arm 虚拟硬件早餐交流会
8月16日,盛夏的北京将迎来第九届WAVE SUMMIT深度学习开发者大会。在峰会主论坛正式开启前,让我们先用一份精美的元气早餐,和一场“Arm虚拟硬件交流会”,唤醒各位开发小伙伴的开发魂! 8月16日,WAVE SUMMIT大…...
leetcode454. 四数相加 II
题目:leetcode454. 四数相加 II 描述: 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] num…...

PHP证券交易员学习网站mysql数据库web结构apache计算机软件工程网页wamp
一、源码特点 PHP证券交易员学习网站 是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 下载地址https://download.csdn.net/download/qq_41221322/88205549 PHP证券交易员…...

对p-n结/AlGaN/GaN HEMTs中n-GaN掺杂浓度对栅极可靠性的影响
目录 第35届功率半导体器件与集成电路国际研讨会论文集2023年5月28日至6月1日,中国香港南方科技大学电气电子工程系,深圳标题:Impacts of n-GaN Doping Concentration on Gate Reliability of p-n Junction/AlGaN/GaN HEMTs摘要信息解释研究了…...

Mac M2 Pro安装使用Cocoapods
Mac Pro M2安装使用Cocoapods 在新公司要做iOS开发,所以在新电脑上安装Cocoapods 在升级gem,sudo gem update --system,和安装cocoapods时都遇到如下的提示: ERROR: While executing gem ... (Errno::EPERM)Operation not per…...

枚举缓存工具
此文章为笔记,为阅读其他文章的感受、补充、记录、练习、汇总,非原创,感谢每个知识分享者。 文章目录 1. 背景2. 枚举缓存3. 样例展示4. 性能对比5. 总结 本文通过几种样例展示如何高效优雅的使用java枚举消除冗余代码。 1. 背景 枚举在系统…...
【BASH】回顾与知识点梳理(二十五)
【BASH】回顾与知识点梳理 二十五 二十五. 特殊shell、PAM 模块、讯息传递和大量建置账号25.1 特殊shell特殊的 shell, /sbin/nologin 25.2 PAM模块25.3 Linux 主机上的用户讯息传递查询使用者: w, who, last, lastlog使用者对谈: write, mesg, wall使用…...

什么是Node js?什么是React?有什么区别
JavaScript是当今最流行的编程语言之一,它用于开发多种技术,两种这样的技术是Node.js和React。许多学生很难理解Nodejs和React之间的区别。 React和Nodejs之间的主要区别在于它们的使用位置。Nodejs 用于开发应用程序的服务器端,而Reactjs用于…...

使用postman做接口测试
1.接口测试:针对软件对外提供服务的接口的输入输出进行测试,以及接口间相互逻辑的测试,验证接口功能与接口描述文档的一致性 2.接口测试流程: 1)获取接口信息:通过接口文档或抓包来获取接口的基本调用方式和…...

VMware Workstation 如何启用复制粘贴
产品:VMware Workstation 16 Pro 版本:16.1.1 build-17801498 我们刚安装好的 VMware Workstation 会发现无法复制粘贴文件到虚拟机中,如下为解决方案: 1.点击 虚拟机,点击 安装 VMware Tools(T)...。 2.虚拟机下面会…...

免费小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务 bbc
1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端…...

VSCode-Python传参数进行Debug
新建demo.py import argparse def parse_args():description "debug example" parser argparse.ArgumentParser(descriptiondescription) help "The path of address"parser.add_argument(--host,help help) parser.add_ar…...

实践-传统深度学习
简介与安装 2 训练自己的数据集整体流程3 数据加载与预处理4 搭建网络模型5 学习率对结果的影响6 Drop-out操作7 权重初始化方法对比8 初始化标准差对结果的影响9 正则化对结果的影响10 加载模型进行测试 TensorFlow:每一步都需要自己做。 Keras:做起来更…...
爬虫:使用Selenium模拟人工操作及获取网页内容
专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对…...

AOP开发
目录 1、简介 1.1、AOP 相关概念 1.2、AOP 开发明确的事项 1.3、知识要点 2、两种方式 3、基于 XML 3.1、快速入门 3.1.1、导入坐标 3.1.2、创建接口和实现类 3.1.3、创建切面 3.1.4、配置bean 3.1.5、配置织入 3.1.6、测试 3.2、切点表达式 3.2.1、表达式举例 …...

Streamlit项目: 轻松搭建部署个人博客网站
文章目录 1 前言1.1 探索 Streamlit:轻松创建交互式应用1.2 最全 Streamlit 教程专栏 2 我的个人博客网站已上线!2.1 一个集成了智能中医舌诊-中e诊专栏的博客网站2.2 前期准备2.3 使用 Streamlit Cloud 运行 3 知识点讲解3.1 实现多页面:两种…...

手把手教你如何实现内网搭建电影网站并进行公网访问(保姆级教学)
手把手教你如何实现内网搭建电影网站并进行公网访问 文章目录 手把手教你如何实现内网搭建电影网站并进行公网访问前言1. 把软件分别安装到本地电脑上1.1 打开PHPStudy软件,安装一系列电影网站所需的支持软件1.2 设置MacCNS10的运行环境1.3 进入电影网页的安装程序1…...

Redis_事务操作
13. redis事务操作 13.1事务简介 原子性(Atomicity) 一致性(Consistency) 隔离性(isolation) 持久性(durabiliby) ACID 13.2 Redis事务 提供了multi、exec命令来完成 第一步,客户端使用multi命令显式地开启事务第二步,客户端把事务中要执行的指令发…...

python质检工具(pylint)安装使用总结
1、Pylint Pylint工具主要类似java中的checkStyle和findbugs,是检查代码样式和逻辑规范的工具。 1.1、Pylint安装流程: 打开PyCharm软件,打开如图1.1所示Terminal终端窗口,先查看python版本和pip版本,pip是19.0.3,python是2.7 图1.1 运行pip install pylint安装pylin…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...