C++学习| MFC简单入门

news2024/11/28 14:39:45

前言:因为接手了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);

结果:
在这里插入图片描述

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

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

相关文章

【独立版】多商家+供应链云仓系统源码

详情介绍【独立版】多商家供应链云仓系统源码

刑侦科技前沿:IP地址定位技术打击网络犯罪

刑事侦查科技突飞猛进,IP地址定位技术正成为网络犯罪打击的有力利器。 近期,警方通过精准的IP地址定位技术成功破获一起大规模网络犯罪案件。此案件涉及多个地区,且作案手法极其隐蔽。得益于IP地址定位技术,警方得以及时介入将罪…

APP开发者如何有效利用广告位资源,提升平台变现收益?

不同的广告场景能为开发者带来不同的收益,开发者可以对广告位进行合理开发和设计。 在广告位设计上,有三大策略可以参考: 需要尊重用户体验,基于原生、APP类型,设计适合自己的广告位样式; 可以选择性引入…

【JavaEE进阶】Spring 更简单的读取和存储对象

文章目录 一. 存储Bean对象1. 配置扫描路径2. 添加注解存储 Bean 对象2.1 使用五大类注解存储Bean2.2 为什么要有五大类注解?2.3 有关获取Bean参数的命名规则 3. 使用方法注解储存 Bean 对象3.1 方法注解储存对象的用法3.2 Bean的重命名3.3 同⼀类型多个 Bean 报错 …

mysql获取第一个逗号前面的字符串

字符串内容如下: 统编版(2019),必修下册,第五单元 ,第10课,10-2 在马克思墓前的讲话 /恩格斯, 想获取,第一个逗号前面的字符串,即:统编版(2019) 需要第一获取逗号的下标位置&…

用AI工具生成短视频大片,1分钟详细教程教会你

Hi! 大家好,我是专注于AI项目实战的赤辰, 今天我要跟大家分享如何用AI工具1分钟内生成一个短视频大片,效果完全不输影视大V。 只需要用一句话就可以生成视频,或者用一张图就能生成视频,这就是最新推出的AI工具Pika L…

生产者消费者模型 C++ 版

基础生产者消费者模型 网上一般教程是使用std::queue,定义消费者 Consumer ,定义Producter类,在main函数里面加锁保证线程安全。 本片文章,实现一个线程安全的队列 threadsafe_queue,只在队列内部加锁。如此可适配,多…

taro h5列表拖拽排序 --- sortablejs 和 react-sortable-hoc

描述:列表,拖拽排序,只测试了h5 一、sortablejs 文档:http://www.sortablejs.com/ 1.安装sortablejs 2、引入 import Sortable from sortablejs3、页面 const [list, setList] useState([{id: item-1,content: 选项1 }, {id…

什么情况,听说项目经理已经成为行业的最底层了

大家好,我是老原。 要说现在的职场人最关心什么,那肯定是自己所在的这个行业、工种市场行情如何,会不会慢慢没落了,或者被现在盛行的AI、ChatGpt给替代了。 今天这个标题的问题也是我在知乎上看到很多项目经理都在提问的问题之一…

创新引领城市进化:人工智能和大数据塑造智慧城市新面貌

人工智能和大数据等前沿技术正以惊人的速度融入智慧城市的方方面面,为城市的发展注入了强大的智慧和活力。这些技术的应用不仅令城市管理更高效、居民生活更便捷,还为可持续发展和创新奠定了坚实的基础。 在智慧城市中,人工智能技术正成为城市…

网络安全/黑客技术(经验分享)

一、为什么选择网络安全? 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地,网络安全行业地位、薪资随之水涨船高。 未来3-5年,是安全行业的黄金发展期,提前踏入…

WebSocket与消息推送

B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链接,但…

pytest结合 allure 打标记之的详细使用

前言 前面我们提到使用allure 可以生成漂亮的测试报告,下面就Allure 标记我们做详细介绍。 allure 标记 包含:epic,feature, story, title, testcase, issue, description, step, serverity, link, attachment 常用的标记 allure.feature…

汽车租赁小程序制作,如何开发一个微信租车平台“

随着移动互联网的快速发展,小程序已经成为了企业和个人开展业务的重要工具之一。微信小程序作为最为常见和使用最为广泛的一种小程序形式,具有便捷、灵活、高效的特点,受到了广大用户的喜爱。在本文中,我们将手把手教你如何创建一…

vue3使用pinia和pinia-plugin-persist做持久化存储

1、安装依赖 pnpm i pinia // 安装 pinia pnpm i pinia-plugin-persist // 安装持久化存储插件2、main.js引入 import App from ./App.vue const app createApp(App)//pinia import { createPinia } from pinia import piniaPersist from pinia-plugin-persist //持久化插件 …

关于selenium 元素定位的浅度解析

一、By类单一属性定位 元素名称 描述 Webdriver API id id属性 driver.find_element(By.ID, "id属性值") name name属性 driver.find_element(By.NAME, "name属性值") class_name class属性 driver.find_element(By.CLASS_NAME, "class_na…

【计算机网络】应用层协议Http

文章目录 前言URL(网址)urlencode 和 urldecodeHttp格式方法Http状态码重定向Http常见报头会话保持结语 前言 通过前面的学习,我们已经知道了协议其实就是一种约定,要求双方都能理解对方的消息。应用层上的协议不属于操作系统&am…

七夕送什么礼物最有意义?可以试试潮趣数码好物!

​七夕送什么礼物最有意义?七夕节不想送常见物品,你可以送给他/她潮趣数码好物,不需要多么的贵重,最重要的是你的心意,只要你送的都喜欢。下面来安利几款值得入手的数码好物! 推荐一:南卡00压开…

readMe、profile美化。

GitHub的profile美化&#xff0c;第一步&#xff1a;创建与个人账号一致的仓库。然后就会自动展示于个人首页、再新建readme.md文档&#xff0c;添加照片信息即可。&#xff08;动态效果是用svg实现的&#xff09; 一、上波浪svg代码 <svg xmlns"http://www.w3.org/2…

C# WPF 开源主题 HandyControl 的使用(一)

HandyControl是一套WPF控件库&#xff0c;它几乎重写了所有原生样式&#xff0c;同时包含80余款自定义控件&#xff08;正逐步增加&#xff09;&#xff0c;下面我们开始使用。 1、准备 1.1 创建项目 C# WPF应用(.NET Framework)创建项目 1.2 添加包 1.3 在App.xaml中引用…