学习MFC编程的先决条件

我知道一些C ++和C,我现在正在使用的项目是一大堆MFC编程。 有人可以告诉我学习MFC的先决条件吗?

另外,什么是最好的学习来源?

任何特定的书籍或video系列?

我知道这个问题太笼统了,但答案可能会帮助我(或任何正在挖掘MFC的人)很多

谢谢!

+1好问题!

tl; dr :按此顺序学习Win32。

到目前为止,MFC最重要的先决条件是对Windows API (有时也称为Win32 API )的深入理解。 您还需要熟悉C ++的一些关键概念,并熟悉这些工具。 我build议的先决条件列表是:

  1. 获取Windows API开发的坚实背景。
  2. 熟悉C ++的相关概念。
  3. 学习工具。

以下是这些步骤的简要说明,并附有其他信息的链接。

1. Windows API:

Windows API通过C接口公开所有服务。 因此资源pipe理往往是繁琐的锅炉板码。 在源代码中可见(有时在阅读代码时是一个难以置信的奖励)。 MFC在很大程度上是围绕Windows API的自动化资源pipe理包装器(和实用程序库),隐藏了大部分资源pipe理和types转换。 要在MFC中stream利,你必须明白它隐藏的内容。

要开始使用Windows API,并且只需要简要介绍一下主要组件,我会推荐使用Forger的Win32 API教程 (通过伪造 #winprog声誉)。 它涵盖了消息处理窗口控件GDI ,并构build了坚实的基础。 如果你想投入(花费时间)更详细地探索Windows API,迄今为止最好的资源可能仍然是Charles Petzold的Programming Windows (而不是与Managed Petzold混淆)。 MSDN也是一个很好的资源来获得一个概述以及具体的区域的详细的文档,如:

  • 消息处理
  • 用户交互
  • Windows控件

2.关键的C ++概念:

MFC是用C ++来实现的。 虽然它早于官方的C ++标准,但在那里你不会发现太多时髦的事情。 非常less的模板代码,当然也没有新的C ++ 11function。 与基本的C ++概念的亲密关系将会给你带来很大的帮助。

如前所述,MFC在很大程度上是Windows API的资源pipe理包装。 通常Windows API资源和MFC对象(如HWNDCWndHDCCDC )之间有直接映射。 如果您理解构造函数,析构函数和对象生命周期,那么您几乎全部都在该部门中设置。

当使用MFC的基于模板的容器(如CMap )时,您将自然地接触到模板。 没有太多的参与,只是非常基本的types参数化来重用容器代码并启用types安全的元素访问。 对MFC容器的介绍可以在这里find: 集合 。

在MFC中很less使用exception,主要是访问文件或序列化数据时。 您仍应该知道如何编写exception安全代码; 你会在非平凡的应用程序中看到exception。 可以在MFC的exception处理中find一个概述。

一个不是C ++的一部分,但在整个MFC中广泛使用的领域是预处理器。 不pipe你的MFC应用程序有多么微不足道,都会有macros。 您必须非常了解预处理器的语法以及预处理器的运行方式。

3.工具:

虽然可以使用记事本编写MFC应用程序,但这样做效率肯定不高。 纯文本编辑器可能是学习平台的一个好主意,但是当需要满足里程碑和截止date时,您肯定会想要使用强大的IDE。

MFC几乎意味着使用Visual Studio,我会假设这就是你正在使用的。 如果您正在使用VS6或VS2010(或更高版本),您将有权访问MFC类向导 。 这是一个你将经常使用的工具。 要安全地操作它,您必须熟悉它为您生成的代码。 玩弄它,检查生成的代码,并尝试build立它的心理模型。 如果没有意义,你应该稍后再回来。

MFC类向导几乎肯定会生成预处理器代码。 它隐藏了大量的安全使用需要了解的复杂性。 使用IDE浏览预处理器macros,尝试在您的脑海中展开它们,然后查看是否理解了所产生的代码。 如果您无法取消调用macros调用,编译器会使用/ P(预处理到文件)编译器选项为您输出预处理的代码。

偶尔你必须查看或debugging到MFC源代码。 要使源代码可用于源浏览和debugging器,您必须设置VC ++目录以包含以下(如果尚不存在):

 $(VCInstallDir)atlmfc\src\mfc $(VCInstallDir)atlmfc\src\mfcm $(VCInstallDir)atlmfc\src\atl 

根据IDE,可以通过工具 – >选项:项目和解决scheme – > VC ++目录或项目设置的属性表完成。

寻找帮助:虽然MSDN是最好的文档资源,但MFC部分感觉就像处于维护模式,并没有像Windows API文档那样引起足够的重视。 如果您发现缺lessMFC文档,请查找相应的Windows API文档,例如CWnd::OnNcDestroyWM_NCDESTROY 。 后者包含有关Windows收到此消息的顺序的有价值的信息。

学习MFC

用于学习MFC的综合资源是Jeff Prosise的“ 使用MFC编程Windows” 。 虽然它的date(1999年发布),但这些概念今天依然有效。 它概述了MFC的概念并深入到实现细节中。 如果您发现自己在生成的(预处理器)代码中挣扎,本书就是为您准备的。

作为一个有价值的在线资源,MSDN提供了有关MFC开发任何方面的信息。 主要概念包括:

  • 消息处理和映射
  • 用户界面元素
    • 视窗
    • 对话框
  • 在MFC中的序列化

Concepts可以find完整的列表。

学习MFC最重要的先决条件是C ++,接下来是Windows的工作方式。

我最喜欢的MFC书是David Kruglinski的Inside Visual C ++ ,他死得太早了。 他的最后一个版本包含了Visual Studio 6的MFC,但其概念和大部分内容仍然有效。

要了解Windows如何工作,“Petzold”就是本书。 (由Charles Petzold编写的Windows程序)。