+1 好问题!
tl;dr:学习Win32 - 按此顺序。
到目前为止,MFC 最重要的先决条件是对视窗应用程序接口(有时也称为Win32 API)。您还需要熟悉 C++ 的一些关键概念并熟悉这些工具。我建议的先决条件列表是:
- 获得 Windows API 开发的扎实背景。
- 熟悉C++的相关概念。
- 学习工具。
以下是这些步骤的概要,以及指向其他信息的链接。
1.Windows API:
Windows API 通过 C 接口公开所有服务。因此,资源管理通常是乏味的样板代码。并且在源代码中可见(有时在阅读代码时会带来难以置信的好处)。 MFC 在很大程度上是围绕 Windows API 的自动化资源管理包装器(和实用程序库),隐藏了大部分资源管理和类型转换。要熟练使用 MFC,您必须了解它隐藏的内容。
要开始使用 Windows API,您所需要的只是快速概述我推荐的主要组件theForger 的 Win32 API 教程 (by forgey of #winprog名誉)。它涵盖消息处理, 窗口化, Controls,以及GDI,并打下坚实的基础。如果您想投入(值得)时间来更详细地探索 Windows API,那么迄今为止最好的资源可能仍然是 Charles Petzold 的编程窗口(不要与管理佩措尔德)。 MSDN 也是一个很好的资源,可以获取特定领域的概述和详细文档,例如:
2. C++ 关键概念:
MFC是用C++实现的。虽然它早于官方 C++ 标准,但您不会在其中发现太多时髦的业务。模板代码非常少,当然也没有新奇的 C++11 功能。熟悉基本的 C++ 概念将使您受益匪浅。
如前所述,MFC 在很大程度上是 Windows API 的资源管理包装器。 Windows API 资源和 MFC 对象之间通常存在直接映射(例如HWND : CWnd, or HDC : CDC)。如果您了解构造函数、析构函数和对象生命周期,那么您就已经在该领域做好了准备。
当使用 MFC 的基于模板的容器时(例如CMap)您自然会接触到模板。其中没有涉及太多内容,只是非常基本的类型参数化以重用容器代码并启用类型安全的元素访问。 MFC容器的介绍可以在这里找到:收藏.
MFC 中很少使用异常,主要是在访问文件或序列化数据时。您仍然应该知道如何编写异常安全代码;您将在重要的应用程序中看到异常。概述可以在以下位置找到:MFC 中的异常处理.
预处理器实际上并不是 C++ 的一部分,但在整个 MFC 中广泛使用。无论您的 MFC 应用程序多么琐碎,都会有宏。您必须非常了解预处理器语法以及预处理器的运行方式。
3.工具:
虽然可以单独使用记事本编写 MFC 应用程序,但这样做的效率肯定不是很高。对于学习该平台来说,纯文本编辑器可能是一个好主意,但是当需要满足里程碑和截止日期时,您肯定会想要使用功能强大的 IDE。
MFC 几乎暗示了 Visual Studio 的使用,我假设您正在使用 Visual Studio。如果您使用的是 VS6 或 VS2010(或更高版本),您将可以访问MFC 类向导。这是您将经常使用的工具。为了安全地操作它,您必须熟悉它为您生成的代码。尝试一下,检查生成的代码,并尝试构建它的心理模型。如果还没有意义,你应该稍后再回来。
MFC 类向导几乎肯定会生成预处理器代码。它隐藏着巨大的复杂性,您需要了解这些复杂性才能安全使用。使用 IDE 浏览预处理器宏,尝试在您的脑海中扩展它们,并查看您是否理解生成的代码。如果您在整理宏调用时遇到困难,请让编译器使用以下命令输出预处理代码:/P(预处理文件)编译器选项。
有时您必须查看或调试 MFC 源代码。要使源代码可用于源代码浏览和调试器,您必须设置VC++目录包括以下内容(如果尚不存在):
$(VCInstallDir)atlmfc\src\mfc
$(VCInstallDir)atlmfc\src\mfcm
$(VCInstallDir)atlmfc\src\atl
根据 IDE,这可以通过以下方式完成工具 -> 选项:项目和解决方案 -> VC++ 目录或项目设置的属性表。
寻求帮助:虽然 MSDN 是最好的文档资源,但 MFC 部分感觉像是处于维护模式,并且没有像 Windows API 文档那样受到那么多关注。如果您发现 MFC 文档缺少,请改为查找相应的 Windows API 文档,例如CWnd::OnNcDestroy vs. WM_NCDESTROY。后者包含有关窗口接收此消息的顺序的有价值的信息。
学习在线课程,掌握职场技能
Jeff Prosise 是学习 MFC 的综合资源使用 MFC 进行 Windows 编程。虽然它已经过时(1999 年发布),但这些概念至今仍然有效。它概述了 MFC 的概念并深入探讨了实现细节。如果您发现自己在生成的(预处理器)代码中遇到困难,那么这本书适合您。
作为宝贵的在线资源,MSDN 提供了有关 MFC 开发的几乎所有方面的信息。主要概念包括:
- 消息处理和映射
-
User Interface Elements
- MFC 中的序列化
完整列表可在以下位置找到:Concepts.