Visual C++从入门到精通(第5版)
上QQ阅读APP看书,第一时间看更新

6.2 对话框的创建及显示

对话框可以分为模态对话框和非模态对话框两大类,两种对话框根据需要应用在不同的程序中。本节将分别介绍这两种对话框的创建及显示。

6.2.1 创建对话框

创建对话框指的是在应用程序中创建对话框资源。在Visual C++中,用户可以通过工作区窗口的ResourceView选项卡创建对话框资源,步骤如下。

(1)在工作区窗口中选择ResourceView选项卡,右击Dialog节点,在弹出的快捷菜单中选择Insert Dialog命令,创建一个对话框资源,如图6.9所示。

(2)按Enter键打开对话框的属性窗口,修改对话框资源的ID值,本例为IDD_SHOW_DIALOG。要使用对话框资源,还需要为对话框创建一个窗口类。双击对话框资源或按Ctrl+W键打开类向导,弹出Adding a Class对话框,要求用户为新创建的对话框资源新建或选择一个类,如图6.10所示。

图6.9 对话框资源

图6.10 Adding a Class对话框

(3)选中Create a new class单选按钮,单击OK按钮,打开New Class对话框,在Name编辑框中输入类名,如图6.11所示。

图6.11 New Class对话框

(4)单击OK按钮,完成类的创建。

6.2.2 显示对话框

在Windows系统中,对话框可以分为两类,分别是模态对话框和非模态对话框,两种对话框的显示方法是不同的,下面分别进行介绍。

1. 模态对话框的显示(DoModal方法)

模态对话框的特点是在对话框弹出以后,其他程序会被挂起,只有当前对话框响应用户的操作,在对话框关闭前用户不能在同一应用程序中进行其他操作。

要显示模态对话框,首先要为模态对话框声明一个对象,然后调用该对象的DoModal方法进行显示(DoModal方法用于创建并显示一个模态对话框)。

语法格式如下:

返回值:DoModal方法返回一个整数值,该数值可以应用于EndDialog方法。如果方法返回值为-1,表示没有创建对话框;如果为IDABORT,表示有其他错误发生。

说明

关闭模态对话框时,可以调用CDialog类的OnOK方法或OnCancel方法。用户单击OK按钮(按钮ID为IDOK)时会调用OnOK方法,该方法在内部调用了EndDialog方法,因此单击OK按钮会关闭对话框。通常情况下,用户需要改写该方法,禁止调用基类的OnOK方法。当用户在对话框中单击ID为IDCANCEL的按钮或按Esc键时,程序将自动调用OnCancel方法,默认情况下OnCancel方法在内部调用EndDialog方法。如果用户在一个非模态对话框中实现OnCancel方法,需要在内部调用DestroyWindow方法,而不要调用基类的OnCancel方法,因为它调用EndDialog方法将使对话框不可见,但不销毁对话框。

【例6.1】 显示一个模态对话框。

【例6.2】 关闭一个模态对话框。

2. 非模态对话框的显示(Create方法)

非模态对话框打开以后,不会影响其他线程处理消息。要显示非模态对话框,首先要调用CDialog类的Create方法进行创建。语法格式如下:

相应参数说明如下。

  lpszTemplateName:标识资源模板名称。

  pParentWnd:标识父窗口指针。

  nIDTemplate:标识对话框资源ID。

返回值:如果对话框创建成功,返回值为非0,否则为0。

然后通过ShowWindow函数进行显示。语法格式如下:

其中,nCmdShow指定了窗口的显示状态。

销毁窗口时,要使用CDialog类的DestroyWindow方法。

说明

如果一个窗口是父窗口,调用该窗口的DestroyWindow方法时,将销毁所有的子窗口。

【例6.3】显示一个非模态对话框。
【例6.4】销毁一个非模态对话框。