第一部分:MFC 与 VS2008 简介
什么是 MFC?
MFC (Microsoft Foundation Classes) 是一个 C++ 类库,它对 Windows API 进行了封装,使用 MFC 开发 Windows 应用程序,可以让你:
- 使用面向对象的方式:将窗口、菜单、对话框等看作对象,通过继承和重写函数来修改其行为。
- 提高开发效率:MFC 提供了大量预定义的类(如
CWnd、CDialog、CDC等),简化了复杂的 Windows API 调用。 - 支持文档/视图架构:这是 MFC 的核心设计模式,非常适合开发具有数据管理和显示分离的应用程序,如记事本、Photoshop 等。
为什么是 VS2008?
Visual Studio 2008 是一个非常经典且稳定的 C++ 开发环境,虽然它比较老旧,但足以用来学习和理解 MFC 的基本原理,对于初学者来说,一个功能齐全但界面相对简单的 IDE 是有益的。
第二部分:开发环境准备
-
安装 Visual Studio 2008:
- 确保你已经安装了 Visual Studio 2008 Professional 或更高版本(Express 版本对 MFC 的支持可能不完整)。
- 在安装时,请确保勾选了 “Visual C++” 组件,并确保包含了 “MFC 支持”。
-
启动 VS2008:
打开 Visual Studio 2008。
第三部分:创建第一个 MFC 应用程序 (Hello, MFC!)
我们将创建一个基于对话框的最简单 MFC 应用程序。
步骤 1:创建新项目
- 在 VS2008 中,点击菜单栏的
文件(File)->新建(New)->项目(Project)...。 - 在弹出的 “新建项目” 对话框中:
- 左侧选择
Visual C++。 - 中间选择
MFC 应用程序。 - 在下方输入项目名称,
HelloMFC,并选择一个位置来保存项目。 - 点击
确定。
- 左侧选择
步骤 2:MFC 应用程序向导设置
接下来会弹出 “MFC 应用程序向导”,我们一步步设置:
-
概述:
- 确保选择了
应用程序类型为基于对话框。 - 在
复合文档支持中选择无。 - 其他选项保持默认即可。
- 点击
下一步。
- 确保选择了
-
应用程序类型:
- 这里我们保持
基于对话框不变。 - 点击
下一步。
- 这里我们保持
-
文档模板字符串:
- 这些是应用程序的标题等基本信息,可以暂时忽略。
- 点击
下一步。
-
高级功能:
公共控件:可以勾选一些,如ActiveX 控件、属性表等,但我们先保持默认。MFC 的使用:这是最重要的选项,对于初学者,选择在共享 DLL 中使用 MFC,这意味着 MFC 库不会链接到你的可执行文件中,而是作为 DLL 文件在运行时加载,这样可以减小.exe文件的大小。- 点击
下一步。
-
生成的类:
- 这里会显示向导将要生成的类,默认情况下,它会创建一个主对话框类
CHelloMFCDlg。 - 点击
完成。
- 这里会显示向导将要生成的类,默认情况下,它会创建一个主对话框类
步骤 3:理解生成的项目结构
向导为我们创建了一个完整的项目,在 解决方案资源管理器 窗口中,你可以看到:
HelloMFC.cpp: 应用程序入口点WinMain所在的文件。HelloMFCDlg.cpp/HelloMFCDlg.h: 主对话框类的实现和头文件,这是我们将要主要修改的地方。Resource.h: 资源文件的头文件,包含了所有资源的 ID 定义。res文件夹: 包含了应用程序的资源文件,如对话框模板、图标、菜单等。
步骤 4:编译并运行
- 按下
F5键,或者点击工具栏上的本地 Windows 调试器按钮。 - VS2008 会编译你的项目,然后运行程序,你应该会看到一个简单的对话框窗口,上面有一个 “OK” 按钮。
恭喜!你已经成功创建了你的第一个 MFC 应用程序!
第四部分:MFC 核心概念入门
消息映射
这是 MFC 的基石,Windows 是一个“消息驱动”的操作系统,你的窗口会不断地接收来自系统或其他应用程序的消息(如鼠标点击、键盘按下、窗口重绘等)。
MFC 使用 消息映射宏 将消息和对应的处理函数连接起来。
DECLARE_MESSAGE_MAP(): 在类的头文件(.h)中声明该类使用消息映射。BEGIN_MESSAGE_MAP()/END_MESSAGE_MAP(): 在类的实现文件(.cpp)中定义消息映射的范围。ON_COMMAND(): 将菜单命令或按钮点击消息与一个函数关联起来。ON_BN_CLICKED(): 专门用于按钮点击的宏。
对话框与控件
我们的主窗口就是一个 CDialog 对象,上面的按钮、文本框等都是控件。
- 为控件添加变量:
- 在对话框设计器中,双击一个控件(比如那个 "OK" 按钮)。
- VS2008 会自动为你创建一个按钮点击事件处理函数,并跳转到代码中,这背后就是
ON_BN_CLICKED消息映射。 - 右键点击控件,选择
添加变量(Add Variable)...,可以为控件创建一个成员变量,方便在代码中访问和修改它。
文档/视图架构
虽然我们当前的项目是基于对话框的,没有使用文档/视图架构,但了解它很重要。
- 文档: 负责管理应用程序的数据,它不关心数据如何显示,只负责数据的存储和加载。
- 视图: 负责显示文档的数据,并处理用户与数据的交互(如鼠标拖动选择)。
- 框架窗口: 包含视图,并提供菜单、工具栏等用户界面元素。
这种分离使得你可以为同一份数据创建多种显示方式(一个表格视图和一个图表视图)。
第五部分:实战练习 - 为对话框添加按钮和功能
让我们来修改 HelloMFC 程序,添加一个按钮,点击后改变对话框的标题。
步骤 1:添加一个新按钮
- 在
解决方案资源管理器中,找到并双击HelloMFC.rc文件。 - 这会打开
资源视图,展开Dialog项,双击IDD_HELLOMFC_DIALOG。 - 你会看到对话框的设计器,从右侧的
工具箱中拖拽一个Button控件到对话框上。 - 选中这个新按钮,在右下角的
属性窗口中:- 将其
ID修改为IDC_CHANGE_TITLE(ID 必须以IDC_开头)。 - 将其
Caption修改为 。
- 将其
步骤 2:添加按钮点击事件处理函数
- 回到对话框设计器,右键单击 你刚刚添加的 按钮。
- 选择
添加事件处理程序(Add Event Handler)...。 - 在弹出的对话框中:
消息类型: 选择BN_CLICKED(按钮点击)。函数处理程序名称: VS2008 会自动生成一个名字,OnBnClickedChangeTitle,保持它即可。类列表: 确保选择了CHelloMFCDlg。- 点击
添加和编辑。
VS2008 会自动在 HelloMFCDlg.cpp 文件中添加消息映射宏 ON_BN_CLICKED(IDC_CHANGE_TITLE, &CHelloMFCDlg::OnBnClickedChangeTitle),并为你创建 OnBnClickedChangeTitle 函数的空实现。
步骤 3:编写按钮点击处理函数
在 HelloMFCDlg.cpp 文件中找到 OnBnClickedChangeTitle 函数,并添加如下代码:
// HelloMFCDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "HelloMFC.h"
#include "HelloMFCDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// ... (其他代码) ...
void CHelloMFCDlg::OnBnClickedChangeTitle()
{
// TODO: 在此添加控件通知处理程序代码
// 获取对话框的标题
CString strTitle;
GetWindowText(strTitle);
// 如果标题是原来的,就改成新的,否则改回来
if (strTitle == _T("HelloMFC"))
{
SetWindowText(_T("标题已被改变!"));
}
else
{
SetWindowText(_T("HelloMFC"));
}
}
代码解释:
GetWindowText(strTitle): 获取当前对话框窗口的标题文本,并存储在CString类型的strTitle变量中。CString是 MFC 提供的字符串类。SetWindowText(...): 设置对话框窗口的标题。
步骤 4:运行并测试
再次按下 F5 运行程序。
- 你会看到原来的对话框。
- 点击 按钮,对话框的标题会变成 "标题已被改变!"。
- 再次点击,标题会变回 "HelloMFC"。
第六部分:进阶学习路径
当你掌握了以上基础后,可以按照以下路径深入学习:
-
菜单 和工具栏:
- 在资源编辑器中添加菜单项。
- 为菜单项添加命令处理函数,实现相应功能。
- 添加工具栏按钮,并与菜单命令关联。
-
对话框数据交换:
- 学习使用
DDX_(Dialog Data Exchange) 和DDV_(Dialog Data Validation) 宏。 - 为编辑框等控件添加成员变量,实现控件与数据成员之间的自动同步。
- 学习使用
-
文件操作:
- 使用
CStdioFile或CFile类进行文件的读写。 - 结合文档/视图架构,实现“打开”、“保存”等标准文件操作。
- 使用
-
动态链接库:
了解如何创建和使用 DLL 来封装功能模块。
-
ActiveX 控件:
学习如何在 MFC 程序中嵌入和使用第三方 ActiveX 控件。
总结与资源
- 核心思想:MFC 的核心是 面向对象 和 消息映射,理解了这两点,就掌握了 MFC 的钥匙。
- 官方文档:虽然 VS2008 的文档已不再更新,但 MSDN Library for Visual Studio 2008 仍然是最好的参考资料,你可以通过 VS2008 的帮助菜单访问。
- 书籍推荐:
- 《深入浅出 MFC》(侯捷著):经典中的经典,虽然内容稍旧,但对 MFC 原理的讲解无出其右。
- 《Visual C++ 2008 入门经典》(Ivor Horton著):适合零基础读者,内容详尽。
- 在线资源:搜索 “MFC tutorial 2008” 或 “MFC 教程” 可以找到很多博客和视频教程。
MFC 是一个庞大而复杂的框架,但只要从基础开始,循序渐进,你一定能掌握它,祝你学习顺利!
