我知道一些C ++和C,我现在正在使用的项目是一大堆MFC编程。 有人可以告诉我学习MFC的先决条件吗?
另外,什么是最好的学习来源?
任何特定的书籍或video系列?
我知道这个问题太笼统了,但答案可能会帮助我(或任何正在挖掘MFC的人)很多
谢谢!
+1好问题!
tl; dr :按此顺序学习Win32。
到目前为止,MFC最重要的先决条件是对Windows API (有时也称为Win32 API )的深入理解。 您还需要熟悉C ++的一些关键概念,并熟悉这些工具。 我建议的先决条件列表是:
以下是这些步骤的简要说明,并附有其他信息的链接。
1. Windows API:
Windows API通过C接口公开所有服务。 因此资源管理往往是繁琐的锅炉板码。 在源代码中可见(有时在阅读代码时是一个令人难以置信的奖金)。 MFC在很大程度上是围绕Windows API的自动化资源管理包装器(和实用程序库),隐藏了大部分资源管理和类型转换。 要在MFC中流利,你必须明白它隐藏的内容。
要开始使用Windows API,并且只需要简要介绍一下主要组件,我会推荐使用Forger的Win32 API教程 (通过伪造 #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容器的介绍可以在这里找到: 集合 。
在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
根据IDE,可以通过工具 – >选项:项目和解决方案 – > VC ++目录或项目设置的属性表完成。
寻找帮助:虽然MSDN是最好的文档资源,但MFC部分感觉就像处于维护模式,并没有像Windows API文档那样引起足够的重视。 如果您发现缺少MFC文档,请查找相应的Windows API文档,例如CWnd::OnNcDestroy
与WM_NCDESTROY
。 后者包含有关Windows收到此消息的顺序的有价值的信息。
学习MFC
用于学习MFC的综合资源是Jeff Prosise的“ 使用MFC编程Windows” 。 虽然它的日期(1999年发布),但这些概念今天依然有效。 它概述了MFC的概念并深入到实现细节中。 如果您发现自己在生成的(预处理器)代码中挣扎,本书就是为您准备的。
作为一个有价值的在线资源,MSDN提供了有关MFC开发任何方面的信息。 主要概念包括:
Concepts可以找到完整的列表。
学习MFC最重要的先决条件是C ++,接下来是Windows的工作方式。
我最喜欢的MFC书是David Kruglinski的Inside Visual C ++ ,他死得太早了。 他的最后一个版本包含了Visual Studio 6的MFC,但其概念和大部分内容仍然有效。
要了解Windows如何工作,“Petzold”就是这本书。 (由Charles Petzold编写的Windows程序)。