C++ 编程 第四章 对话框

更新时间:2023-08-09 02:17:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

21天学会C++ ,讲得不错

第四讲:对话框

杨章伟 e-mail:yang505412@

北京源智天下科技有限公司

联系方式:

21天学会C++ ,讲得不错

课程内容安排

对话框概述 创建对话框 模态对话框和非模态对话框 属性页和向导对话框 公用对话框 综合练习 思考和习题

北京源智天下科技有限公司1-2

联系方式:

21天学会C++ ,讲得不错

对话框概述

在Visual C++中,对话框是一个真正的窗口。对话框不 仅可以接收消息,而且还可以被移动和关闭,甚至可以 在其客户区中进行绘图。因此,可以将对话框看成一个 大容器,在它上面能够放置各种各样的标准及扩展控件, 使程序支持用户输入的手段更加丰富,如图4-1所示。

控件1

控件2

对话框

控件n

北京源智天下科技有限公司1-3

联系方式:

21天学会C++ ,讲得不错

对话框的种类 一般的说,Windows应用程序中,对话框分为模态( Modal)对话框和非模态(Modeless)对话框两种, 这两种对话框的区别在于当对话框打开时是否允许用户 进行其他对象的操作。

模态对话框是指在用户想要进行对话框以外的应用程序 操作时必须首先对该对话框进行响应非模态对话框与模态对话框不同,当用户打开非模态对 话框时,依然可以操作其他窗口。

北京源智天下科技有限公司1-4

联系方式:

21天学会C++ ,讲得不错

模态对话框

模态对话框垄断了用户的输入,当一个模态对话框打开时, 用户只能与该对话框进行交互,而其他用户界面对象收不到 输入信息。模态对话框下,用户需要操作目标对话框就必须 先操作模态对话框,如图4-3所示,这就是用户对模态对话 框的处理。

用户

模态对话框

目标对话框

北京源智天下科技有限公司1-5

联系方式:

21天学会C++ ,讲得不错

非模态对话框

非模态对话框允许用户在处理非模态对话框的同时处理目标 对话框,其不会垄断用户的输入,如图4-5所示。

非模态对话框

用户

目标对话框

北京源智天下科技有限公司1-6

联系方式:

21天学会C++ ,讲得不错

对话框编辑器

对话框的设计区域称为对话框编辑器。当读者插入一个 新的对话框资源后,打开工作台的资源面板,打开【 Dialog】文件夹,可以看到下面有一个ID号为 IDD_ABOUTBOX对话框,这几乎是每个MFC应用程 序所具备的。 此外,用户可以添加一个自己的对话框。鼠标右击【 Dialog】文件夹,在弹出的快捷方式菜单中选择【 Insert Dialog】菜单项,这时,不仅在资源面板中多了 一个ID号IDD_DIALOG1的对话框资源,而且在右边的 编辑器中也显示了这个对话框模板的编辑窗口,如图46所示。

北京源智天下科技有限公司1-7

联系方式:

21天学会C++ ,讲得不错

北京源智天下科技有限公司1-8

系方式:

21天学会C++ ,讲得不错

创建对话框 无论是模态对话框还是非模态对话框,都需要拥有相应 的对话框模板资源和新的对话框类,二者的创建都是遵 循以下步骤。 (1)添加一个新的对话框资源并用对话框编辑器设计 对话框。 (2)创建新的对话框类,该类应从CDialog类派生。 (3)使用ClassWizard为对话框类加入与控件相关联 的成员变量。 (4)在对话框类中添加需要的消息处理。 (5)创建对话框并显示。

北京源智天下科技有限公司1-9

联系方式:

21天学会C++ ,讲得不错

添加对话框资源

使用AppWizard创建一个单文档视图工程“创建对话 框”,需要为该工程添加一个对话框,只需在工作台的 【ResourceView】选项卡中选择【Dialog】项,右键 单击该项并在快捷菜单中单击【Insert Dialog】命令, 如图4-9所示。

北京源智天下科技有限公司1-10

联系方式:

21天学会C++ ,讲得不错

添加控件

添加了对话框资源后,即可根据用户的需要在对话框中 添加控件,控件的添加在第3章中已经具体讲解过了, 此处不再赘述。例如,需要创建一个具有对用户输入的 两个数字进行相加的对话框时,那么只需要在上一步骤 中创建的对话框中添加相应控件,并设置相关属性即可 ,如图4-12所示。

北京源智天下科技有限公司1-11

联系方式:

21天学会C++ ,讲得不错

使用ClassWizard创建对话框类 利用ClassWizard,用户可以十分方便地创建MFC窗口 类的派生类,对话框类也不例外。

北京源智天下科技有限公司1-12

联系方式:

21天学会C++ ,讲得不错

使用ClassWizard加入成员变量创建好了对话框类后,就可以使用ClassWizard为对话框类 加入与控件相关联的成员变量了。

北京源智天下科技有限公司1-13

联系方式:

21天学会C++ ,讲得不错

添加消息处理函数

所谓消息处理函数即窗口过程,在这个函数中,不同的消息 将用switch分支语句分配到不同的处理程序中去,消息 处理函数在应用程序中的功能如图4-23所示。键盘消息

鼠标消息

消息处理函数

应用程序

北京源智天下科技有限公司1-14

联系方式:

21天学会C++ ,讲得不错

添加消息处理函数

双击ClassWizard中的按钮来打开【Add Member Function】对话框。在该对话框中添加消息处理函数。 事实上,读者可以右击该类,在其中选择【Add Windows Message Handle】菜单项,在其中也可添加 消息处理函数。

北京源智天下科技有限公司1-15

联系方式:

21天学会C++ ,讲得不错

显示非模态对话框

例如,要显示一个非模态对话框m_Mydlg,其实现代码如 下所示。if (!m_Mydlg.m_hWnd) 是否已被创建 { m_Mydlg.Create(IDD_MYDLG); IDD_MYDLG } m_Mydlg.ShowWindow(SW_SHOW); //判断对话框

//创建对话框

//显示对话框

北京源智

天下科技有限公司1-16

联系方式:

21天学会C++ ,讲得不错

显示模态对话框

例如,要创建并显示一个模态对话框,其实现代码如下所示 : CMyDlg m_Mydlg; //定义对象m_Mydlg m_Mydlg.DoModal(); //创建模态对话框

北京源智天下科技有限公司1-17

联系方式:

21天学会C++ ,讲得不错

对话框的数据交换

对话框的数据成员变量存储了与控件相对应的数据。在对话 框运行后,数据变量需要和控件交换数据,以完成输入 或输出功能。例如,一个编辑框可能需要用来输入,也 可能需要用来输出。当用作输入时,用户在其中输入了 数值之后,对应的数据成员应该更新与编辑框中的数值 相同;当用作输出时,应及时刷新编辑框的内容以反映 相应数据成员的变化。因此,对话框就需要一种机制来 实现这种数据交换功能。

北京源智天下科技有限公司1-18

联系方式:

21天学会C++ ,讲得不错

对话框的数据交换

Visual C++的对话框中数据交换通过调用UpdateData函数 来实现。UpdataData函数原形如下: BOOL UpdateData ( BOOL bSaveAndValidaet = TRUE); UpdataData函数只有一个布尔型参数bSaveAndValidate ,其决定了数据传送的方向。若参数值为TURE,即调用 UpdateData(TRUE),表示将数据从对话框的控件中传 送到对应的数据成员中;若参数值为FALSE,即调用 UpdateData(FALSE),则表示将数据从数据成员中传送 给对应的控件。

北京源智天下科技有限公司1-19

联系方式:

21天学会C++ ,讲得不错

对话框的数据交换

例如,用户在非模态对话框IDD_MYDLG的【相加】按钮的 处理函数OnOK()函数中键入如下代码来实现数据交换。UpdateData(TRUE); //将数据从对话框的控件中 传送到对应的数据成员中 m_nSum=m_nNum1+m_nNum2; //计算 UpdateData(FALSE); //将数据从数据成员中传送 给对应的控件

北京源智天下科技有限公司1-20

联系方式:

21天学会C++ ,讲得不错

综合练习

在第3章的“学生个人信息登记表”对话框中,完成如 下功能:当用户输入了该对话框中对应信息后,单击 【OK】按钮,这些信息将显示到学生信息编辑框中, 如图4-38所示。

北京源智天下科技有限公司1-21

联系方式:

本文来源:https://www.bwwdw.com/article/s0kj.html

Top