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这样的有难度的编程科目,并且呢,你还学好了,你坚持下来了,那么,你当然在技术上,就会更加地具备竞争力。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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…

WebRTC服务质量(03)- RTCP协议

一、前言: RTCP(RTP Control Protocol)是一种控制协议,与RTP(Real-time Transport Protocol)一起用于实时通信中的控制和反馈。RTCP负责监控和调节实时媒体流。通过不断交换RTCP信息,WebRTC应用…

用户认证系统登录界面

下面是使用HTML和JavaScript实现的一个中文版登录界面&#xff0c;包含登录、注册和修改密码功能。注册成功后会显示提示信息&#xff0c;在登录成功后进入一个大大的欢迎页面。 1.代码展示 <!DOCTYPE html> <html lang"zh-CN"> <head><meta …

uniapp中vuex(全局共享)的应用

一、Vuex概述 1.1 官方解释 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 它采用集中式存储管理 应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化 - Vuex 也集成到 Vue 的官方调试工具 devtools extension&#xff0c;提供了诸…

不能通过 ip 直接访问 共享盘 解决方法

from base_config.config import OpenSMB, SMB import os, time, calendar, requests, decimal, platform, fs.smbfsinfo_dict SMB.EPDI_dict info_dict[host] (FS03,10.6.12.182) info_dict[direct_tcp] True# smb OpenSMB(info_dict)print(ok)# 根据 ip 查询电脑名 impor…

JavaEE初阶——多线程(线程安全-锁)

复习上节内容&#xff08;部分-掌握程度不够的&#xff09; 加锁&#xff0c;解决线程安全问题。 synchronized关键字&#xff0c;对锁对象进行加锁。 锁对象&#xff0c;可以是随便一个Object对象&#xff08;或者其子类的对象&#xff09;&#xff0c;需要关注的是&#xff…

day2 数据结构 结构体的应用

思维导图 小练习&#xff1a; 定义一个数组&#xff0c;用来存放从终端输入的5个学生的信息【学生的信息包含学生的姓名、年纪、性别、成绩】 1>封装函数 录入5个学生信息 2>封装函数 显示学生信息 3>封装函数 删除第几个学生信息&#xff0c;删除后调用显示学…

五、网络层:控制平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

目录 一、导论 二、路由选择算法 2.1 路由&#xff08;route&#xff09;的概念 2.2 网络的图抽象 2.2.1 边和路由的代价 2.2.2 最优化原则 2.3 路由的原则 2.4 路由选择算法的分类 2.5 link state 算法 2.5.1 LS路由工作过程 2.5.2 链路状态路由选择&#xff08;lin…

内网是如何访问到互联网(H3C源NAT)

H3C设备NAPT配置 直接打开29篇的拓扑&#xff0c;之前都配置好了 「模拟器、工具合集」复制整段内容 链接&#xff1a;https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil 现在是出口路由器可以直接访问61.128.1.1&#xff0c;下面的终端访问不了&#xff0c;需要做NAPT源…

生产者-消费者模型

目录 生产者-消费者模型介绍 生产者-消费者模型优点 生产者-消费者之间的关系 基于阻塞队列实现生产者-消费者模型 基于环形队列实现生产者-消费者模型 生产者-消费者模型介绍 ● 计算机中的生产者和消费者本质都是线程/进程 ● 生产者和消费者不直接通讯&#xff0c;而是…

.NET6 WebAPI从基础到进阶--朝夕教育

1、环境准备 1. Visual Studio 2022 2. .NET6 平台支持 3. Internet Information Services 服务器&#xff08; IIS &#xff09; 4. Linux 服务器 【 CentOS 系统】 ( 跨平台部署使用 ) 5. Linux 服务器下的 Docker 容器&#xff08; Docker 部署使用&#xff09; …

Linux系统中进程的概念 -- 冯诺依曼体系结构,操作系统,进程概念,查看进程,进程状态,僵尸进程,孤儿进程,进程优先级,进程切换,进程调度

目录 1. 冯诺依曼体系结构 2. 操作系统(Operator System) 2.1 操作系统的概念 2.2 设计操作系统(OS)的目的 2.3 系统调用和库函数概念 3. 进程 3.1 进程的基本概念与基本操作 3.1.1 进程的基本概念 3.1.2 PCB -- 描述进程 3.1.3 task_ struct 3.1.4 查看进程 3.1.5…

4.redis通用命令

文章目录 1.使用官网文档2.redis通用命令2.1set2.2get2.3.redis全局命令2.3.1 keys 2.4 exists2.5 del(delete)2.6 expire - (失效时间)2.7 ttl - 过期时间2.7.1 redis中key的过期策略2.7.2redis定时器的实现原理 2.8 type2.9 object 3.生产环境4.常用的数据结构4.1认识数据类型…

Web项目图片视频加载缓慢/首屏加载白屏

Web项目图片视频加载缓慢/首屏加载白屏 文章目录 Web项目图片视频加载缓慢/首屏加载白屏一、原因二、 解决方案2.1、 图片和视频的优化2.1.1、压缩图片或视频2.1.2、 选择合适的图片或视频格式2.1.3、 使用图片或视频 CDN 加速2.1.4、Nginx中开启gzip 三、压缩工具推荐 一、原因…

成人教育专升本-不能盲目选择

成人教育专升本都有哪些方法?在当今时代&#xff0c;学历往往是打开职业机会的敲门砖&#xff0c;成人教育专升本成为突破职业发展瓶颈的途径&#xff0c;然而&#xff0c;你是否清楚它们之间究竟有着怎样的区别呢? 一、成人教育专升本&#xff0c;成人高考 1、考试形式 成人…

repmgr集群部署-PostgreSQL高可用保证

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

【前端】 canvas画图

一、场景描述 利用js中的canvas画图来画图&#xff0c;爱心、动画。 二、问题拆解 第一个是&#xff1a;canvas画图相关知识。 第二个是&#xff1a;动画相关内容。 三、知识背景 3.1 canvas画图相关内容 canvas画图的基本步骤 获取页面上的canvas标签对象获取绘图上下文…

深度学习——激活函数、损失函数、优化器

深度学习——激活函数、损失函数、优化器 1、激活函数1.1、一些常见的激活函数1.1.1、sigmoid1.1.2、softmax1.1.3、tanh1.1.4、ReLU1.1.5、Leaky ReLU1.1.6、PReLU1.1.7、GeLU1.1.8、ELU 1.2、激活函数的特点1.2.1、非线性1.2.2、几乎处处可微1.2.3、计算简单1.2.4、非饱和性1…

硬件设计-电源轨噪声对时钟抖动的影响

目录 定义 实际案例 总结 定义 首先了解抖动的定义&#xff0c;在ITU-T G.701中有关抖动的定义如下&#xff1a; 数字信号重要瞬间相对于其理想时间位置的短期非累积变化。 抖动是时钟或数据信号时序的短期时域变化。抖动包括信号周期、频率、相位、占空比或其他一些定时特…

搭建自己的wiki知识库(重新整理)

写在前面&#xff1a; 之前写过一篇&#xff0c;因为这次修改的内容比较多&#xff0c;所以不想在原基础上修改了&#xff0c;还是重新整理一篇吧。搭建wiki知识库&#xff0c;可以使用在线文档&#xff0c;如xx笔记、xx文档、xx博客、git仓库&#xff08;如&#xff1a;GitHu…