MFC – 对话框
MFC – 对话框
在本章中,我们将介绍对话框。Windows 应用程序经常通过对话框与用户通信。CDialog 类提供了管理对话框的接口。Visual C++ 对话框编辑器使设计对话框和创建对话框模板资源变得容易。
-
创建对话框对象是一个两阶段的操作 –
-
构造对话框对象。
-
创建对话窗口。
-
让我们通过创建一个新的 Win32 项目来查看一个简单的示例。
步骤 1 – 打开 Visual Studio,然后单击文件 → 新建 → 项目菜单选项。
第 2 步– 您现在可以看到“新建项目”对话框。
步骤 3 – 从左窗格中,选择模板 → Visual C++ → Win32。
步骤 4 – 在中间窗格中,选择 Win32 项目。
步骤 5 – 在名称字段中输入项目名称“MFCDialogDemo”,然后单击“确定”继续。您将看到以下对话框。
步骤 6 – 单击下一步。
步骤 7 – 选择上面给出的对话框中显示的选项,然后单击完成。
步骤 8 – 创建一个空项目。
步骤 9 – 要使其成为 MFC 项目,请右键单击该项目并选择“属性”。
步骤 10 – 在左侧部分,单击配置属性 → 常规。
步骤 11 – 在“项目默认值”部分中选择“在共享 DLL 中使用 MFC”选项,然后单击“确定”。
步骤 12 – 添加一个新的源文件。
步骤 13 – 右键单击您的项目并选择添加 → 新项目。
步骤 14 – 在模板部分,单击 C++ 文件 (.cpp)
步骤 15 – 将名称设置为示例,然后单击添加。
步骤 16 – 要创建应用程序,我们需要添加一个类并从 MFC 的 CWinApp 派生它。
#include <afxwin.h> class CExample : public CWinApp { public: BOOL InitInstance(); };
对话框创建
步骤 1 – 要创建对话框,请右键单击解决方案资源管理器中的资源文件文件夹,然后选择添加 → 资源。
步骤 2 – 在添加资源对话框中,选择对话框并单击新建。
步骤 3 – 在实际以编程方式创建对话框之前,需要一些准备工作。
步骤 4 – 首先可以手动创建一个对话框作为文本文件(在资源文件中)。
步骤 5 – 您现在可以看到在资源文件下创建的 MFCDialogDemo.rc 文件。
步骤 6 – 资源文件在设计器中打开。同样可以作为文本文件打开。右键单击资源文件并选择打开方式。
步骤 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; }
模态对话框
有两种类型的对话框 – modeless和modal。模态对话框和非模态对话框的不同之处在于用于创建和显示它们的过程。
无模式对话框
-
对于无模式对话框,您必须在对话框类中提供自己的公共构造函数。
-
要创建无模式对话框,请调用公共构造函数,然后调用对话框对象的 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;
Step 3 – 编译并执行上述代码后,您将看到以下对话框。
基于对话框的应用程序
Microsoft Visual Studio 提供了一种更简单的方法来创建主要基于对话框的应用程序。以下是使用 Visual Studio 中可用的项目模板创建对话框基础项目的步骤 –
步骤 1 – 打开 Visual Studio,然后单击文件 → 新建 → 项目菜单选项。您可以看到“新建项目”对话框。
步骤 2 – 从左窗格中,选择模板 → Visual C++ → MFC。
步骤 3 – 在中间窗格中,选择 MFC 应用程序。
第 4 步– 在名称字段中输入项目名称“MFCModalDemo”,然后单击“确定”继续。您将看到以下对话框。
步骤 5 – 单击下一步。
步骤 6 – 选择上面对话框中显示的选项,然后单击下一步。
步骤 7 – 检查您在对话框中选择的所有选项,例如最大化和最小化框,然后单击下一步。
步骤 8 – 单击下一步。
步骤 9 – 它将生成这两个类。您可以更改类的名称,然后单击完成。
步骤 10 – 您现在可以看到 MFC 向导默认创建此对话框和项目文件。
步骤 11 – 当您运行此应用程序时,您将看到以下输出。