我知道一些C ++和C,我现在正在使用的项目是很多MFC编程。有经验的人可以告诉我学习MFC的先决条件。
此外,最好的资料来源是什么?
任何特定的书籍或视频系列?
我知道这个问题太笼统但是答案可能对我(或任何正在挖掘MFC的人)有很大帮助
谢谢!
答案 0 :(得分:22)
+1好问题!
tl;dr:按顺序学习Win32。
到目前为止,MFC最重要的先决条件是对Windows API(有时也称为 Win32 API )的充分理解。您还需要熟悉C ++的一些关键概念并熟悉这些工具。我提出的先决条件清单是:
以下是这些步骤的概述,以及其他信息的链接。
<强> 1。 Windows API:
Windows API通过C接口公开所有服务。因此资源管理往往是繁琐的锅炉板代码。并且在源代码中可见(有时在阅读代码时获得了不可思议的奖励)。 MFC在很大程度上是围绕Windows API的自动资源管理包装器(和实用程序库),隐藏了大部分资源管理和类型转换。为了熟练使用MFC,你必须了解它隐藏的内容。
要开始使用Windows API,您只需快速了解我建议theForger's Win32 API Tutorial(forgey成名#winprog)的主要组件。它涵盖了消息处理,窗口,控件和 GDI ,并构建了坚实的基础。如果你想投入(花费很多)时间来更详细地探索Windows API,那么迄今为止最好的资源可能仍然是Charles Petzold Programming Windows(不要与managed Petzold混淆)。 MSDN也是一个很好的资源,可以获得概述以及特定领域的详细文档,如:
<强> 2。关键C ++概念:
MFC是用C ++实现的。虽然它早于官方C ++标准,但你在那里找不到太多时髦的生意。非常少的模板代码,当然也没有新的C ++ 11特性。与基本C ++概念的亲密关系将为您提供很长的路要走。
如前所述,MFC在很大程度上是围绕Windows API的资源管理包装器。通常,Windows API资源和MFC对象之间存在直接映射(例如HWND
:CWnd
或HDC
:CDC
)。如果您了解构造函数,析构函数和对象的生命周期,那么您几乎可以在该部门中进行设置。
当使用MFC的基于模板的容器(如CMap
)时,您自然会接触到模板。没有太多涉及,只是非常基本的类型参数化来重用容器代码并启用类型安全的元素访问。可在此处找到MFC容器简介:Collections。
MFC中很少使用异常,主要是在访问文件或序列化数据时。您仍然应该知道如何编写异常安全代码;您将在非平凡的应用程序中看到异常。可以在Exception Handling in MFC找到概述。
一个不是C ++实际部分但在整个MFC中广泛使用的领域是预处理器。无论您的MFC应用程序有多么简单,都会有宏。您必须非常了解预处理器语法以及预处理器的运行方式。
第3。工具:强>
虽然可以单独使用记事本编写MFC应用程序,但这样做肯定不是很有效。纯文本编辑器可能是学习平台的好主意,但是当需要满足里程碑和截止日期时,您肯定会想要使用功能强大的IDE。
MFC几乎意味着使用Visual Studio,我会假设你正在使用它。如果您使用的是VS6或VS2010(或更高版本),则可以访问MFC Class Wizard。这是您经常使用的工具。要安全地操作它,您必须熟悉它为您生成的代码。玩弄它,检查生成的代码,并尝试构建它的心理模型。如果它没有意义,你应该稍后再回来。
MFC类向导几乎肯定会生成预处理器代码。它隐藏了大量的复杂性,您需要了解它才能安全使用。使用IDE浏览预处理器宏,尝试在脑海中展开它们,看看是否理解了生成的代码。如果您在解调宏调用时遇到困难,编译器会使用/P (Preprocess to a File)编译器选项为您输出预处理代码。
有时您必须查看或调试MFC源代码。要使源代码可用于源浏览和调试器,您必须设置 VC ++目录以包含以下内容(如果尚未存在):
$(VCInstallDir)atlmfc\src\mfc
$(VCInstallDir)atlmfc\src\mfcm
$(VCInstallDir)atlmfc\src\atl
根据IDE的不同,这可以通过工具 - &gt;完成。选项:项目和解决方案 - &gt; VC ++目录或项目设置的属性表。
寻求帮助:虽然MSDN是文档的最佳资源,但MFC部分感觉它处于维护模式并且没有像Windows API文档那样受到关注。如果您发现MFC文档缺少相应的Windows API文档,例如CWnd::OnNcDestroy
与WM_NCDESTROY
。后者包含有关Windows接收此消息的顺序的有价值信息。
学习MFC
学习MFC的综合资源是Jeff Prosise&#39; Programming Windows with MFC。虽然它已过时(1999年发布),但这些概念今天仍然有效。它概述了MFC的概念,并深入介绍了实现细节。如果您发现自己正在努力使用生成的(预处理器)代码,那么本书适合您。
作为一种有价值的在线资源,MSDN提供有关MFC开发的任何方面的信息。主要概念包括:
可在Concepts找到完整列表。
答案 1 :(得分:4)
学习MFC最重要的先决条件是C ++,然后是了解Windows的工作方式。
我最喜欢的MFC书是David Kruglinski的 Inside Visual C ++ ,他过早地去世了。他的上一版涵盖了使用Visual Studio 6的MFC,但概念和大部分内容仍然有效。
要了解Windows的工作原理,“Petzold”就是 一书。 (Charles Petzold的Windows编程)。