当前位置: 首页 > 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…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...