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

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,封装了关于对话框窗口的操作。也是此应用程序运行后控制对话框界面的程序部分。

界面和代码数据交互——加法器

  1. 第一步:编辑界面。
    添加一个静态文本框(Static Text),用来显示加法结果,这个是用户没有办法修改的。
    添加两个个编辑框(Edit Control),用来交互让用户输入,输入两个要相加的数字。
    添加一个按钮(Button),用来确认交互,确认是否要相加。
    控件右键选择“属性”,对“描述内容”进行修改,得到下图。
    在这里插入图片描述
  2. 第二步:为控件添加变量。
    对静态文本框(Static Text)和编辑框(Edit Control),右键选择“添加变量”,然后注意设置类型、名称和变量类型。
    注意命名规则,类的成员变量名一般以m_打头,以标识它是一个成员变量。
    编辑框变量
    注意文本显示,Static Text的属性ID改为IDC_TEXT,不然无法修改,而且是控件控制。
    在这里插入图片描述
  3. 第三步:为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);
}
  1. 第四部:添加一个标题。
    找到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

题目&#xff1a;leetcode454. 四数相加 II 描述&#xff1a; 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] num…...

PHP证券交易员学习网站mysql数据库web结构apache计算机软件工程网页wamp

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

对p-n结/AlGaN/GaN HEMTs中n-GaN掺杂浓度对栅极可靠性的影响

目录 第35届功率半导体器件与集成电路国际研讨会论文集2023年5月28日至6月1日&#xff0c;中国香港南方科技大学电气电子工程系&#xff0c;深圳标题&#xff1a;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开发&#xff0c;所以在新电脑上安装Cocoapods 在升级gem&#xff0c;sudo gem update --system&#xff0c;和安装cocoapods时都遇到如下的提示&#xff1a; ERROR: While executing gem ... (Errno::EPERM)Operation not per…...

枚举缓存工具

此文章为笔记&#xff0c;为阅读其他文章的感受、补充、记录、练习、汇总&#xff0c;非原创&#xff0c;感谢每个知识分享者。 文章目录 1. 背景2. 枚举缓存3. 样例展示4. 性能对比5. 总结 本文通过几种样例展示如何高效优雅的使用java枚举消除冗余代码。 1. 背景 枚举在系统…...

【BASH】回顾与知识点梳理(二十五)

【BASH】回顾与知识点梳理 二十五 二十五. 特殊shell、PAM 模块、讯息传递和大量建置账号25.1 特殊shell特殊的 shell, /sbin/nologin 25.2 PAM模块25.3 Linux 主机上的用户讯息传递查询使用者&#xff1a; w, who, last, lastlog使用者对谈&#xff1a; write, mesg, wall使用…...

什么是Node js?什么是React?有什么区别

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

使用postman做接口测试

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

VMware Workstation 如何启用复制粘贴

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

免费小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务 bbc

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 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&#xff1a;每一步都需要自己做。 Keras&#xff1a;做起来更…...

爬虫:使用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&#xff1a;轻松创建交互式应用1.2 最全 Streamlit 教程专栏 2 我的个人博客网站已上线&#xff01;2.1 一个集成了智能中医舌诊-中e诊专栏的博客网站2.2 前期准备2.3 使用 Streamlit Cloud 运行 3 知识点讲解3.1 实现多页面&#xff1a;两种…...

手把手教你如何实现内网搭建电影网站并进行公网访问(保姆级教学)

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

Redis_事务操作

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

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…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL&#xff08;Hardware Description language&#xff09; 在解释HDL之前&#xff0c;先来了解一下数字系统设计的流程&#xff1a;逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端&#xff0c;在这个过程中就需要用到HDL&#xff0c;正文…...