【问题标题】:Prerequisites for learning MFC programming [closed]学习 MFC 编程的先决条件
【发布时间】:2013-08-12 11:18:15
【问题描述】:

我知道一点 C++ 和 C,而我现在正在处理的项目是大量的 MFC 编程。有经验的能告诉我学习MFC的先决条件吗?

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

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

我知道这个问题太笼统了,但答案可能对我(或任何正在研究 MFC 的人)有很大帮助

谢谢!

【问题讨论】:

  • 多年前,我从 MFC 示例和技术说明中学到了很多东西。

标签: windows mfc


【解决方案1】:

+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's Win32 API Tutorialforgey#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 : CWndHDC : 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,这可以通过工具 -> 选项:项目和解决方案 -> VC++ 目录 或项目设置的属性表来完成。

寻求帮助:虽然 MSDN 是最好的文档资源,但 MFC 部分感觉像是处于维护模式,不像 Windows API 文档那样受到关注。如果您发现 MFC 文档缺少查找相应的 Windows API 文档,例如 CWnd::OnNcDestroyWM_NCDESTROY。后者包含有关窗口接收此消息的顺序的有价值信息。

学习 MFC

学习 MFC 的综合资源是 Jeff Prosise'Programming Windows with MFC。虽然它已经过时(1999 年发布),但这些概念在今天仍然有效。它概述了 MFC 的概念并深入探讨了实现细节。如果您发现自己在生成的(预处理器)代码方面遇到困难,这本书就是为您准备的。

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

完整列表请访问Concepts

【讨论】:

  • 这本书可能已经过时了,但 MFC 也是如此。我只想补充一件事,在现代代码中不需要使用 MFC 容器,因为标准库就足够了。
  • @Mark 关于 MFC 容器的好建议,确实没有必要在新代码中使用它们。尽管如此,MFC 几乎可以肯定地暗示您正在处理现有的代码库,无论您现在是否使用 MFC 容器,您都会接触到它们。我会看看是否可以改写该段落以包含该信息。
  • 不幸的是伪造的页面已经消失了。
  • @sergiol:所有页面都可以从我这里访问。您无法访问哪个网址?
  • @IInspectable: forger.ca
【解决方案2】:

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

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

要了解 Windows 的工作原理,“Petzold”是一本书。 (Charles Petzold 的 Windows 编程)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多