MFC - 对话框



在本章中,我们将介绍对话框。Windows 应用程序通常通过对话框与用户进行通信。CDialog 类提供了一个用于管理对话框的接口。Visual C++ 对话框编辑器使设计对话框和创建其对话框模板资源变得容易。

  • 创建对话框对象是一个两阶段操作 -

    • 构造对话框对象。

    • 创建对话框窗口。

让我们通过创建一个新的 Win32 项目来了解一个简单的示例。

步骤 1 - 打开 Visual Studio 并点击“文件”→“新建”→“项目”菜单选项。

步骤 2 - 您现在可以看到“新建项目”对话框。

New Project Dialog Box

步骤 3 - 从左侧窗格中,选择“模板”→“Visual C++”→“Win32”。

步骤 4 - 在中间窗格中,选择“Win32 项目”。

步骤 5 - 在“名称”字段中输入项目名称“MFCDialogDemo”,然后点击“确定”继续。您将看到以下对话框。

MFCDialogDemo Project

步骤 6 - 点击“下一步”。

MFCDialogDemo Setting

步骤 7 - 选择上面给出的对话框中显示的选项,然后点击“完成”。

MFCDialogDemo Options

步骤 8 - 创建了一个空项目。

步骤 9 - 要将其设为 MFC 项目,请右键点击项目并选择“属性”。

MFCDialogDemo Property

步骤 10 - 在左侧部分,点击“配置属性”→“常规”。

步骤 11 - 在“项目默认值”部分中选择“在共享 DLL 中使用 MFC”选项,然后点击“确定”。

步骤 12 - 添加一个新的源文件。

步骤 13 - 右键点击您的项目并选择“添加”→“新建项”。

步骤 14 - 在“模板”部分,点击“C++ 文件 (.cpp)”。

MFCDialogDemo Add Item

步骤 15 - 将“名称”设置为 Example 并点击“添加”。

步骤 16 - 要创建应用程序,我们需要添加一个类并从 MFC 的 CWinApp 派生它。

#include <afxwin.h>

class CExample : public CWinApp {
   public:
      BOOL InitInstance();
};

对话框创建

步骤 1 - 要创建对话框,请右键点击解决方案资源管理器中的“资源文件”文件夹,然后选择“添加”→“资源”。

Add Resource

步骤 2 - 在“添加资源”对话框中,选择“对话框”并点击“新建”。

步骤 3 - 对话框在实际以编程方式创建之前需要进行一些准备工作。

步骤 4 - 对话框可以首先手动创建为文本文件(在资源文件中)。

步骤 5 - 您现在可以看到在“资源文件”下创建的 MFCDialogDemo.rc 文件。

MFCDialogDemo FIle

步骤 6 - 资源文件在设计器中打开。它也可以作为文本文件打开。右键点击资源文件并选择“打开方式”。

Open With MFCDialogDemo File

步骤 7 - 选择“源代码(文本)”编辑器,然后点击“添加”按钮。

Source Code Editor

步骤 8 - 返回到设计器,右键点击对话框并选择“属性”。

DialogBox Select Properties

步骤 9 - 您需要从众多选项中进行选择。

步骤 10 - 与大多数其他控件一样,对话框必须被识别。对话框的标识符 (ID) 通常以 IDD_ 开头,让我们将其 ID 更改为 IDD_EXAMPLE_DLG。

对话框位置

对话框必须“物理地”位于应用程序上。因为对话框通常被创建为其他控件的父级,所以其位置取决于它与其父窗口或桌面的关系。

如果您查看“属性”窗口,您会看到两个字段,“X 位置”和“Y 位置”。

Dialog Location
  • X 是从显示器左侧边框到对话框左侧边框的距离。

  • Y 是从显示器顶部边框到对话框顶部边框的距离。

默认情况下,这些字段设置为零。您也可以像上面显示的那样更改它们。

如果您将这两个维度指定为 0,则对话框的左边界和上边界将被设置为使对象出现在屏幕的中央。

对话框尺寸

对话框的尺寸是指其宽度和高度。您可以使用设计器窗口中的鼠标调整宽度和高度。

Dialog Box Dimension

您可以在状态栏上看到宽度和高度的变化。

对话框方法

用于在屏幕上显示对话框的基本类是 CDialog 类。要创建对话框,我们需要从 CDialog 派生一个类。CDialog 类本身提供了三个构造函数,如下所示 -

CDialog();
CDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL);
CDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);

让我们创建另一个类 CExampleDlg 并从 CDialog 派生它。我们将实现其默认构造函数和析构函数,如以下代码所示。

class CExampleDlg : public CDialog {
   public:
      enum { IDD = IDD_EXAMPLE_DLG };
   
      CExampleDlg();
      ~CExampleDlg();
};

CExampleDlg::CExampleDlg():CDialog(CExampleDlg::IDD) {

}

CExampleDlg::~CExampleDlg() {

}

我们需要在 CExample::InitInstance() 方法中实例化此对话框,如以下代码所示。

BOOL CExample::InitInstance() {
   CExampleDlg myDlg;
   m_pMainWnd = &myDlg;
   
   return TRUE;
}

模态对话框

对话框有两种类型 - **无模式**和**模态**。模态和无模式对话框的区别在于创建和显示它们的过程。

无模式对话框

  • 对于无模式对话框,您必须在您的对话框类中提供您自己的公共构造函数。

  • 要创建无模式对话框,请调用您的公共构造函数,然后调用对话框对象的 Create 成员函数来加载对话框资源。

  • 您可以在构造函数调用期间或之后调用 Create。如果对话框资源具有 WS_VISIBLE 属性,则对话框会立即出现。

  • 如果不是,则必须调用其 ShowWindow 成员函数。

模态对话框

  • 要创建模态对话框,请调用在 CDialog 中声明的两个公共构造函数中的任何一个。

  • 接下来,调用对话框对象的DoModal成员函数来显示对话框并管理与它的交互,直到用户选择“确定”或“取消”。

  • DoModal 进行的这种管理使对话框成为模态对话框。对于模态对话框,DoModal 加载对话框资源。

步骤 1 - 要将对话框显示为模态,请在 CExample::InitInstance() 事件中使用您的对话框变量调用 DoModal() 方法 -

BOOL CExample::InitInstance() {
   CExampleDlg myDlg;
   m_pMainWnd = &myDlg;
   myDlg.DoModal();
   return TRUE;
}

步骤 2 - 以下是 Example.cpp 文件的完整实现。

#include <afxwin.h>
#include "resource.h"

class CExample : public CWinApp {
   public:
      BOOL InitInstance();
};
   
class CExampleDlg : public CDialog {
   public:
      enum { IDD = IDD_EXAMPLE_DLG };
   
      CExampleDlg();
     ~CExampleDlg();
};

CExampleDlg::CExampleDlg():CDialog(CExampleDlg::IDD) {

}

CExampleDlg::~CExampleDlg() {

}

BOOL CExample::InitInstance() {
   CExampleDlg myDlg;
   m_pMainWnd = &myDlg;
   myDlg.DoModal();
   return TRUE;
}
CExample MyApp;

步骤 3 - 当以上代码编译并执行时,您将看到以下对话框。

Dialog Box

基于对话框的应用程序

Microsoft Visual Studio 提供了一种更简单的方法来创建主要基于对话框的应用程序。以下是使用 Visual Studio 中提供的项目模板创建基于对话框的项目的步骤 -

步骤 1 - 打开 Visual Studio 并点击“文件”→“新建”→“项目”菜单选项。您会看到“新建项目”对话框。

Dialog Based Project Template

步骤 2 - 从左侧窗格中,选择“模板”→“Visual C++”→“MFC”。

步骤 3 - 在中间窗格中,选择“MFC 应用程序”。

步骤 4 - 在“名称”字段中输入项目名称“MFCModalDemo”,然后点击“确定”继续。您将看到以下对话框。

MFCModalDemo Application2

步骤 5 - 点击“下一步”。

MFCModalDemo Type

步骤 6 - 选择上面对话框中显示的选项,然后点击“下一步”。

MFCModalDemo Application Options

步骤 7 - 检查您希望在对话框上拥有的所有选项,例如“最大化”和“最小化”框,然后点击“下一步”。

MFCModalDemo Advanced Features

步骤 8 - 点击“下一步”。

MFCModalDemo Generated Classes

步骤 9 - 它将生成这两个类。您可以更改类的名称,然后点击“完成”。

步骤 10 - 您现在可以看到 MFC 向导默认情况下创建了此对话框和项目文件。

DialogBox Application

步骤 11 - 当您运行此应用程序时,您将看到以下输出。

MFCModalDemo Result
广告