MFC开发:如何创建第一个MFC应用程序

文章目录

一、概述

[二、MFC 的主要组件](#二、MFC 的主要组件)

三、创建一个MFC窗口

四、控件绑定消息函数

一、概述

MFC 是微软提供的一个 C++ 类库,用于简化 Windows 应用程序的开发。它封装了 Windows API,提供面向对象的接口,帮助开发者更高效地创建图形用户界面(GUI)应用程序。MFC 自 1992 年随 Microsoft C/C++ 7.0 发布以来,成为 Windows 开发的重要工具。

MFC 的核心作用:

封装 Windows API:MFC 将复杂的 Windows API 封装为易于使用的 C++ 类,简化了窗口管理、消息处理等任务。

提供应用程序框架:MFC 提供了应用程序框架(如 CWinApp、CFrameWnd),帮助开发者快速搭建应用程序的基本结构。

支持图形用户界面(GUI)开发:MFC 提供丰富的控件类(如按钮、列表框、对话框),简化 GUI 开发。

支持文档/视图架构:MFC 的文档/视图架构将数据管理与用户界面分离,便于维护和扩展。

集成开发环境(IDE)支持:MFC 与 Visual Studio 深度集成,提供代码生成和调试工具,提升开发效率。

兼容性与扩展性:MFC 支持多种 Windows 版本,允许开发者扩展功能或直接调用 Windows API。

二、MFC 的主要组件

应用程序类(CWinApp):管理应用程序的生命周期和主消息循环。

窗口类(CFrameWnd、CDialog):用于创建和管理主窗口及对话框。

文档/视图类(CDocument、CView):实现文档/视图架构,分离数据与界面。

控件类(CButton、CListBox 等):封装常用控件,简化 GUI 开发。

集合类(CArray、CList 等):提供数据存储和管理功能

文件与数据库支持:提供文件操作和数据库访问类(如 CFile、CDatabase)。

三、创建一个MFC窗口

应用程序类型选择"基于对话框":

高级功能中区别取消勾选:

可以更改继承的基类,也可以更改类名称。

默认会生成一个带有两个按钮和一个提示文本框的MFC窗口:

双击按钮后可以直接转到点击按钮后执行的事件函数:

cpp

复制代码

void CMFCApplicationDlg::OnBnClickedOk()

{

// TODO: 在此添加控件通知处理程序代码

MessageBox(_T("您好"));

CDialogEx::OnOK();

}

点击"确定按钮"后的结果显示:

四、控件绑定消息函数

我们可以重新创建控件。如下所示:

每一个控件都有一个控件ID,我们可以通过指定的控件ID进行一些操作,比如按钮Button1的ID为"IDC_BUTTON1"

双击按钮可以为按钮生成一个响应函数,当我们点击按钮就会触发这个函数。

函数声明:

cpp

复制代码

public:

afx_msg void OnBnClickedButton1();

afx_msg void OnBnClickedButton2();

函数定义:

cpp

复制代码

void CMFCApplicationDlg::OnBnClickedButton1()

{

// TODO: 在此添加控件通知处理程序代码

MessageBox(_T("您好"));

}

void CMFCApplicationDlg::OnBnClickedButton2()

{

// TODO: 在此添加控件通知处理程序代码

MessageBox(_T("大家好"));

}

消息映射表中已经通过按钮的控件ID将点击事件与上述函数进行了绑定:

cpp

复制代码

BEGIN_MESSAGE_MAP(CMFCApplicationDlg, CDialogEx)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplicationDlg::OnBnClickedButton1)

ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplicationDlg::OnBnClickedButton2)

END_MESSAGE_MAP()

也可以通过类向导将控件与消息函数进行绑定:

点击确定后消息映射表中会生成一个与Button3关联的消息:

cpp

复制代码

BEGIN_MESSAGE_MAP(CMFCApplicationDlg, CDialogEx)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplicationDlg::OnBnClickedButton1)

ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplicationDlg::OnBnClickedButton2)

ON_BN_CLICKED(IDC_BUTTON3, &CMFCApplicationDlg::OnClickedButton3)

END_MESSAGE_MAP()