MFC - 对话框

在本章中,我们将介绍对话框. Windows应用程序经常通过对话框与用户通信. CDialog类提供了用于管理对话框的界面. Visual C ++对话框编辑器可以轻松设计对话框并创建对话框模板资源.

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

    • 构造对话框对象.

    • 创建对话窗口.

让我们一起来看看通过创建一个新的Win32项目进入一个简单的例子.

第1步 : 打开Visual studio并单击File → 新的 → 项目菜单选项.

第2步 : 您现在可以看到New Project对话框.

New Project Dialog Box

第3步 : 从左侧窗格中,选择Templates →  Visual C ++ →  Win32.

第4步 : 在中间窗格中,选择Win32 Project.

步骤5 : 在"名称"字段中输入项目名称"MFCDialogDemo",然后单击"确定"继续.您将看到以下对话框.

MFCDialogDemo Project

第6步 : 单击下一步.

MFCDialogDemo Setting

步骤7 : 选择上面给出的对话框中显示的选项,然后单击Finish.

MFCDialogDemo Options

第8步 : 创建一个空项目.

步骤9 : 要使其成为MFC项目,请右键单击项目并选择"属性".

MFCDialogDemo Property

第10步 : 在左侧部分中,单击"配置属性"和"rarr";一般.

步骤11 : 在"项目默认值"部分中选择"在共享DLL中使用MFC"选项,然后单击"确定".

步骤12 : 添加新的源文件.

步骤13 : 右键单击Project并选择Add → 新项目.

步骤14 : 在模板部分,单击C ++文件(.cpp)

MFCDialogDemo Add Item

第15步 : 将名称设置为示例,然后单击添加.

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

#include <afxwin.h>

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

创建对话框

步骤1 : 要创建对话框,请右键单击解决方案资源管理器中的"资源文件"文件夹,然后选择"添加&rarr";资源.

Add Resource

第2步 : 在"添加资源"对话框中,选择"对话框",然后单击"新建".

步骤3 : 在实际以编程方式创建对话框之前,需要进行一些准备.

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

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

MFCDialogDemo FIle

第6步 : 资源文件在设计器中打开.同样可以作为文本文件打开.右键单击资源文件并选择打开方式.

Open With MFCDialogDemo File

第7步 : 选择源代码(文本)编辑器,然后单击添加按钮.

Source Code Editor

第8步 : 返回设计器并右键单击对话框并选择Properties.

DialogBox Select Properties

第9步 : 您需要从众多选项中选择.

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

对话框位置

对话框必须"物理上"位于应用程序上.因为对话框通常是作为其他控件的父对象创建的,所以它的位置取决于它与父窗口或桌面的关系.

如果你查看和属性窗口,你会看到两个字段,X Pos和Y Pos.

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()事件中使用对话框变量&minus调用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并单击File → 新的 → 项目菜单选项.您可以看到New Project对话框.

Dialog Based Project Template

第2步 : 从左侧窗格中,选择Templates →  Visual C ++ →  MFC.

第3步 : 在中间窗格中,选择MFC应用程序.

步骤4 : 在"名称"字段中输入项目名称"MFCModalDemo",然后单击"确定"继续.您将看到以下对话框.

MFCModalDemo Application2

第5步 : 单击下一步.

MFCModalDemo Type

步骤6 : 选择上面对话框中显示的选项,然后单击Next.

MFCModalDemo Application Options

第7步 : 检查您在对话框中选择的所有选项,如最大化和最小化框,然后单击下一步.

MFCModalDemo Advanced Features

步骤8 : 单击下一步.

MFCModalDemo Generated Classes

步骤9 : 它将生成这两个类.您可以更改类的名称,然后单击"完成".

步骤10 : 您现在可以看到MFC向导默认创建此对话框和项目文件.

DialogBox Application

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

MFCModalDemo Result