MFC概述

微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

特性

Visual C++包含MFC应用程序向导,可用于兼容MFC的应用程序[1]。在ATL程序中也可以手动添加MFC支持[2]。在向导中有各种选项以定制生成的程序的功能,例如界面风格、语种、数据库开发支持、打印支持、自动化支持、ActiveX支持、网络支持、基于HTML的帮助文档支持等等。

在COM开发方面,相对于ATL来说,MFC的组件比较大,代码不够短小精悍,但是支持的功能也比较多,例如有对ActiveX Document的封装类。

在界面开发方面,MFC提供对消息循环的封装,使用消息映射来避免虚函数的开销。MFC也提供常用Windows通用控件的封装类。

MFC扩展DLL的接口使得MFC程序可以直接调用MFC扩展DLL中的MFC类。MFC也支持在标准DLL中被使用。

发展

MFC是在1992年随微软的Microsoft C/C++ 7.0编译器发布的,用于面向16位Windows的软件开发。起初,MFC是作为一个应用程序框架开发的,所以定名为Application Framework eXtensions(AFX)。

随着Visual Basic和Visual Studio .NET的发布,曾经一度被微软重点推荐的MFC被Visual Basic .NET、C#、Windows Forms抢走了不少市场份额,但是MFC继续在非托管软件开发中占据重要地位。在托管开发方面,MFC中也包括对Windows Forms和托管/非托管互操作的封装。微软在Windows Vista和Windows 7发布之后在MFC中增加了对新的Windows API支持。

MFC的优点

MFC的主要优点是可以用面向对象的方法来调用Windows API,以及应用程序开发的便捷。MFC将很多应用程序开发中常用的功能自动化,并且提供了文档框架视图结构和活动文档这样的便于自定义的应用程序框架。同时,在Visual C++内部也内建了很多对MFC的例如类向导这样的支持以减少软件开发的时间,使用类向导可以生成从hello world这样的简单程序到活动文档服务器这样的复杂程序。MFC的消息映射机制也避免了使用性能较低的庞大虚函数表。

MFC的缺点

虽然MFC的源代码对用户是完全开放的,但是MFC的一些封装过程过于复杂,以致于新用户很难迅速掌握MFC的应用程序框架,以及在调试中定位问题的位置。同时,很多MFC对象不是线程安全的,致使在跨线程访问MFC对象时需要编写额外的代码。另外,MFC的很多类依赖于应用程序向导生成的代码,使得在使用Visual C++中其他类型的应用程序向导生成的工程中添加MFC支持的难度大大增加。

第三方支持

很多商用类库在MFC的基础上进一步实现了皮肤、渐变风格、多顶层窗口程序、属性列表等较受欢迎的功能;同时,在C++在线社区中,很大一部分开放的源代码也是基于MFC的。

文章列表

MFC程序实现控制台输出的方式

  • 发布于
  • 2016-10-29 09:03:30
  • 0次阅读
  • 0条评论
MessageBox显示一个矩阵是多么不方便,而且如果是一个大型程序,编写计算部分内容的人员可能对各种MFC相关的API并不熟悉,在他们的代码中或许已经使用了大量的cout语句,用以输出中间计算过程或者错误信息,这些内容如何使用MessageBox展示呢?由此可见,使用cout在许多MFC程序中显得非常必要,通过搜集整理,本文总结了两种在MFC应用程序中使用cout的方法...查看全文>>

VC打开并缩放显示位图(.BMP)文件的方法

  • 发布于
  • 2015-01-18 09:32:52
  • 0次阅读
  • 0条评论
最近一个项目需要进行位图操作,网上找了一大堆资料,但发现都是以前VC6.0版本的抄来抄去,而且大多数使用了复杂的位图结构。所以自己通过查阅MSDN上面的资料,实现了相对简单的方案,本方案使用了MFC提供的来CBitmap,使用较少的代码便实现了VC打开并显示位图(BMP)文件到对话框指定的控件中...查看全文>>

MFC屏蔽ESC按键关闭对话框

  • 发布于
  • 2014-08-16 12:16:14
  • 0次阅读
  • 0条评论
想必大家都都知道,MFC实现的对话框在默认情况下按ESC键会将对话框关闭,但有时候这不是我们想要的效果,我们希望用户按下ESC键的时候不直接关闭对话框,或者在关闭之前给予用户提示。本文介绍该功能的实现方法...查看全文>>

详解VC编程实现不规则窗体

  • 发布于
  • 2014-08-10 09:53:34
  • 0次阅读
  • 0条评论
Windows 窗体都位于一个称为“region”中,窗体的大小如果超出“region”的范围,windows 会自动裁剪超出"region"范围那部分的窗体,使其不可见。所以,要创建不规则窗体有两个步骤:第一步就是创建不规则"region".第二步就是将窗体放到创建的“region”中...查看全文>>

VC编程之图像处理类CBitmap的用法

  • 发布于
  • 2014-08-10 09:18:37
  • 0次阅读
  • 0条评论
使用VC进行图像处理的时候,CBitmap类为我们提供了丰富的位图处理函数,本文总结了该类的相关函数和常用使用方法,包括加载位图,显示位图,析构CBitmap资源以及在内存中保存位图等内容...查看全文>>

VC++模式对话框和非模式对话框剖析

  • 发布于
  • 2014-07-29 22:32:46
  • 0次阅读
  • 0条评论
在VC中对话框有模式对话框和非模式对话框两种,模式对话框在对话框返回之前用户只能与该对话框交互,而非模式对话框则没有这个限制。以下用基于Visual Studio 2008的MFC为例,通过实例介绍VC的模式对话框和非模式对话框在创建过程中的区别...查看全文>>

Visual C++若干编程技巧

  • 发布于
  • 2014-07-12 22:44:45
  • 0次阅读
  • 0条评论
实际工作中,汲取前辈总结的经验可以使我们大大提高学习效率。Visual C++是一种面向对象的可视化编程工具,它提供的AppWizard能自动生成应用程序的框架,可以大大减轻编程的工作量。本文主要介绍网上搜集的一些编程技巧...查看全文>>
pagelist