杰瑞科技汇

MFC在VS2008中如何快速入门?

第一部分:MFC 与 VS2008 简介

什么是 MFC?

MFC (Microsoft Foundation Classes) 是一个 C++ 类库,它对 Windows API 进行了封装,使用 MFC 开发 Windows 应用程序,可以让你:

  • 使用面向对象的方式:将窗口、菜单、对话框等看作对象,通过继承和重写函数来修改其行为。
  • 提高开发效率:MFC 提供了大量预定义的类(如 CWndCDialogCDC 等),简化了复杂的 Windows API 调用。
  • 支持文档/视图架构:这是 MFC 的核心设计模式,非常适合开发具有数据管理和显示分离的应用程序,如记事本、Photoshop 等。

为什么是 VS2008?

Visual Studio 2008 是一个非常经典且稳定的 C++ 开发环境,虽然它比较老旧,但足以用来学习和理解 MFC 的基本原理,对于初学者来说,一个功能齐全但界面相对简单的 IDE 是有益的。


第二部分:开发环境准备

  1. 安装 Visual Studio 2008

    • 确保你已经安装了 Visual Studio 2008 Professional 或更高版本(Express 版本对 MFC 的支持可能不完整)。
    • 在安装时,请确保勾选了 “Visual C++” 组件,并确保包含了 “MFC 支持”
  2. 启动 VS2008

    打开 Visual Studio 2008。


第三部分:创建第一个 MFC 应用程序 (Hello, MFC!)

我们将创建一个基于对话框的最简单 MFC 应用程序。

步骤 1:创建新项目

  1. 在 VS2008 中,点击菜单栏的 文件(File) -> 新建(New) -> 项目(Project)...
  2. 在弹出的 “新建项目” 对话框中:
    • 左侧选择 Visual C++
    • 中间选择 MFC 应用程序
    • 在下方输入项目名称,HelloMFC,并选择一个位置来保存项目。
    • 点击 确定

步骤 2:MFC 应用程序向导设置

接下来会弹出 “MFC 应用程序向导”,我们一步步设置:

  1. 概述

    • 确保选择了 应用程序类型基于对话框
    • 复合文档支持 中选择
    • 其他选项保持默认即可。
    • 点击 下一步
  2. 应用程序类型

    • 这里我们保持 基于对话框 不变。
    • 点击 下一步
  3. 文档模板字符串

    • 这些是应用程序的标题等基本信息,可以暂时忽略。
    • 点击 下一步
  4. 高级功能

    • 公共控件:可以勾选一些,如 ActiveX 控件属性表 等,但我们先保持默认。
    • MFC 的使用:这是最重要的选项,对于初学者,选择 在共享 DLL 中使用 MFC,这意味着 MFC 库不会链接到你的可执行文件中,而是作为 DLL 文件在运行时加载,这样可以减小 .exe 文件的大小。
    • 点击 下一步
  5. 生成的类

    • 这里会显示向导将要生成的类,默认情况下,它会创建一个主对话框类 CHelloMFCDlg
    • 点击 完成

步骤 3:理解生成的项目结构

向导为我们创建了一个完整的项目,在 解决方案资源管理器 窗口中,你可以看到:

  • HelloMFC.cpp: 应用程序入口点 WinMain 所在的文件。
  • HelloMFCDlg.cpp / HelloMFCDlg.h: 主对话框类的实现和头文件,这是我们将要主要修改的地方。
  • Resource.h: 资源文件的头文件,包含了所有资源的 ID 定义。
  • res 文件夹: 包含了应用程序的资源文件,如对话框模板、图标、菜单等。

步骤 4:编译并运行

  1. 按下 F5 键,或者点击工具栏上的 本地 Windows 调试器 按钮。
  2. VS2008 会编译你的项目,然后运行程序,你应该会看到一个简单的对话框窗口,上面有一个 “OK” 按钮。

恭喜!你已经成功创建了你的第一个 MFC 应用程序!


第四部分:MFC 核心概念入门

消息映射

这是 MFC 的基石,Windows 是一个“消息驱动”的操作系统,你的窗口会不断地接收来自系统或其他应用程序的消息(如鼠标点击、键盘按下、窗口重绘等)。

MFC 使用 消息映射宏 将消息和对应的处理函数连接起来。

  • DECLARE_MESSAGE_MAP(): 在类的头文件(.h)中声明该类使用消息映射。
  • BEGIN_MESSAGE_MAP() / END_MESSAGE_MAP(): 在类的实现文件(.cpp)中定义消息映射的范围。
  • ON_COMMAND(): 将菜单命令或按钮点击消息与一个函数关联起来。
  • ON_BN_CLICKED(): 专门用于按钮点击的宏。

对话框与控件

我们的主窗口就是一个 CDialog 对象,上面的按钮、文本框等都是控件。

  • 为控件添加变量
    1. 在对话框设计器中,双击一个控件(比如那个 "OK" 按钮)。
    2. VS2008 会自动为你创建一个按钮点击事件处理函数,并跳转到代码中,这背后就是 ON_BN_CLICKED 消息映射。
    3. 右键点击控件,选择 添加变量(Add Variable)...,可以为控件创建一个成员变量,方便在代码中访问和修改它。

文档/视图架构

虽然我们当前的项目是基于对话框的,没有使用文档/视图架构,但了解它很重要。

  • 文档: 负责管理应用程序的数据,它不关心数据如何显示,只负责数据的存储和加载。
  • 视图: 负责显示文档的数据,并处理用户与数据的交互(如鼠标拖动选择)。
  • 框架窗口: 包含视图,并提供菜单、工具栏等用户界面元素。

这种分离使得你可以为同一份数据创建多种显示方式(一个表格视图和一个图表视图)。


第五部分:实战练习 - 为对话框添加按钮和功能

让我们来修改 HelloMFC 程序,添加一个按钮,点击后改变对话框的标题。

步骤 1:添加一个新按钮

  1. 解决方案资源管理器 中,找到并双击 HelloMFC.rc 文件。
  2. 这会打开 资源视图,展开 Dialog 项,双击 IDD_HELLOMFC_DIALOG
  3. 你会看到对话框的设计器,从右侧的 工具箱 中拖拽一个 Button 控件到对话框上。
  4. 选中这个新按钮,在右下角的 属性 窗口中:
    • 将其 ID 修改为 IDC_CHANGE_TITLE (ID 必须以 IDC_ 开头)。
    • 将其 Caption 修改为 。

步骤 2:添加按钮点击事件处理函数

  1. 回到对话框设计器,右键单击 你刚刚添加的 按钮。
  2. 选择 添加事件处理程序(Add Event Handler)...
  3. 在弹出的对话框中:
    • 消息类型: 选择 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 运行程序。

  1. 你会看到原来的对话框。
  2. 点击 按钮,对话框的标题会变成 "标题已被改变!"。
  3. 再次点击,标题会变回 "HelloMFC"。

第六部分:进阶学习路径

当你掌握了以上基础后,可以按照以下路径深入学习:

  1. 菜单 和工具栏

    • 在资源编辑器中添加菜单项。
    • 为菜单项添加命令处理函数,实现相应功能。
    • 添加工具栏按钮,并与菜单命令关联。
  2. 对话框数据交换

    • 学习使用 DDX_ (Dialog Data Exchange) 和 DDV_ (Dialog Data Validation) 宏。
    • 为编辑框等控件添加成员变量,实现控件与数据成员之间的自动同步。
  3. 文件操作

    • 使用 CStdioFileCFile 类进行文件的读写。
    • 结合文档/视图架构,实现“打开”、“保存”等标准文件操作。
  4. 动态链接库

    了解如何创建和使用 DLL 来封装功能模块。

  5. 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 是一个庞大而复杂的框架,但只要从基础开始,循序渐进,你一定能掌握它,祝你学习顺利!

分享:
扫描分享到社交APP
上一篇
下一篇