学习MFC编程的先决条件

Bou*_*tor 19 windows mfc

我知道一些C++和C,我现在正在使用的项目是很多MFC编程.有经验的人可以告诉我学习MFC的先决条件.

另外,最好的资料来源是什么?

任何特定的书籍或视频系列?

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

谢谢!

IIn*_*ble 22

+1好问题!

tl; dr:按顺序学习Win32.

到目前为止,MFC最重要的先决条件是对Windows API的有力理解(有时也称为Win32 API).您还需要熟悉C++的一些关键概念并熟悉这些工具.我提出的先决条件清单是:

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

以下是这些步骤的概述,以及其他信息的链接.

1. Windows API:

Windows API通过C接口公开所有服务.因此资源管理往往是繁琐的锅炉板代码.并且在源代码中可见(有时在阅读代码时获得了不可思议的奖励).MFC在很大程度上是围绕Windows API的自动资源管理包装器(和实用程序库),隐藏了大部分资源管理和类型转换.要熟练使用MFC,您必须了解它隐藏的内容.

要开始使用Windows API和所有你需要的是主要组成部分,我会建议的快速纲要theForger的Win32 API的教程(由forgey#winprog成名).它涵盖了消息处理,窗口,控件GDI,并构建了坚实的基础.如果你想投入(花费很多)时间来更详细地探索Windows API,那么迄今为止最好的资源可能仍然是Charles Petzold的编程Windows(不要与托管的Petzold混淆).MSDN也是一个很好的资源,可以获得概述以及特定领域的详细文档,例如:

2.关键C++概念:

MFC是用C++实现的.虽然它早于官方C++标准,但你在那里找不到太多时髦的业务.非常少的模板代码,当然也没有新的C++ 11特性.与基本C++概念的亲密关系将为您带来很长的路要走.

如前所述,MFC在很大程度上是围绕Windows API的资源管理包装器.经常有Windows API的资源和MFC对象之间的直接映射(如HWND:CWnd,或HDC:CDC).如果您了解构造函数,析构函数和对象生命周期,那么几乎所有这些都是在该部门中设置的.

当使用MFC的基于模板的容器(如CMap)时,您将自然地接触到模板.没有太多涉及,只是非常基本的类型参数化来重用容器代码并启用类型安全元素访问.可以在此处找到MFC容器的介绍:集合.

MFC中很少使用异常,主要是在访问文件或序列化数据时.您仍然应该知道如何编写异常安全代码; 您将在非平凡的应用程序中看到异常.可以在MFC中的异常处理中找到概述.

一个不是C++实际部分但在整个MFC中广泛使用的领域是预处理器.无论您的MFC应用程序有多么简单,都会有宏.您必须非常了解预处理器语法以及预处理器的运行方式.

3.工具:

虽然可以单独使用记事本编写MFC应用程序,但这样做肯定不是很有效.纯文本编辑器可能是学习平台的好主意,但是当需要时间来满足里程碑和截止日期时,您肯定会想要使用功能强大的IDE.

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

MFC类向导几乎肯定会生成预处理器代码.它隐藏了大量的复杂性,您需要了解它才能安全使用.使用IDE浏览预处理器宏,尝试在脑海中展开它们,看看是否理解了生成的代码.如果您在解调宏调用时遇到困难,编译器会使用/ P(预处理到文件)编译器选项为您输出预处理的代码.

有时您必须查看或调试MFC源代码.要使源代码可用于源浏览和调试器,您必须设置VC++目录以包含以下内容(如果尚未存在):

$(VCInstallDir)atlmfc\src\mfc
$(VCInstallDir)atlmfc\src\mfcm
$(VCInstallDir)atlmfc\src\atl
Run Code Online (Sandbox Code Playgroud)

根据IDE,可以通过工具 - >选项:项目和解决方案 - > VC++目录或项目设置的属性表来完成.

寻求帮助:虽然MSDN是文档的最佳资源,但MFC部分感觉它处于维护模式并且没有像Windows API文档那么受到关注.如果您发现MFC文档缺少相应的Windows API文档,例如CWnd::OnNcDestroyvs WM_NCDESTROY..后者包含有关Windows接收此消息的顺序的有价值信息.

学习MFC

学习MFC的综合资源是Jeff Prosise 使用MFC编程Windows.虽然它已过时(1999年发布),但这些概念今天仍然有效.它概述了MFC的概念,并深入介绍了实现细节.如果您发现自己正在努力使用生成的(预处理器)代码,那么本书适合您.

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

完整列表可以在Concepts上找到.


dwo*_*dwo 5

学习 MFC 最重要的先决条件是 C++,其次是理解 Windows 的工作原理。

我最喜欢的 MFC 书是David Kruglinski 的Inside Visual C++,他死得太早了。他的上一版涵盖了带有 Visual Studio 6 的 MFC,但概念和大部分内容仍然有效。

要了解 Windows 的工作原理,请参阅“Petzold”书。(Charles Petzold 的 Windows 编程)。