第2章 对话框与控件 返回目录.

Slides:



Advertisements
Similar presentations
广州市小学信息技术教学同步资源 第一册 第二章 第六节 《 Window窗口》 广州市荔湾区西华路小学 董绮珊.
Advertisements

第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
项目2 字符格式和段落编排 2017年3月7日6时54分.
插入超链接 高邮市第一实验小学 范太国 任务一:设置文本超链接 任务一:设置文字超链接 步骤:1、选定文字并右击,在快捷菜单 中选择“超链接”命令。 2、在弹出的对话框中选择左侧“链接到:”中的“本文档中的位置(A)”项,在“请选择文档中的位置(C):”中选择需要链接的幻灯片,单击“确定”按钮。
计算机高级程序设计 第五章.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
走进Word 认识Word2010的工作界面 计算机专业 赵德玲.
版权所有 复制必究 第7章 对话框和控件.
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
第七章 基于对话框的应用程序 7.1 Windows编程基础 7.2 基于对话框的应用程序 7.3 静态文本框
走进编程 程序的顺序结构(二).
辅导课程六.
第十一讲 MFC常用控件的使用(3) 严宣辉 数学与计算机科学学院
MFC WinSock类的编程 为简化套接字网络编程,更方便地利用Windows的消息驱动机制,微软的基础类库(Microsoft Foundation Class Libary,简称MFC),提供了两个套接字类,在不同的层次上对Windows Socket API函数进行了封装,为编写Windows.
VC++开发实例 张荣梅 2007年2月.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
PostgreSQL 8.3 安装要点 四川大学计算机学院 段 磊
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
2.5.1 单选控件 单选控件可以为用户选择某一个选项,单选控件常用属性如下所示。
第一讲: 基本流程(1).
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
2019/1/12 GDP设计协同 超级管理员操作手册 GDP项目组.
第10章 高级用户界面设计 10.1 菜单设计 10.2 通用对话框 10.3 图像列表框控件 10.4 树形视图控件
Windows 7 的系统设置.
POWERPOINT TEMPLATE HI.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
PRESENTED BY OfficePLUS
第七章 操作符重载 胡昊 南京大学计算机系软件所.
SOA – Experiment 2: Query Classification Web Service
第十六讲 对话框与菜单栏 控件的基本概念 Visual C++中的控件 对话框概述 创建对话框 菜单栏 工具栏 状态栏.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第四讲 客户问卷调查程序 教育部“十二五”职业教育国家规划教材
产品推广 PRODUCT PROMOTION PRESENTED BY OfficePLUS.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
PRESENTED BY OfficePLUS
姚金宇 MIT SCHEME 使用说明 姚金宇
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
POWERPOINT TEMPLATE PRESENTED BY OfficePLUS.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
第5章 文本与字体 2019/4/25 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2019/4/25 Huang Weitong.
第4章 Excel电子表格制作软件 4.4 函数(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
第六章 素材的加工与处理 第13讲 用GoldWave进行音频的截取、合并、淡入淡出操作
LOGIX500软件入门 西安华光信息技术有限公司 2008年7月11日.
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
VRP教程 2011.
Delphi 7.0开发示例.
Python 环境搭建 基于Anaconda和VSCode.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
YOUR SUBTITLE GOES HERE
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
WEB程序设计技术 数据库操作.
使用说明书 网址: 贵阳学院智慧实验室管理平台 用户中心 使用说明书 网址:
第四章 UNIX文件系统.
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第六讲 酒店客房管理系统(二) 教育部“十二五”职业教育国家规划教材
LOGO HERE 单击此处添加 您的标题标题标题 PRESENTED BY JANE DOE
第3章 对话框.
Presentation transcript:

第2章 对话框与控件 返回目录

概念 对话框是一个弹出式窗口,它一般用于用户输入或与用户进行交互活动的场合 模态 对 话 框 非模态 不允许用户在关闭对话框之前切换到应用程序的其他窗口 模态 对 话 框 允许用户在该对话框与应用程序其他窗口之间的切换,非模式对话框从WinMain函数的消息循环中接收输入 非模态

对话框的实现步骤 第一步:设计对话框模版资源 增加或删除控件; 设置控件属性 测试对话框的运行效果 第二步:设计对话框类 创建对话框类 创建对话框成员变量 对话框的初始化 第三步:运行对话框

对话框的CDialog类 CDialog类是所有对话框类的基类。它是由CWND类派生来的。CDialog中有许多成员函数,其中最重要的有以下5个: CDialog::DoModal( ):用于激活模态对话框,显示对话框窗口,在此对话框关闭前,用户不能与应用程序的其他窗口交互。函数返回一个int型数值,当函数无法建立对话框时返回-1,发生错误时返回IDABORT。

对话框的CDialog类 CDialog::OnInitDialog( ):用于响应WM_INITDIALOG消息。在Create()或DoModal()函数调用期间,系统会发送WM_INITDIALOG给对话框,在对话框显示之前执行初始化操作。 CDialog::OnOK( ):当用户单击“OK” 按钮(ID为IDOK)时,调用该函数。

对话框的CDialog类 CDialog::OnCancel( ):当用户单击“Cancel”(取消)按钮或按“Esc”键时被调用。在模态对话框下,将自动终止模态对话框。 CDialog::Create( ):根据对话框资源模版创建非模态对话框窗口并立即返回。如果对话框不是Visible属性,还需要调用CWnd::ShowWindow()函数显示非模态对话框。

创建对话框 创建对话框的方法有如下两种:

利用AppWizard建立对话框

创建对话框 在SDI或MDI方式下,单击项目工作区窗口中的“ResourceView”选项卡,展开“Dialog”选项,可在里面手动添加用户自定义对话框。 下面举例介绍如何在SDI界面下创建一个对话框。 【例2-1】 利用SDI方式增加一个对话框。

对话框中的控件 控件是在系统内部定义的能够完成特定功能的控制程序单元。在应用程序中使用控件不仅简化了编程,还能完成常用的各种功能。为了更好地发挥控件的作用,用户应理解和掌握控件的属性、消息以及创建和使用的方法。

对话框中的控件 在进行对话框的界面设计时,Visual C++ 6.0中已经提供了控件工具。当用户新建一个对话框时,控件工具栏一般会自动弹出。

控件工具栏

对话框中的控件 Visual C++ 6.0提供了很多控件,而且每个控件都有大量的属性和事件。下面将介绍一些常用的控件。

静态控件 静态控件用来显示字符串、框、矩形、图标、位图或增强的图元文件。它可以被用来作为标签、框或分隔其他的控件。静态控件一般不接收用户输入,也不产生通知消息。

静态控件

静态控件

按钮 它由CButton类进行管理,使用CButton::SetButtonStyle和CButton::GetButtonStyle函数能够在应用程序中动态地设置和查询按钮状态。

按钮 如果按钮具有焦点,还可使用鼠标左键、“Enter”键或空格键触发该按钮的Click事件。通过设置窗体的AcceptButton或CancelButton属性,无论该按钮是否有焦点,都可以通过按“Enter”键或“Esc”键来触发按钮的Click事件。

按钮 在按钮映射的消息中,常见的有两个:BN_CLICKED(单击按钮)、BN_DOUBLECLICKED(双击按钮)。 下面将介绍Visual C++ 6.0在对话框中添加按钮及按钮属性的设置方法。

按钮 控件的对话框中含有许多属性,对于大多数控件来说,这些属性一般都有“General”(一般属性)、“Styles”(控件的风格)和“Extended Styles”(控件的扩展风格)3个选项卡。其中“General”和“Styles”是用来设定控件的外观和辅助功能的,不同的控件具有不同的风格和扩展风格,但控件的一般属性是基本相同的,它通常有标识符框、标题框等内容。

按钮 各项具体说明如下: “ID”文本框:控件的标识符。每种控件都有缺省的ID,例如按钮控件为IDC_BUTTON1。

按钮

按钮

编辑框 编辑框(Edit Box) 是用户通过键盘和鼠标输入和编辑文字的矩形窗口,用户可通过它进行文字、数字或口令的输入,也可使用它编辑或修改简单的文本文件。选择编辑框后,编辑框中将显示默认文本和闪烁的光标,光标处用以表示开始输入文本的位置。然后用户就可用键盘或鼠标来输入文本、移动光标、选择、移动或删除的文本。

编辑框 编辑框通常用于编辑文本,不过也可使其成为只读控件。编辑框能够显示多行数据、对文本换行使其符合控件的大小和添加基本的格式设置等。但是编辑框中显示或输入的文本只能采用一种格式。

编辑框 Text属性是编辑框最重要的属性,因为要显示的文本就包含在Text属性中。默认情况下,最多可在一个编辑框中输入2048个字符。如果将MultiLine属性设置为True,则最多可输入32KB的文本。Text属性可在设计窗体时使用属性窗口设置,也可在运行时用代码设置或通过用户输入来设置。在运行时通过读取Text属性可以获得编辑框的当前内容。

编辑框 设置编辑框的页面边距可使文本在编辑框显示更具满意效果,这在多行编辑控件中尤为重要,应用程序可以通过调用成员函数CEdit::SetMargins来实现,这个函数的原型如下: Void SetMargins(UINT nLeft, (UINT nRight);

编辑框 其中,参数nLeft和nRight分别用来指定左、右边距的像素宽度。 口令设置在编辑控件中不同于一般的文本编辑控件,用户输入的每个字符都被一个特殊的字符代替显示,这个特殊的字符称为口令字符。

编辑框 缺省的口令字符是“*”,应用程序可以用成员函数Cedit::SetPasswordChar来定义自己的口令字符,其函数的原型如下: Void SetPasswordChar(TCHAR ch);

单选项

单选项 当单击单选项时,其Checked属性被设置为True,并调用Click事件处理程序。当Checked属性的值更改时,将触发CheckedChanged事件。如果AutoCheck属性被设置为True(默认),那么当选择该单选项时,将自动清除该组中其他单选项。

单选项 通常只有在使用验证代码以确保选定的单选项是允许的选项时,才将该属性设置为False。用Text属性可以设置控件内显示的文本,该属性也可以包含访问键快捷方式,即前面带有“&”符号的字母,这样用户就可以通过同时按“Alt”键和访问键来“单击”控件。

单选项 如果将Appearance属性设置为Button,将使单选项的外观像按钮一样,即当选中它时,它看起来已被按下。单选项也可以使用Image和ImageList属性组合来显示图像。

复选框

复选框 复选框和单选项的相似之处在于:它们都是供用户选择的选项。其不同之处在于:在单选项组中一次只能选择一个单选项,而在一组复选框中则可同时选择任意多项。

复选框 复选框有两个重要属性Checked和CheckState。Checked属性返回True或False。CheckState属性返回CheckState. Checked或CheckState. Unchecked。如果ThreeState属性被设置为True,CheckState属性还可返回CheckState.Indeterminate,此时,复选框显示为浅灰色状态,通常表示该选项下的多个子选项未完全选中。

组合框

组合框

组合框 组合框的风格及类型 组合框常见操作 组合框的通知消息

组合框的风格及类型 按照组合框的主要风格特征,可把组合框分为3类:简单组合框、下拉式组合框、下拉式列表框。

组合框的风格及类型 简单组合框和下拉式组合框都包含有列表框和编辑控件,但是简单组合框中的列表框不需要单击下拉按钮,是直接显示出来的;而当用户单击下拉式组合框中的下拉按钮时,下拉的列表框才被显示出来。下拉式列表框虽然具有下拉式的列表,却没有文字编辑功能。

组合框的风格及类型 组合框还有其他一些风格,这些风格可以在组合框的属性对话框中设置。

组合框的风格及类型 组合框中“Styles”选项卡下各选项的属性说明如下: “Y类”下拉列表框:设置组合框的类型,有Simple(简单)、Dropdown(下拉)、DropList(下拉列表框)3种。 “Owner draw” 下拉列表框:自画组合框,缺省为No。

组合框的风格及类型

组合框的风格及类型

组合框的风格及类型

组合框的风格及类型

组合框常见操作 组合框的操作是调用CComboBox成员函数来实现的。其CcomboBox类常用成员函数说明如下: int AddString(LPCTSTR lpszString):向组合框添加字符串。错误时返回CB_ERR;空间不够时返回CB_ERRSPACE。

组合框常见操作 int DeleteString(UINT nIndex):删除指定的索引项,返回剩下的列表项总数,错误时返回CB_ERR。 int InsertString(int nIndex,LPCTSTR lpszString):在指定的位置处插入字符串,若nIndex=-1时,即向组合框尾部添加。

组合框常见操作 Void ResetContent():删除组合框的全部项和编辑文本。 int SetCurSel(int nSelect):设置当前选择项。 int GetCount() const:获得组合框的项数。

组合框的通知消息 在组合框的通知消息中,有操作列表框发出的也有操作编辑框发出的。现说明如下: CBN_CLOSEUP:当组合框的列表关闭时发送此消息。 CBN_DBLCLK:当双击组合框的某项字符串时发送此消息。

组合框的通知消息 CBN_DROPDOWN:当组合框的列表打开时发送此消息。 CBN_SELENDCANCEL:当前选择项被取消时发送此消息。 CBN_SELENDOK:当用户选择一个项并按下“Enter”键或单击下拉箭头隐藏列表框时发送此消息。

组合框的通知消息 CBN_KILLFOCUS:当组合框失去键盘输入焦点时发送此消息。 CBN_SELCHANGE:当组合框的当前选择项将要改变时发送此消息。 CBN_SETFOCUS:当组合框获得键盘输入焦点时发送此消息。

在对话框中添加和编辑控件 控件是在系统内部定义的能够完成特定功能的控制程序单元。在应用程序中使用控件不仅能简化编程,还可完成常用的各种功能。 添加控件的方法 控件的移动、删除和复制 对话框中的控件布局

添加控件的方法 在对话框中添加控件的方法有如下两种: 在控件工具栏中选择某控件,此时的鼠标箭头在对话框中变成“+”形状。在对话框指定位置单击鼠标左键,则此控件被添加到对话框的相应位置,再拖动选择框可改变控件的大小和位置。

添加控件的方法 在控件工具栏中选择某控件,并按住鼠标键不放,在移动鼠标到对话框的指定位置的过程中,用户会看到一个虚线框,下面带有该控件的标记,然后释放鼠标,新添加的控件就出现在对话框中。

控件的移动、删除和复制 当单个控件或多个控件被选择后,按键盘的方向键或用鼠标拖动控件的选择框可移动控件。若在鼠标拖动过程中按住“Ctrl”键可复制控件,按“Delete”键可删除控件。

对话框中的控件布局 Visual C++ 6.0提供了一系列编辑对话框的控件布局工具。现说明如下:

对话框中的控件布局

对话框中的控件布局

对话框中的控件布局 与布局工具相对应的菜单命令,可选择“编排”命令下的命令选项,而且大部分的命令都有相应的快捷键,现说明如下: Align:对齐控制。 Space Evently:空间分布。 Make Same Size:使多个控件具有相同尺寸。

对话框中的控件布局 Arrange Buttons:按钮布置。 Center in Dialog:在对话框内居中。 Size in Content:按内容定义尺寸。 Auto Size:自动大小。

对话框中的控件布局 Flip:翻转。 Tab Order:设置“Tab”键顺序。 Guide Settings:网格、标尺等辅助工具的设置。 Test:测试对话框性能。

常用控件的应用例程 【例2-2】 为【例2-1】新建的对话框增加控件,构成一个学生个人信息登记的操作界面,包含学生姓名、学号、性别、学院及其他信息。

对话框的编程 前面已经为对话框添加了控件,在程序运行中我们仍然无法看到对话框,无法对对话框界面进行操作。为了使对话框工作起来,使用户和对话框实现交互功能,需要对对话框进行编程。

对话框的编程 【例2-3】 为【例2-1】在菜单栏中增加 “显示对话框”菜单项,下拉子菜单为“显示”。选择“显示”命令,打开用户自定义对话框。在对话框中进行相应信息的输入,单击按钮,在“信息”对应的文本框中显示输入的学生信息。 到这里,已经可以看到用户定义的对话框,下面增加代码实现用户与对话框的交互。

【例2-3】的运行结果

上 机 练 习 在对话框模式下创建一个简单的计算器,能进行加、减、乘、除运算.

lianxi2_1运行结果

习 题 在对话框模式下,建立一个用户登陆界面,当用户名为“学生”,口令为“student”时,打开“regist”对话框。

习 题 (2)编写一个程序,其中有一个汽车类vehicle,它具有一个需要传递参数的构造函数,类中的数据成员包括:车轮个数wheels和车重weight作为保护成员;小车类car是它的私有派生类,其中包含载人数passengers;卡车类truck是vehicle的私有派生类,其中包含载人数passengers和载重量payload。每个类都需有相关数据的输出方法。

3.1 2.2 对话框应用实例 【2.4】创建对话框 功能:在程序主界面出现之前弹出【密码】对话框,输入用户密码.如密码输入正确,程序继续执行,否则程序终止。(设密码为1925) 返回第3章

2.2.1 CWnd 类中有关对话框处理的常用函数 DoDataExchange:实现对话框框数据交换,不能直接调用,必须被UpdateData()函数调用。 UpdateData :实现控件与控件变量之间的数据的传送。 UpdateData(TRUE):将控件中的数据传送到变量中。 UpdateData(FALSE):将变量的值传送给控件。

程序的实现步骤 利用AppWizard生成单文档程序(Dialog ) 编辑口令对话框资源 添加控件和关联变量 添加代码

3.1 步骤1 生成程序框架(Dialog ) 项目名称: test3 选择单文档界面应用程序

步骤2 编辑口令对话框资源 3.1 ID: IDD_PASSWORD_DIALOG Caption: “口令” 步骤2 编辑口令对话框资源 ID: IDD_PASSWORD_DIALOG Caption: “口令” Class: CPasswordDialog 添加控件: IDC_STATIC Static Text Caption:请输入口令 IDC_STATIC Static Text Caption:口令为一个0 - 9999之间的整数 Client edge、Static edge和Modal frame选中 IDC_PASSWORD_EDIT Edit Box Password :选中 IDOK Button Caption:确定 IDCANCEL Button Caption:取消

步骤3 添加控件关联变量 步骤4 显示对话框 3.1 IDC_PASSWORD_EDIT int m_Password 步骤3 添加控件关联变量 IDC_PASSWORD_EDIT int m_Password Minimum Value : 0 Maximum Value : 9999 步骤4 显示对话框 在文件test3.cpp的头部,加入下面的包含语句 #include “PasswordDialog.h”

步骤4 显示对话框 3.1 { CpasswordDialog dlg; if (dlg.DoModal()==IDOK) 步骤4 显示对话框 BOOL test3::InitInstance() { CpasswordDialog dlg; if (dlg.DoModal()==IDOK) if (dlg.m_password !=1995) MessageBox(NULL,"口令错误!","错误",MB_ICONERROR+MB_OK); return FALSE; } else return TRUE;

3.2 程序的实现步骤 在上一节程序的基础上 添加菜单资源和菜单响应函数 编辑对话框资源和创建对话框类 添加消息响应函数和代码

步骤1 添加菜单资源和菜单响应函数 在“查看(V)”菜单中添加以下菜单项 Separator 3.2 步骤1 添加菜单资源和菜单响应函数 在“查看(V)”菜单中添加以下菜单项 Separator ID_VIEW_MODALDIALOG 模态对话框(&M)… ID_VIEW_MODALLESSDIALOG 非模态对话框(&E)… ID_VIEW_PROGRESSDIALOG 进度条对话框(&R)… ID_VIEW_PROPERTIES 属性页对话框(&P)… ID_VIEW_COMMONDIALOG 通用对话框(&C)…

步骤2 编辑对话框资源 3.2 ID: IDD_MODAL_DIALOG Caption: “Modal Dialog” 步骤2 编辑对话框资源 ID: IDD_MODAL_DIALOG Caption: “Modal Dialog” Class: CDialogModal 添加控件: IDC_SEX1 Radio Button Caption: 男 Group:选中 IDC_SEX2 Radio Button Caption: 女 IDC_INSTEREST1 Check Box Caption: 登山 Group:选中 IDC_INSTEREST2 Check Box Caption: 游泳 IDC_INSTEREST3 Check Box Caption: 看书 IDC_INSTEREST4 Check Box Caption: 玩游戏 IDC_COMBO Combo Box IDC_EDIT Edit Box

步骤3 添加控件关联变量 步骤4 显示对话框 3.2 IDC_COMBO CComboBox m_Combo; 步骤3 添加控件关联变量 IDC_COMBO CComboBox m_Combo; IDC_SEX1 CButton m_Radio; IDC_EDIT CString m_Edit; 步骤4 显示对话框 1. 菜单响应函数 void CDialogView::OnViewModaldialog() { CDialogModal m_Dlg; m_Dlg.DoModal(); }

3.2 2. 对话框响应函数 BOOL CDialogModal::OnInitDialog() { 2. 对话框响应函数 BOOL CDialogModal::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_Radio.SetCheck(1); //把"男"设置为默认值 m_Combo.InsertString(0,"小学"); //往Combo Box加入选项 m_Combo.InsertString(1,"初中"); m_Combo.InsertString(2,"高中"); m_Combo.InsertString(3,"大学"); m_Combo.InsertString(4,"本科以上..."); m_Combo.SetCurSel(0); //把"小学"设置为默认值 return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }

3.2 void CDialogModal::OnOk() { // TODO: Add your control notification handler code here CString str; str.Empty(); if(m_Radio.GetCheck()) str += "先生"; else str += "小姐"; str += "你好,你的爱好:"; BOOL flag=0; CButton *p; //得到指向IDC_INSTEREST1的指针 p = (CButton *)GetDlgItem(IDC_INSTEREST1); if(p->GetCheck()) //判断"登山"是否被选中 str += "登山 "; flag = 1; } 3.2

//得到指向IDC_INSTEREST2的指针 p = (CButton *)GetDlgItem(IDC_INSTEREST2); if(p->GetCheck()) //判断"游泳"是否被选中 { str += "游泳 "; flag = 1; } //得到指向IDC_INSTEREST3的指针 p = (CButton *)GetDlgItem(IDC_INSTEREST3); if(p->GetCheck()) //判断"看书"是否被选中 str += "看书 "; //得到指向IDC_INSTEREST4的指针 p = (CButton *)GetDlgItem(IDC_INSTEREST4); if(p->GetCheck()) //判断"玩游戏"是否被选中 str += "玩游戏 ";

if (!flag) { str += "不知道"; str += ",学历:"; int number; CString temp; number = m_Combo.GetCurSel(); //得到当前被选中项的序号m_Combo.GetLBText(number,temp); //得到序号为number的项的內容 str += temp; m_Edit = str; UpdateData(false); //更新文本框中的内容 }

3.3 3.3 非模态对话框 概念 非模态对话框弹出后,程序可以在不关闭该对话框的情况下继续执行,在转入到应用程序其他部分的代码时可以不需要用户做出响应。非模态对话框一般用来显示信息,或者实时地进行一些设置。 返回第3章

3.2 程序的实现步骤 在上一节程序的基础上 编辑对话框资源和创建对话框类 显示非模态对话框 实现对话框的功能

步骤1 编辑对话框资源 3.3 ID: IDD_MODALLESS_DIALOG Caption: “Modalless Dialog” 步骤1 编辑对话框资源 ID: IDD_MODALLESS_DIALOG Caption: “Modalless Dialog” Class: CDialogModalless 添加控件: ID号 控件 属性 IDC_TREE Tree Control 选中复选框Has buttons,Has lines和Lines at root IDC_LIST List Control Styles|View:Report ID_OK Button Caption:确定

步骤2 显示非模态对话框 1.在视类中添加对话框成员指针 ,并包含对话框头文件 public: 3.3 步骤2 显示非模态对话框 1.在视类中添加对话框成员指针 ,并包含对话框头文件 public: CDialogModalless * m_pModallessDlg; 并包含对话框头文件 #include“DialogModalless.h” 2.添加消息响应函数

3.3 void CDialogView::OnViewModallessdialog() { // TODO: Add your command handler code here //如果指针指向NULL,说明对话框还没有创建,则动态创建 if(m_pModallessDlg==NULL) m_pModallessDlg=new CDialogModalless; m_pModallessDlg->Create(IDD_MODALLESS_DIALOG,this); } //显示非模态对话框 m_pModallessDlg->ShowWindow(SW_SHOW);

3.3 3.修改视类的构造函数和析构函数 CDialogView::CDialogView() { // TODO: add construction code here m_pModallessDlg = NULL; //初始化指针 }   CDialogView::~CDialogView() if(m_pModallessDlg != NULL) delete m_pModallessDlg; //释放空间

步骤3 实现对话框的功能 3.3 1.添加控件关联变量 控件 变量类型 变量名 IDC_LIST CListCtrl m_List 步骤3 实现对话框的功能 1.添加控件关联变量 控件 变量类型 变量名 IDC_LIST CListCtrl m_List IDC_Tree CTeeCtrl m_Tree 2. 添加消息响应函数

3.3 BOOL CDialogModalless::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here //往List控件中插入一列 m_List.InsertColumn(0, "文件名", LVCFMT_LEFT, 150, -1); TV_INSERTSTRUCT TreeItem; HTREEITEM hTreeItem; TreeItem.hInsertAfter = TVI_LAST; TreeItem.item.mask = TVIF_TEXT|TVIF_PARAM;

//第一级 CString str = "D:\\"; TreeItem.hParent = TVI_ROOT; //父级为根部 TreeItem.item.pszText = str.GetBuffer(50); //设置字符缓冲区的大小并赋值 TreeItem.item.lParam = 1; //对于根目录,设置为1 hTreeItem = m_Tree.InsertItem(&TreeItem); //插入Tree控件中 int number = 0; //计算文件的个数 CFileFind file; BOOL bfind; CString temp;

//第二级 TreeItem.hParent = hTreeItem; TreeItem.item.lParam = 10;//对于子目录,设置为10 bfind = file.FindFile("D:\\*.*"); //查找D:盘根目录下的所有文件和目录 while(bfind)//如果找到 { bfind = file.FindNextFile(); //查找下一个 if(file.IsDirectory()) //判断是否为目录 //得到目录名并拷贝字符串 strcpy(TreeItem.item.pszText,file.GetFileName()); hTreeItem = m_Tree.InsertItem(&TreeItem); //插入Tree控件 }

else { //如不是目录,插入List控件 str = file.GetFileName(); //得到文件名 m_List.InsertItem(number,str); //把文件名插入第number行 number++; } return TRUE;}

void CDialogModalless::OnSelchangedTree(NMHDR. pNMHDR, LRESULT void CDialogModalless::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here CString temp,str; //获取当前被选择的tree view项 HTREEITEM CurItem = m_Tree.GetSelectedItem(); TV_ITEM TreeItem; TreeItem.hItem = CurItem; m_Tree.GetItem(&TreeItem); //获取指定tree view项的属性 //获得当前选中项的文本 temp = m_Tree.GetItemText(m_Tree.GetSelectedItem()); long CurlParam = TreeItem.lParam; //当前条目的序号 if(CurlParam != 1) //如果是子目录 //获取当前被选择项的父项 TreeItem.hItem = m_Tree.GetParentItem(m_Tree.GetSelectedItem()); m_Tree.GetItem(&TreeItem); CurItem = TreeItem.hItem; str = m_Tree.GetItemText(CurItem); str += temp; str += "\\"; } else str = temp; m_List.DeleteAllItems(); //删除控件中的所有项 CFileFind file; BOOL bFind; int number = 0; str += "*.*"; bFind = file.FindFile(str); //在str目录下查找 while(bFind) //如果找到 bFind = file.FindNextFile(); if(!file.IsDirectory()) //判断是否为目录 //如不是目录,插入List控件 temp = file.GetFileName(); //得到文件名 m_List.InsertItem(number,temp); //把文件名插入第number行 number++; UpdateData(false); //更新控件中的值 *pResult = 0; 3.3

3.4 进度条对话框 程序的实现步骤 在上一节程序的基础上 编辑对话框资源和创建对话框类 显示进度条对话框 实现对话框的功能 3.4 3.4 进度条对话框 程序的实现步骤 在上一节程序的基础上 编辑对话框资源和创建对话框类 显示进度条对话框 实现对话框的功能 返回第3章

步骤1 编辑对话框资源 3.4 ID: IDD_PROGRESS_DIALOG Caption: “Progress Dialog” 步骤1 编辑对话框资源 ID: IDD_PROGRESS_DIALOG Caption: “Progress Dialog” Class: CDialogProgress 添加控件: ID号 控件 属性 IDC_PROGRESS Progress Border:选中 IDC_TIME_SLIDER Slider   IDC_EDIT Edit Box IDC_PERCENT_SPIN Spin 选中Auto buddy和Set buddy integer IDC_PROGRESS_BUTTON Button Caption:进度条演示 IDC_QUIT_BUTTON Caption:退出

步骤2 显示进度条对话框 3.4 1.在视类中包含对话框头文件 #include "DialogProgress.h" 2.添加消息响应函数 步骤2 显示进度条对话框 1.在视类中包含对话框头文件 #include "DialogProgress.h" 2.添加消息响应函数 void CDialogView::OnViewProgressdialog() { // TODO: Add your command handler code here CDialogProgress dlg; dlg.DoModal(); }

步骤3 实现对话框的功能 3.4 1.添加控件关联变量 控件 变量类型 变量名 步骤3 实现对话框的功能 1.添加控件关联变量 控件 变量类型 变量名 IDC_PERCENT_SPIN CSpinButtonCtrl m_Spin IDC_PROGRESS CProgressCtrl m_Progrees IDC_TIME_SLIDER CSliderCtrl m_Time 2. 添加消息响应函数

3.4 BOOL CDialogProgress::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_Spin.SetRange(1,50); //给Spin控件设置数值范围 //把文本框的初始值设为1 GetDlgItem(IDC_EDIT)->SetWindowText("1"); m_Time.SetRange( 0, 10 ); //设置滑动的数值范围 m_Time.SetPos( 1 ); //设滑动控件的初始值设为1 m_Progress.SetRange( 0, 100 ); //设进度条的数值范围 return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }

3.4 void CDialogProgress::OnProgressButton() { // TODO: Add your control notification handler code here CString temp; GetDlgItem(IDC_EDIT)->GetWindowText(temp); //得到文本框中的内容 int percent = atoi(temp); if( (percent<1) || (percent > 50) ) //判断文本框中的内容是否在设定的范围之内 MessageBox("输入的数据超出范围!","Waring",MB_ICONWARNING|MB_OK); GetDlgItem(IDC_EDIT)->SetFocus(); //把焦点设在文本框上 return; //中断程序的运行,返回 } int nPercent, nTime, nCurPos = 0; nPercent = m_Spin.GetPos(); //得到Spin控件的值 nTime = m_Time.GetPos(); //得到滑动条上当前的值 m_Progress.SetPos( 0 ); //设置进度条当前的位置为0 while( (nCurPos+=nPercent) < 100 ) m_Progress.OffsetPos( nPercent ); //在进度条上偏移nPercent位置 Sleep( 1000 * nTime / 10 ); //延迟一定的时间间隔 m_Progress.SetPos( 100 ); //设置进度条当前的位置为100 3.4

3.5 3.5 属性页对话框 概念 属性页对话框将多个对话框集中起来,通过标签或按钮来激活各个页面。主要分为一般属性页对话框和向导对话框两类。在一般属性页对话框中,页面的切换通过点击不同的标签实现,在向导对话框中,页面的选择是通过点击“上一页”(Back)、“下一页”(Next)、“完成”(Finish)和“取消”(Cance)等按钮实现的。 返回第3章

3.5 程序的实现步骤 在上一节程序的基础上 编辑对话框资源和创建对话框类 显示属性页对话框 实现对话框的功能

步骤1 编辑对话框资源 3.5 ID: IDD_TAB_DIALOG Caption: “Tab Dialog” 步骤1 编辑对话框资源 ID: IDD_TAB_DIALOG Caption: “Tab Dialog” Class: CDialogTab 添加控件: ID号 控 件 属 性 IDC_TAB Tab Control Border:选中 IDC_STATIC1 Static Tex t Caption:学生守则:\n 1 ...\n 2 ...\n 3 ...\n 4 ...\n ...... ,Client edge:选中 IDC_SCROLLBAR Vertical Scroll Bar   IDC_STATIC2 Static Text Caption:市民公约:\n1 ...\n 2 ...\n 3 ...\n 4 ...\n ...... ,Client edge:选中 ID_BUTTON_CANCEL Button Caption:退出

步骤2 显示属性页对话框 3.5 1.在视类中包含对话框头文件 #include "DialogTab.h" 2.添加消息响应函数 步骤2 显示属性页对话框 1.在视类中包含对话框头文件 #include "DialogTab.h" 2.添加消息响应函数 void CDialogView::OnViewTab() { // TODO: Add your command handler code here CDialogTab dlg; dlg.DoModal(); }

步骤3 实现对话框的功能 3.5 1.添加控件关联变量 控件 变量类型 变量名 步骤3 实现对话框的功能 1.添加控件关联变量 控件 变量类型 变量名 IDC_SCROLLBAR CScrollBar m_ScrollBar IDC_TAB CTabCtrl m_Tab 2. 添加消息响应函数

3.5 BOOL CDialogTab::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here //对Tab控件进行初始化 TC_ITEM *m_pTCItem; m_pTCItem = new TC_ITEM; m_pTCItem->mask = TCIF_TEXT; //接收的值为文本 m_pTCItem->pszText = "学生守则"; //标签的名字 m_Tab.InsertItem(0,m_pTCItem); //插入一个新的标签 m_pTCItem->pszText = "市民公约"; m_Tab.InsertItem(1,m_pTCItem); //显示IDC_STATIC1、IDC_SCROLLBAR两个控件 GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW); GetDlgItem(IDC_SCROLLBAR)->ShowWindow(SW_SHOW); //隐藏IDC_STATIC2控件 GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE); //对滚动条进行初始化 m_ScrollBar.SetScrollRange(1,10); //设置滚动条的范围 m_ScrollBar.SetScrollPos(1); //设置当前滚动条的位置 return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } 3.5

3.5 void CDialogTab::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here //当前Tab控件所选中的标签 if( m_Tab.GetCurSel() == 0 ) //显示IDC_STATIC1、IDC_SCROLLBAR两个控件 GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW); GetDlgItem(IDC_SCROLLBAR)->ShowWindow(SW_SHOW); //隐藏IDC_STATIC2控件 GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE); } else //隐藏IDC_STATIC1、IDC_SCROLLBAR两个控件 GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_SCROLLBAR)->ShowWindow(SW_HIDE); //显示IDC_STATIC2控件 GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW); *pResult = 0; 3.5

3.5 void CDialogTab::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default //对滚动条进行重新定位 switch(nSBCode) case SB_THUMBPOSITION: //滚动的绝对位置 pScrollBar->SetScrollPos(nPos); //设置滚动条的位置 break; } case SB_LINEUP: //单击滚动条的上箭头 //把滚动条设置为当前位置减1的位置 pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() - 1); case SB_LINEDOWN: //单击滚动条的下箭头 //把滚动条设置为当前位置加1的位置 pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() + 1); case SB_PAGEUP: //单击滚动条当前位置的上面 //把滚动条设置为当前位置减5的位置 pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() - 5); case SB_PAGEDOWN: //单击滚动条当前位置的下面 //把滚动条设置为当前位置加5的位置 pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() + 5); CDialog::OnVScroll(nSBCode, nPos, pScrollBar);

3.6 3.6 使用通用对话框 概念 在MFC中,提供了一些通用对话框类来实现Windows系统提供的通用对话框,包括文件对话框、颜色对话框、字体对话框、打印对话框和查找与替换对话框等,这些通用对话框类都是从CCommonDialog类派生出来的。对于每个通用对话框,都可以实现相应的特定功能。 返回第3章

3.6 程序的实现步骤 在上一节程序的基础上 编辑对话框资源和创建对话框类 显示对话框 实现对话框的功能

步骤1 编辑对话框资源 3.6 ID: IDD_COMMON_DIALOG Caption: “Common Dialog” 步骤1 编辑对话框资源 ID: IDD_COMMON_DIALOG Caption: “Common Dialog” Class: CDialogCommon 添加控件: ID号 控 件 属 性 IDC_STATIC Static Text Caption:请选择一个文本文件 IDC_EDIT Edit Box Read-only:选中 IDC_OPEN_BUTTON Button Caption:打开 ID_QUIT Caption:退出

步骤2 显示对话框 3.6 1.在视类中包含对话框头文件 #include "DialogCommon.h" 2.添加消息响应函数 步骤2 显示对话框 1.在视类中包含对话框头文件 #include "DialogCommon.h" 2.添加消息响应函数 void CDialogView::OnViewCommondialog() { // TODO: Add your command handler code here CDialogCommon dlg; dlg.DoModal(); }

步骤3 实现对话框的功能 3.6 void CDialogCommon::OnOpenButton() { 步骤3 实现对话框的功能 void CDialogCommon::OnOpenButton() { // TODO: Add your control notification handler code here //声明一个CFileDialog对象,并设置他的格式 CFileDialog cdlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "text file(*.txt)|*.txt|All file(*.*)|*.*||", this); if(cdlg.DoModal() == IDOK) //单击OK按钮 //从文件对话框中取得文件名并显示在文本框中 GetDlgItem(IDC_EDIT)->SetWindowText(cdlg.GetPathName()); UpdateData(false); //更新 }

3.6 void CDialogCommon::OnQuit() { // TODO: Add your control notification handler code here OnOK(); } 返回第3章