📜  MFC-对话框

📅  最后修改于: 2020-11-20 06:24:37             🧑  作者: Mango


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

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

    • 构造对话框对象。

    • 创建对话框窗口。

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

步骤1-打开Visual Studio,然后单击文件→新建→项目菜单选项。

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

新建项目对话框

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

步骤4-在中间窗格中,选择Win32 Project。

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

MFCDialogDemo项目

步骤6-单击下一步。

MFCDialogDemo设置

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

MFCDialogDemo选项

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

步骤9-要使其成为MFC项目,请右键单击该项目,然后选择属性。

MFCDialogDemo属性

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

步骤11-选择Project Defaults部分中的在共享DLL中使用MFC选项,然后单击OK。

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

步骤13-右键单击您的项目,然后选择添加→新建项目。

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

MFCDialogDemo添加项目

步骤15-将名称设置为示例,然后单击添加。

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

#include 

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

对话框创建

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

添加资源

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

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

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

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

MFCDialogDemo文件

步骤6-资源文件在设计器中打开。可以将其作为文本文件打开。右键单击资源文件,然后选择“打开方式”。

使用MFCDialogDemo文件打开

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

源代码编辑器

步骤8-返回设计器并右键单击对话框,然后选择属性。

对话框选择属性

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

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

对话位置

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

如果您在“属性”窗口中查看,则会看到两个字段X Pos和Y Pos。

对话位置

  • X是从监视器的左边界到对话框的左边界的距离。

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

默认情况下,这些字段设置为零。您还可以如上所述进行更改。

如果将这两个尺寸指定为0,则将设置对话框的左边界和上边界,以便该对象出现在屏幕的中间中央。

对话框尺寸

对话框的尺寸是指其宽度和高度。您可以在设计器窗口中借助鼠标来调整宽度和高度的大小。

对话框尺寸

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

对话框方法

用于在屏幕上显示对话框的基类是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 
#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-编译并执行上述代码后,您将看到以下对话框。

对话框

基于对话框的应用程序

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

步骤1-打开Visual Studio,然后单击文件→新建→项目菜单选项。您可以看到“新建项目”对话框。

基于对话框的项目模板

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

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

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

MFCModalDemo应用程序2

步骤5-单击下一步。

MFCModalDemo类型

步骤6-选择以上对话框中显示的选项,然后单击下一步。

MFCModalDemo应用程序选项

步骤7-检查您选择在对话框中具有的所有选项,例如“最大化和最小化框”,然后单击“下一步”。

MFCModalDemo高级功能

步骤8-单击下一步。

MFCModalDemo生成的类

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

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

对话框应用

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

MFCModalDemo结果