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

MFC学习笔记专栏开篇语

MFC,是一个英文简写,全称为 Microsoft Foundation Class Library,中文翻译为微软基础类库。它是微软开发的一套C++类库,是面向对象的函数库。

微软开发它,是为了给程序员提供方便,减少程序员的工作量。如果没有MFC的话,那么,早期的Windows程序员就必须要采用Windows API来开发程序了。

采用Windows API,可以开发出运行效率较高的程序来。运行的效率,可以高于用MFC开发的程序。然而,全靠Windows API的话,那么,许多的重复性的工作,它的工作量大概就会比较大了。

有了MFC,程序员可以减少许多的重复性的工作量,加快开发效率。

然而,在当今时代,似乎,单论开发效率的话,那么,有好多的流行的框架,似乎开发效率都会好于MFC。比如Qt,比如Java,C#,Python,Go语言等等,开发效率都很高。

如果为了让自己的开发效率高一些,那么,MFC似乎不是大家来学习它的理由。

在软件开发方面,其实,开发效率高并不代表着软件的运行效率高。在Windows平台上,除了Windows API的运行效率可以比MFC高一些之外,其他的东西,基本上,运行效率都是慢于MFC的。Qt,它可以搭配着C++,所以,Qt的运行效率可以很高。但是,它和微软官方的类库MFC相比,毕竟还是要慢一些的。C#,Java,这俩的速度,跟用C++的Qt与MFC根本上就不在一个数量级上,C#和Java的运行效率要比MFC与Qt慢的多。

在运行效率方面,在Windows平台里面,最高的,是Windows API。其次,就是MFC与Qt。而MFC在Windows的运行效率要高于Qt。

MFC还有一个很好的优势,是什么呢?MFC可以和Windows API无缝对接。这一点,Qt是比不了MFC的。

大体上,可以认为,有了Windows API和MFC,我们可以在Windows平台上,畅通无阻。而Qt的话,它作为一个框架,有的时候,它也会有它的局限。如果你所需要的功能 ,Qt提供了,那还好。如果Qt未能够提供,你要咋办呢?

MFC是一个比较丰富的类库,然而,它也和Qt一样,本身还是功能有限。然而,MFC可以和Windows API无缝对接。有了MFC和Windows API的联手,那么,即使MFC未能够提供某方面的功能,那么,我们也可以结合着Windows API,自己来实现相应的功能。Windows API与MFC的联手,可以使我们在Windows平台上,自由驰骋,自由地发挥自己的才能,以开发我们想要开发的软件。

MFC的开发效率,相比于Windows API,它是高了一些。而相比于流行的Qt,C#等等的东西,开发效率是慢了一些的。然而,它运行效率高。

MFC,它是一个学习难度比较高的东西。它的内容还很多。想要学习好这一门科目,那么,你可以事先准备好瘦身,因为,学习它,的确是需要耗费一些个体力与脑力的,而且,学习它也会比较耗费时间。

为啥难度高?因为专业。因为,同样的一些个功能,Qt,C#等等,已经是帮助我们封装好了相应的功能,不需要我们自己去操心了。而在MFC里面,好多的东西,我们还是需要自己去做。这样一来,为了实现同样的功能,大概,用MFC的话,代码量会多了一些。但是呢,由于我们的参与度高了,所以,我们更可以在学习MFC的过程中,学习到Windows编程的专业性的知识。

选择开发工具的时候,开发效率,运行效率,都可以是我们考虑的因素。当然了,学习难度也可以是我们可以去考虑的因素。如果你打算学习一个非常专业,运行效率高,可以自由发挥你的编程才能而不必忍受着本身框架的功能缺失的局限,具备着强大的面向对象的特色的框架,那么,MFC会是非常适合你的一款编程框架类库。

MFC,它当然有它的缺陷。在我去学习MFC的时候,我听到的一个话语,那就是,MFC,谐音为【没饭吃】,mei fan chi。 

这一点,的确是许多程序员不去学习MFC的理由吧。

虽然它不火,但是作为微软的王牌的面向对象的编程框架,我们有理由相信,微软不倒,MFC就依然会是一个好的编程框架。至少,微软程序员会用它来编程。微软作为一家大型跨国企业,用它的,会少吗?

如果你能够学习好MFC,并且学得非常好,还进了微软,那么,你与周边的程序员,可能工资级别就不一样了,地位,可能也会不一样了。

MFC学习起来有难度,我自己,最近是刚刚学完了Jeff Prosise的第二版MFC教材,就是下图所示的这个教材。

学习这本书,让我受益匪浅。当然了,学习的时候,压力也是很大的。在学习MFC或者是Windows API的时候,有一些个难点知识。像是映射模式,坐标系,窗口原点与视口原点,这样的知识,我认为,这就是很难的一块知识。

MFC之所以热度低,乃至于说,佩措尔德先生的第五版Windows教材会热度低,那么,我认为就是与这些个难点知识有关。

对于今天的程序设计学习者来讲,想要克服MFC与Windows API这俩科目,应该会是需要一番努力的。

我认为,想要学习好程序设计的知识,Windows API与MFC,是需要克服的两个科目。想要成为高水平的,高端的程序员,那么,一个十分重要的因素,一定是说,你的程序的运行效率高。

想要让程序的运行效率高,一方面是算法,另一方面,是所选择的编程框架。如果说,十分类似的一段代码,使用C#的效率,会慢于MFC,那么,你可以相信,如果能够学习好MFC,那么,你的程序质量,应该会得到有效的提升的。

程序员有35岁危机。如果,能够将Windows API与MFC学得好,学得精,那么,35岁危机,也就自然度过了。

在这里,我开启本专栏,是打算写下我对于MFC的理解。写作的内容,应该是以Jeff Prosise先生的教材为蓝本的。很多的内容,甚至还有可能是照抄的。然而,我所写的东西,仍然会与Jeff先生有一些差别。

接下来,我来说说本专栏的一些个特点。

第一点,Jeff先生写作的时候,是用Visual C++ 6.0作为演示平台的。而我这里,所采用的编程平台,是Visual Studio 2010 和 Visual Studio 2019,以 VS 2019 为主。这么两个软件平台,相信,对于你的学习,应该是会有帮助的。

第二点,我会添加许多的程序案例。在Jeff先生那里,很多的知识点,他是讲解得比较详细的。然而,我认为,如果是编写一个面向初学者的教材的话,那么,应该多一些普通的程序案例演示,而不是讲了好多好多的基础知识,然后突然来一个篇幅很大的东西。

第三点,对于一些个难点知识,我会讲解得更加详细。这一点,到时候,大家会对我本人的讲课风格,有所体会的。

第四点,如果将我所讲解的内容展开为一本书的话,那么,有可能,我所写的内容的字数,书页的厚度,可能会是Jeff先生的两到三倍。那么,你阅读我写的内容,你大概也需要花费比阅读Jeff先生的教材更多的时间。如果,你缺乏学习长篇技术教材的耐心的话,那么,我所写的内容,可能你是学不下来的

第五点,原书的一些个有难度的代码,我依然会予以保留。我自己写博客的时候,我当然会为了方便初学者,而去多写一些个基础案例。然而,想要学习好MFC,学习好Windows API知识,仅有一些个简单的案例是不行的。有难度的代码,你依然是需要去学习的,并且也需要你尽力地克服这些个难点知识。

本专栏的写作目的,一来,是巩固我自己的所学。二来,是为培养一批高端程序员。

在国内,很多的专业的人才状况都面临着相似的情况。中低端的人才多,高端人才紧缺。

在这里,对于像是Windows API与MFC这样的有难度的知识,它的确是有着相当的难度,有可能,会有许多人,学到某一块的时候,怎么也学不好。这个,是有可能的。但是呢,国内的985与211高校的本科生与研究生,应该还是不少的。如果,你能够凭借自己的能力,考进这样的名校,那么,或许,Windows API 与MFC 这样的有难度的编程知识,你可以去挑战一下,以成就自身。

如果你是普通的一本,二本三本,乃至于专科院校的学生,那么,如果你有兴趣来挑战一下MFC与Windows API 的知识的话,并且,你学好了这两科,那么,你也就可以自信地说,你的编程能力,已经是超过了许多的大学生了,甚至是超越了许多的985与211院校的学生了。

因为,MFC与Windows API知识,这种有难度,每一本书是1000多页的大书,不是每一个人都有耐心去学习完这样的东西的。学一个Java,C#,学完以后,去找工作,去赚钱,那不也是很香的吗?如果你本身是普通大学的学生,然后呢,你还有兴趣去挑战一下MFC与Windows API这样的有难度的编程科目,并且呢,你还学好了,你坚持下来了,那么,你当然在技术上,就会更加地具备竞争力。

就我本人来讲,我希望通过本专栏的教学,来培养一批高端程序员,而不是中低端的程序员。同时,我也希望,本专栏,可以成为一个高质量的专栏。

相关文章:

MFC学习笔记专栏开篇语

MFC,是一个英文简写,全称为 Microsoft Foundation Class Library,中文翻译为微软基础类库。它是微软开发的一套C类库,是面向对象的函数库。 微软开发它,是为了给程序员提供方便,减少程序员的工作量。如果没…...

电子科技大学《高级算法设计与分析》期末复习问题汇总(客观题-选择题、判断题)

电子科技大学《高级算法设计与分析》问题汇总_已知背包问题的动态规划算法时间复杂度为o(nw),其中n为物品数目,w为背包容量。请-CSDN博客 转载自上面这个链接,古希腊掌管成电专业课的神!!为了防止他的链接失效,自己也转存一份 &…...

GPTcelltype——scRNA-seq注释

#安装包 install.packages("openai") remotes::install_github("Winnie09/GPTCelltype") #填写API Sys.setenv(OPENAI_API_KEY your_openai_API_key) #加载包 #Load packages library(GPTCelltype) library(openai) #准备文件 #Assume you have already r…...

AI与大数据的深度结合:驱动决策的革命性力量

引言:数字时代的决策挑战 在这个信息爆炸的数字时代,数据早已渗透到我们生活的方方面面。全球每天产生的数据量呈指数级增长,无论是用户的消费行为、设备的运行状态,还是社会热点的实时动态,这些信息的规模和复杂性前所…...

Java多线程与线程池技术详解(九)

面对苦难的态度:《病隙碎笔》“不断的苦难才是不断地需要信心的原因,这是信心的原则,不可稍有更动。” 孤独与心灵的成长:《我与地坛》“孤独的心必是充盈的心,充盈得要流溢出来要冲涌出去,便渴望有人呼应他…...

【常考前端面试题总结】---2025

React fiber架构 1.为什么会出现 React fiber 架构? React 15 Stack Reconciler 是通过递归更新子组件 。由于递归执行,所以更新一旦开始,中途就无法中断。当层级很深时,递归更新时间超过了 16ms,用户交互就会卡顿。对于特别庞…...

什么是大语言模型(LLM)

1. 什么是大语言模型(LLM)? LLM 是一种基础模型(Foundation Model)的实例。 基础模型的特点: 使用大量未标注的自监督数据进行预训练。通过学习数据中的模式,生成具有普适性和可适应性的输出…...

柚坛工具箱Uotan Toolbox适配鸿蒙,刷机体验再升级

想要探索智能设备的无限可能?Uotan Toolbox(柚坛工具箱)将是您的得力助手。这款采用C#语言打造的创新型开源工具箱,以其独特的设计理念和全面的功能支持,正在改变着用户与移动设备互动的方式。 作为一款面向专业用户的…...

supervisor使用详解

参考文章: Supervisor使用详解 Supervisor 是一个用 Python 编写的客户端/服务器系统,它允许用户在类 UNIX 操作系统(如 Linux)上监控和控制进程。Supervisor 并不是一个分布式调度框架,而是一个进程管理工具&#x…...

win11电源设置在哪里?控制面板在哪里?如何关闭快速启动?

不知道微软咋想的,从win10(win8)开始搞事情,想把windows娱乐化。 娱乐化的特点就是只照顾傻子不考虑专家,系统设置统统藏起来,开机即用——也只能那么用。 搞两套界面做不到吗? win11非常头疼的…...

【论文阅读笔记】One Diffusion to Generate Them All

One Diffusion to Generate Them All 介绍理解 引言二、相关工作三、方法预备知识训练推理实现细节训练细节 数据集构建实验分结论附录 介绍 Paper:https://arxiv.org/abs/2411.16318 Code:https://github.com/lehduong/onediffusion Authors&#xff1…...

SpringCloud和Nacos的基础知识和使用

1.什么是SpringCloud ​ 什么是微服务? ​ 假如我们需要搭建一个网上购物系统,那么我们需要哪些功能呢?商品中心、订单中心和客户中心等。 ​ 当业务功能较少时,我们可以把这些功能塞到一个SpringBoot项目中来进行管理。但是随…...

人工智能技术的深度解析与推广【人工智能的应用场景】

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…...

md5sum -c

md5sum -c xxx 命令用于验证文件的 MD5 校验和是否匹配。具体来说,-c 选项告诉 md5sum 命令去读取指定文件(通常是一个包含 MD5 校验和的文件),并与实际文件的 MD5 校验和进行比较。 工作原理: 生成校验和文件&#x…...

excel使用笔记

1.工作表1计算工作表2某列的和 假设我们有两个工作表,分别命名为“Sheet1”和“Sheet2”,我们想要求和这两个工作表中A1到A**单元格的数据,可以在任意一个工作表的单元格中输入以下公式: SUM(Sheet1!A1:A10, Sheet2!A1:A10) SUM…...

keepalived+nginx实现web高可用

目录 高可用集群搭建 Keepalived+nginx实现web高可用 一.节点规划 二.基础准备 1.修改主机名 2.关闭防火墙和selinux服务 三.用keepalived配置高可用 1.安装nginx服务 2.修改nginx配置文件 3.启动nginx 4.访问nginx 5.安装keepalived服务 6.编辑配置文件…...

边界层气象:脉动量预报方程展开 | 湍流脉动速度方差预报方程 | 平均湍流动能收支方程推导

写成分量形式 原始式子: ∂ u i ′ ∂ t u ‾ j ∂ u i ′ ∂ x j u j ′ ∂ u ‾ i ∂ x j u j ′ ∂ u i ′ ∂ x j − 1 ρ ‾ ⋅ ∂ p ′ ∂ x i g θ v ′ θ ‾ v δ i 3 f ϵ i j 3 u j ′ v ∂ 2 u i ′ ∂ x j 2 ∂ ( u i ′ u j ′ ‾ ) ∂ x j…...

TOSUN同星TsMaster使用入门——2、使用TS发送报文,使用graphics分析数据等

在第一章里面已经介绍了关于同星工程的创建和最基础的总线分析,接下来看看怎么使用TS发送报文以及图形化分析数据。 目录 一、使用Graphics分析报文信号/变量(对标CANoe Graphics) 二、使用数值窗口统计信号值/变量 三、使用TS发送报文 3…...

【操作系统】实验七:显示进程列表

实验7 显示进程列表 练习目的:编写一个模块,将它作为Linux内核空间的扩展来执行,并报告模块加载时内核的当前进程信息,进一步了解用户空间和内核空间的概念。 7.1 进程 进程是任何多道程序设计的操作系统中的基本概念。为了管理…...

day10 电商系统后台API——接口测试(使用postman)

【没有所谓的运气🍬,只有绝对的努力✊】 目录 实战项目简介: 1、用户管理(8个) 1.1 登录 1.2 获取用户数据列表 1.3 创建用户 1.4 修改用户状态 1.5 根据id查询用户 1.6 修改用户信息 1.7 删除单个用户 1.8 …...

JavaScript ES6+ 语法速通

一、ES6 基础语法 1. let 和 const 声明变量 let:块级作用域,可以重新赋值。const:块级作用域,声明常量,不能重新赋值。 let name Li Hua; name Li Ming; // 可修改const age 21; // age 22; // 报错&#xff0…...

移动端h5自适应rem适配最佳方案

网页开发中,我们常用的单位有如下几个: px:像素固定,无法适配各分辨率的移动设备em: 该单位受父容器影响,大小为父元素的倍数rem: 因为html根元素大小为16px,所以默认 1rem 16px,rem只受根元素…...

2024年使用 Cython 加速 Python 的一些简单步骤

文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 文章有点长,期望您能坚持看…...

EasyExcel设置表头上面的那种大标题(前端传递来的大标题)

1、首先得先引用easyExcel的版本依赖&#xff0c;我那 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency> 2、然后得弄直接的实体类&#xff0c;&…...

【Linux网络编程】第十弹---打造初级网络计算器:从协议设计到服务实现

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、Protocol.hpp 1.1、Request类 1.1.1、基本结构 1.1.2、构造析构函数 1.1.3、序列化函数 1.1.4、反…...

无限弹窗?无限重启?

Windows开机自启目录&#xff1a; "%USERPROFILE%\AppData\Roaming\Microsoft\windows\StartMenu\Programs\Startup" 基于这个和 start 命令&#xff0c; shutdown 命令&#xff0c; 编写 bat 病毒程序。 无限弹窗 echo start cmd > hack.txt echo %0 >>…...

深入详解人工智能机器学习常见算法中的K-means聚类

目录 引言 1. K-means聚类的基本概念 1.1 K-means聚类的定义 1.2 K-means聚类的核心思想 1.3 K-means聚类的目标函数 2. K-means聚类的核心原理 2.1 初始化 2.2 分配 2.3 更新 2.4 迭代 3. K-means聚类的具体实现 3.1 K-means聚类的算法流程 3.2 K-means聚类的Pyt…...

lc146LRU缓存——模仿LinkedHashMap

146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09; 法1&#xff1a; 调用java现有的LinkedHashMap的方法&#xff0c;但不太理解反正都不需要扩容&#xff0c;super(capacity, 1F, true);不行吗&#xff0c;干嘛还弄个装载因子0.75还中途扩容一次浪费时间。 class LRUC…...

全面深入解析:C语言动态库

引言 动态库&#xff08;Dynamic Library&#xff09;是现代软件开发中不可或缺的一部分&#xff0c;它们不仅提高了代码的重用性和维护性&#xff0c;还显著提升了系统的性能和资源利用率。本文将全面探讨C语言中的动态库&#xff0c;从基础概念到高级应用&#xff0c;通过丰…...

运用 SSM 实现垃圾分类系统智能化升级

目 录 摘 要 1 前 言 3 第1章 概述 4 1.1 研究背景 4 1.2 研究目的 4 1.3 研究内容 4 第二章 开发技术介绍 5 2.1Java技术 6 2.2 Mysql数据库 6 2.3 B/S结构 7 2.4 SSM框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行性 10 3.1.3 操作可行性 10 …...