对话框及常用控件课件.ppt

上传人(卖家):三亚风情 文档编号:3292601 上传时间:2022-08-17 格式:PPT 页数:98 大小:1.51MB
下载 相关 举报
对话框及常用控件课件.ppt_第1页
第1页 / 共98页
对话框及常用控件课件.ppt_第2页
第2页 / 共98页
对话框及常用控件课件.ppt_第3页
第3页 / 共98页
对话框及常用控件课件.ppt_第4页
第4页 / 共98页
对话框及常用控件课件.ppt_第5页
第5页 / 共98页
点击查看更多>>
资源描述

1、 本章内容主要包括包含控件的对话框资源的建立,对话框类和对话框资源的关联,利用对话框类来操纵对话框资源,对话框的消息处理,对话框框中控件的访问。要求了解控件的使用、对话框资源的建立方法和常见属性的含义,熟悉利用控件属性,对话框设置控件属性的方法及常见控件属性的含义,掌握对对话框消息WM_INITDIALOG的响应,会利用类向导添加控件变量和消息映射函数,熟练掌握控件类型的无关访问。教学要点对话框及常用控件 8.1 对话框概述 8.2 对话框程序的创建 8.3 标准Windows控件8.1 对话框概述 界面是Windows程序设计中的一种重要的接口对话框和控件也是组成界面的重要元素。如何编写基于

2、对话框的应用程序,在界面中放置什么样的控件。当创建了一个包含各种控件的对话框资源后,控件如何来响应用户的各种操作。本节内容:本节内容:8.1.1 对话框简介 8.1.2 对话框的分类 8.1.3 对话框的组成8.1.1 对话框简介 对话框是一种用户界面,它为用户提供了一种标准的处理数据的方法。因为大部分的对话框是作为对菜单的单击响应而显示出来的(在Word软件中,单击菜单项后有的菜单,看都会出现哪些对话框),因此对话框常常被看作是用户菜单命令的扩展。从程序员角度来看,对话框和控件都是窗口,查看MSDN中的MFC组织图可以看到,它们都是从CWnd类派生来的,这正好说明了“对话框和控件都是窗口”。

3、因此,对对话框的操作,经常要使用窗口的成员函数来进行。8.1.2 对话框的分类 1模态对话框 在对话框关闭之前,用户无法在应用程序的其它窗口中进行工作的对话框称为模态对话框。例如Windows的各种应用软件中的Open File 对话框,用户不能在应用程序的其它地方工作,直到对话框关闭。2非模态对话框 对话框保留在屏幕的同时,用户还可以在应用程序其它窗口中进行工作的对话框称为非模态对话框。例如,Word字处理软件中的Find 和Replace对话框就是非模态对话框的一个很好的例子。8.1.3 对话框的组成 对话框模板 对话框模板定义了对话框的特性(比如大小、位置和风格)以及对话框中每个控件的类

4、型和位置。程序员不仅可以使用对话框资源编辑器建立对话框资源模板外,还可以根据需要在内存中创建对话框模板。当对话框模板创建后,程序员好可以在创建和管理对话框时动态地改变部分控件的信息,如禁止、变灰、改变标题和大小。对话框模板可以看作对话框应用程序的一种用户接口,用户在应用程序的使用中,看到的都是对话框模板中的东西。8.1.3 对话框的组成(续)对话框类 从CDialog类派生的对话框类提供编程接口来管理与对话框模板相关联的对话框。CDialog类的许多成员函数与对话框编程密切相关,可供程序员调用。由于对话框是一种窗口,因此相应的对话框类必须与一个Windows窗口相联系,而对话框资源模板就是用于

5、创建这个Windows窗口及其包含在其中的控件。对话框类可以看作对话框应用程序的一种程序员接口,用户对应用程序操作,后台调用的都是该类的成员函数来完成的。8.2 对话框程序的创建8.2.1 一个对话框程序 8.2.2 创建对话框资源模板 8.2.3 利用对话框类CDialog操纵对话框 8.2.4 初始化对话框 8.2.5 对话框的调用 8.2.6 对话框的消息处理 8.2.1 一个对话框程序 1程序功能 该应用程序具有认证的功能:当该程序运行时,首先弹出一个“密码验证”对话框,让用户输入其用户名和密码。用户需要输入用户名“good”和用户密码“good”后才能进入主界面,若有一个输入错误,都

6、不能进入。2程序类型 该程序重点演示一个模态对话框,它是利用AppWizard创建的一个基于MFC的单文档应用程序。在该程序的主界面出现之前显示“密码验证”对话框。静态图片编辑框静态文本组框按钮复选框单选框组合框列表框列表视图树形视图标签8.2.2 创建对话框资源模板资源文件(.rc)中有关描述对话框模板的文本 模板文件 对话框模板描述了对话框中各控件类型和排列位置,不论是模态还是非模态对话框,都需要对话框模板。对话框模板存储在对话框资源中,这和菜单类似。对话框资源中存储的是对话框脚本,为了了解资源的脚本,我们查看一下脚本文件MfcExam.rc,屏幕看到的是生成的单文档应用程序的对话框的脚本

7、。8.2.3 利用对话框类CDialog操纵对话框 1利用类向导创建对话框类 进入类向导后,如果从未给刚才建立的对话框资源模板建立对应的对话框类,则类向导会发现这是一个新的对话框资源模板,类向导提问是否要为这个新的对话框资源模板创建一个新的类。选择“OK”按钮,会弹出一个Create New Class的对话框。若选择Cancel后,也可以在类向导中通过增加一个新类的方法来添加对话框资类。不管哪种情况,都是在所出现的对话框的Name栏中输入对话框类的名字CPassWordDlg,Bass Dialog栏选择CDialog,Dialog ID栏选择先前创建的新对话框源模板的标识符IDD_DIAL

8、OG_USER(如图所示)。对话框类的建立界面 2利用类向导添加对话框类的成员变量 为了对编辑框输入的数据进行控制,需要在对话框类中增加与这些控件有关的类的成员变量。按Ctrl+W打开类向导对话框,选择MFC ClassWizard对话框中的Member Variable标签,然后在Class Name栏中选择对应的CPassWordDlg对话框类,此时在下面该类的变量列表中会出现该对话框中的各控件的资源ID号。双击Controls IDs列表中的编辑框控件的资源ID号ID_EDIT_USERNAME,在Category栏中选择Value(值变量)(还有一种控件型变量Control),在Val

9、ue Type栏中选择CString类型。这些操作的界面如图所示。用用样的方法再增加一个变量m_strPassword。利用对话框类CDialog操纵对话框(续)按OK按钮后,这两个类的成员变量m_strUserName和m_strPassword就被加入到CPasswordDlg类的定义中,定位到该类的头文件PassDlg.h中,找到如下的几行代码:class CPassWordDlg:public CDialog/Constructionpublic:CPassWordDlg(CWnd*pParent=NULL);/standard constructor/Dialog Data/AFX_

10、DATA(CPassWordDlg)enum IDD=IDD_DIALOG_USER;CStringm_strPassword;/通过类向导增加的字符串变量,保存密码CStringm_strUserName;/通过类向导增加的字符串变量,保存用户名称/AFX_DATA8.2.4 初始化对话框 如何初始化各种类型的数据对象是很重要的,当处理像对话框这样复杂对象时,由于它的初始化工作放在多个阶段,所以需要注意次序问题。对话框的初始化工作可以在下面的三个阶段进行:构造函数、对WM_CREATE消息的响应和对WM_INITDIALOG消息的响应。8.2.4 初始化对话框(续)1在构造函数中初始化 从C

11、+的观点看,在类的构造函数中,应该初始化类的数据成员,但是,在MFC应用程序中应尽量避免在构造函数中完成太多的工作,因为构造函数没有返回失败条件的方法,无法报告其中的失败信息(除非使用异常处理)。在前面的例子中,变量m_strPasswor和m_strUserName的初始化就是在对话框类的构造函数中进行的,下面是构造函数的实现代码。CPassWordDlg:CPassWordDlg(CWnd*pParent/*=NULL*/):CDialog(CPassWordDlg:IDD,pParent)/AFX_DATA_INIT(CPassWordDlg)m_strPassword=_T();/成员

12、变量初始化为空m_strUserName=_T();/AFX_DATA_INIT 可见在对话框的构造函数中主要是对对话框的数据成员变量进行初始化。8.2.4 初始化对话框(续)2在WM_CREATE的消息映射函数中初始化 由 于 对 话 框 也 是 窗 口,它 在 窗 口 创 建 时 会 收 到WM_CREATE消息,该消息的响应函数是OnCreate()。这样,就能在窗口创建中做一些初始化工作。尽管用户可能在WM_CREATE消息处理函数中进行一些数据成员的初始化工作,但更通常的做法是在对话框中的所有控件都建立起来之后,响应消息WM_INITDIALOG时,对数据成员进行初始化。3在WM_I

13、NITDIALOG的消息映射函数中初始化 在对话框创建时,会收到WM_INITDIALOG消息,该消息的响应函数是OnInitDialog()。在得到了8.2.4 初始化对话框(续)WM_INITDIALOG消息时,对话框处于一个特殊的状态,首先,当我们获得该消息时,对话框框架已经建立起来,对话框的窗口句柄已经有效;其次,各个控件也建立起来并放在适当的地方;第三,对话框控件还没有显示出来。因此,一般在OnInitDialog()函数中作一些影响对话框外观的初始化工作,如可以设置或优化对话框中各个控件的外观、大小尺寸、位置及其它内容。一般来说,在创建对话框及其所有的控件后,就在对话框即将显示之前

14、将调用CDialog的成员函数OninitDialog()来初始化对话框。对于模态对话框,在调用DoModal()时调用OninitDialog(),而对于非模态对话框,在调用Create()时调用OninitDialog()。8.2.5 对话框的调用 由于对话框是一种输入界面,因而牵涉到在程序的什么地方、什么时候调用的问题,这实质上是创建的对话框类和程序如何交互的问题。根据不同的应用程序类型和程序的功能,其调用的方法也不同。1在程序主窗口显示前调用 我们已经创建了密码验证MfcExam程序的对话框模板IDD_DIALOG_USER、对话框类CPassWordDlg,紧接着编写调用对话框的代码

15、。由于密码验证是在应用程序的主框架显示之前进行,因此密码验证对话框的调用必须在应用程序主框架显示之前就完成,很显然它不能在视图类中靠和用户交互进行。8.2.5 对话框的调用(续)应用程序类是控制整个应用程序的运行,它建立的时间最早,因此我们可以把对话框的调用放到应用程序类中的InitInstance()中完成。(1)在应用程序类中添加文件包含宏 打开应用程序类的实现文件MfcExamApp.cpp,在文件的头件的定义处,添加文件包含的宏指令:#include stdafx.h#include MfcExam.h#include MainFrm.h#include MfcExamDoc.h#in

16、clude MfcExamView.h#include“PassWordDlg.h”/需要使用用户登陆对话框,必须包含它#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE=_FILE_;#endif(2)超载应用程序类的虚函数InitInstance()BOOL CMfcExamApp:InitInstance()./以下为用户添加的代码CPassWordDlg dlg;/如果点击“取消”按钮if(dlg.DoModal()!=IDOK)return FALSE;/如果输入的用户名、密码不正确if(st

17、rcmp(dlg.m_strPassword,good)!=0)|(strcmp(dlg.m_strUserName,good)!=0)MessageBox(NULL,用户名或密码错误,请重试!,错误信息,MB_OK|MB_ICONERROR);return FALSE;8.2.5 对话框的调用(续)2在基于对话框的应用程序中调用 基于对话框的应用程序的类型比较简单,当程序运行后,就自动显示一个对话框的界面。倘若我们程序的输入界面就是它(例如Windows中的计算器程序),则对话框的调用的代码在向导中已经完成,我们没有必要编写,但必须知道在什么地方调用的。3通过用户交互对象菜单、工具栏调用 在

18、基于文档/视图结构的应用程序中,由于对话框大部分用作用户的输入与输出界面,因此对话框的调用应该在视图类中完成。这在前面和后面的章节都会出现(自己琢磨)。一般来说,对话框的调用在选择菜单项、工具栏、加速键或按了鼠标键、键盘键等触发。8.2.6 对话框的消息处理 1对话框本身的消息 一般在一个对话框中有多个按钮,其中只有一个按钮是缺省按钮。在缺省按钮的四周有一个虚线矩形框,缺省按钮的作用在于用户不需要用鼠标单击它,只需按回车键就等同于单击它,这减轻了用户的负担。在应用程序中,要想改变或设置对话框中的缺省按钮,只需要使用SendMessage()发送一个对话框的消息 DM_GETDEFID或DM_S

19、ETDEFID即可。2窗口消息 由于对话框是窗口,所以WM_开始的Windows消息,在对话框中类中都可以处理,在ClassWizard窗口的MessageMaps选项页的Messages列表框中显示的就是对话框可以处理的消息,其中包含了很多窗口消息。8.2.6 对话框的消息处理(续)3控件通知消息 我们可以像对待框架窗口类和视图类一样,向对话框中的派生类中为WM_消息增加消息映射,但却不能对话框中控件的通知消息增加ON_COMMAND消息映射宏,因为控件的通知消息包含有不同的通知代码。控件的通知消息主要指一个对话框中所包含的控件自己可以接收到的消息。例如EN_CHANGE就是一个编辑框内容改

20、变的控件通知消息(Edit Notification Changed)。在Windows对话框应用程序中,当要对其中的控件进行全面的控制时,就要通过类向导对对话框中的控件添加控件的通知消息映射。【例 8-2】在 前 述 程 序 的 基 础 上,通 过 发 送 消 息DM_SETDEFID将密码对话框中的缺省按钮设置为“确定”,在WM_INITDIALOG的消息响应函数中将“取消”按钮的大小 改 变,同 时 处 理“用 户 名 称”编 辑 框 的 通 知 消 息EN_CHANGE。步骤如下:(1)利 用 类 向 导 添 加 对 话 框 类 C P a s s W o r d D l g 对WM_

21、INITDLG的消息映射函数OnInitDialog(),并编写代码。(2)利用类向导添加编辑框控件IDC_EDIT_USERNAME的通 知 消 息 E N _ C H A N G E 的 响 应 函 数OnChangeEditUsername(),并编写代码。void CPassWordDlg:OnChangeEditUsername()UpdateData(true);/将编辑框输入的内容更新到变量m_strUserName中if(m_strUserName.Compare(BenLaDeng)=0)/如果在用户名称编辑框中输入“BenLaDeng”,则找见了系统的后门MessageBo

22、x(恭喜您找到后门,不用输入密码就可进入系统);m_strUserName=good;m_strPassword=good;UpdateData(false);SendMessage(WM_COMMAND,IDOK,BN_CLICKED);/向确定按钮发送单击消息BN_CLICKED8.3标准Windows控件本节内容 8.3.1 控件简介 8.3.2 静态控件 8.3.3 按钮控件 8.3.4 编辑控件 8.3.5 列表框控件 8.3.6 组合框控件 8.3.7 控件的类型无关访问 8.3.8 动画控件 8.3.1 控件简介 在Windows应用程序中,菜单系统是用来实现用户与程序进行交互最

23、基本的途径,但仅仅使用菜单来完成这种交互,往往并不方便,有时甚至是难以胜任的。其实,Windows操作系统的一个重要特性就是友好的用户界面。对于编程人员,它也提供了各种控件来实现直观、方便、快捷的交互。在上一节我们使用过对话框,在对话框中的静态文本、图像以及各种按钮都是控件。控件(Control,也称为控制框)是一种子窗口,应用程序用它来与其它窗口一起完成简单的输入输出操作。作为一般窗口,控件具有许多通用窗口属性,因此控件可以像操作窗口那样使用ShowWindow()、MoveWindow()等窗口管理函数来显示或隐藏控件、改变控件的位置和尺寸以及其它的操作。8.3.1 控件简介(续)控件创建

24、方式有两种。一种是在对话框模板中放置控件,当应用程序启动该对话框时,Windows系统就会为对话框创建控件,这种方法是可视化的编程方式,所见即所得,本书的大多数对话框程序都使用这种方式来创建。另 一 种 方 式 是 通 过 C r e a t e W i n d o w()或CreateWindowEx()函数来创建控件,这时必须指定控件的窗口类,每个控件都应属于某个窗口类,这个窗口类可以在应用程序中定义并注册,但在更多的情况下,程序员使用的Windows系统预定义好的窗口类。静态图片编辑框静态文本组框按钮复选框单选框组合框列表框列表视图树形视图标签8.3.2 静态控件 静态控件在MFC中是靠

25、CStatic类来管理的,它是一种单向交互的控件,只能支持应用程序的输出,而不能用来响应用户的输入,也就是说,它可以接收消息,但基本上不会发送消息。静态控件是多种多样的。在VC集成环境中,Controls工具栏中的Static Text(静态文本)、Picture(图片控件)和Group Box(成组框)分别用来创建文字、图形和由一个方框和一个字符串组成的成组框这三种静态控件。Static Text、Picture和Group Box均对应CStatic类型的对象,通常可选用对话框模板编辑器自动提供的缺省标识符IDC_STATIC,此时静态控件只是起到一种标识的作用。8.3.2 静态控件(续)

26、1常见属性 在对话框的应用程序中,想要查看某类控件的属性,先选中该类控件,然后按Alt和回车键,就会弹出控件的属性设置对话框。下图是静态控件的属性窗口。图8.6 静态控件属性设置窗口图 8.3.2 静态控件(续)2常用方法 静态控件类CStatic的成员函数见下表。成员函数成员函数说明说明SetBitmap指定在静态控件中要显示的位图GetBitmap获取用SetBitmap设置的位图的句柄SetIcon指定在静态控件中要显示的图标资源GetIcon获取用SetIcon设置的图标的句柄8.3.2 静态控件(续)3常用消息 由于静态控件只用作输出,而不用作输入,因此一 般 不 处 理 它 的 消

27、 息,但 它 也 有 一 个BN_CLICKED的消息。要想处理该消息,该控件的属性必须选中属性窗口Style选项页下的Notify复选框,并且修改其默认的资源标识符IDC_STATIC为其它的值。8.3.3 按钮控件 按钮控件是一个小的矩形窗口,它们可以被单独或成组使用。典型的按钮控件有下压按钮(push button)、单选按钮(radio button)和复选框(check box),它们在外观和使用上都有很大的差异,但在MFC中都是用一个类CButton来封装的。下压按钮通常立即产生某个动作,执行某个命令,因此又叫命令按钮。单选按钮的外形是一个圆圈,当它被选中时,就会出现一个小黑点。复

28、选框为一个空心方框,当它被选中时,就会出现一个“”标记。通常复选框只有选中和未选中两种状态。8.3.3 按钮控件(续)1常见属性 在对话框的应用程序中,选中所添加的按钮控件,然后按ALT和回车键盘,就会弹出按钮控件的属性设置对话框,如图所示。8.3.3 按钮控件(续)按钮控件常见属性有:Visible(可视性)、Caption(显示在控件上的标签文本)、Disableed(是否为不接收用户输入的禁止状态)、Group(控件不仅可以单独使用,而且还可以几个编成一组。该属性用于指定同组控件中的第一个控件。在同组控件中用户可以使用箭头键在控件之间移动,它以Tab order为序,在该控件之后的所有该

29、属性值为False的控件将被视为同一组控件,直到遇上Group属性为True的控件为止)、Table stop(是否可以使用TAB键来定位到该控件)等。8.3.3 按钮控件(续)2常用方法 按钮控件的操作是通过CButton类的成员函数来操作,下表为按钮类CButton的成员函数。成员函数说明GetState获取按钮控件的检查状态、高亮状态和焦点状态SetState设置按钮控件的高亮状态GetCheck获取按钮控件的检查状态SetCheck设置按钮控件的检查状态GetButtonstyle获取有关按钮控件风格的信息SetButtonstyle设置按钮的风格GetBitmap获取由SetBitm

30、ap设置的位图的句柄SetBitmap确定要在按钮上显示的位图 8.3.3 按钮控件(续)3常用消息 下表为常见的按钮通知消息中附带的通知代码。通知码动作描述BN_CLICKED按钮被单击BN_PUSHED按钮被按下BN_DISABLE按钮不可用BN_SETFOCUS按钮获得键盘输入焦点8.3.4 编辑控件 编辑控件是一个让用户从键盘输入并编辑文字的矩形窗口,用户可以通过它方便地输入各种文字、数字或者口令,也可使用它来编辑或修改简单的文本文件。若用户在编辑控件内单击鼠标,或者按Tab键,就可以选中一个编辑控制框,并赋予它输入焦点。被选中后,编辑控制框中将显示其文本和一个表明插入点的位置的闪烁的

31、插入符,然后用户就可以用键盘或者鼠标来输入文本,移动插入点,或者选择将移动或删除的文本。1常见属性 在对话框应用程序中,选中所添加的编辑框控件,然后按ALT和回车键,就会弹出编辑框控件属性设置对话框。8.3.4 编辑控件(续)2常用方法 编辑框控件操作是通过CEdit类的成员函数来操作,表中为编辑框控件类CEdit的成员函数。成员函数成员函数说明说明GetSel获取文本编辑框中当前选择的起始字符和终止字符位置ReplaceSel用指定文本替换文本编辑框中的当前选择SetSel选择文本编辑框中的一个字符范围GetModify确定文本编辑框中内容是否已被修改SetModify设置或清除文本框控件的

32、修改标志SetReadonly设置文本框控件的只读状态GetPasswordChar获取用户输入文本时在文本框控件内显示的口令字符GetRect获取文本框控件的矩形LimitText限制用户可输入文本框控件的文本长度SetPasswordChar设置或删除当用户输入文本时在文本框控件中显示的口令字符Undo取消上一次文本框控件操作Clear清除文本框控件内的当前选择Copy将文本框控件中的当前选项以CF_TEXT格式拷贝到剪贴板中Paste将数据从剪贴板拷贝到文本框控件中的当前光标位置处GetLineCount获取多行文本框控件的行数GetLine从文本框控件内获取一行文本3常用消息表中是常见

33、的编辑框通知消息。通知消息通知消息用户操作用户操作EN_CHANGE用户已经修改了编辑控制框中的文本,与EN_UPDATE通知消息不同,这条消息在Windows刷新显示器之后发送EN_HSCROLL用户单击了编辑控制框的水平滚动条,Windows在更新屏幕之前,先发送这条消息。EN_MAXTEXT当编辑控制框不具有ES_AUTOHSCROLL样式,而要插入的字符数超出了编辑控制框的宽度时,或者编辑控制框不具有ES_AUTOVSCROLL样式,而要插入的总行数超出了编辑控制框的高度时,都发送这条消息EN_SETFOCUS当文本编辑控制框接收输入焦点时发送这条消息EN_UPDATE用户已经改变了编

34、辑控制框中的文本,且Windows即将显示新的文本。Windows在格式化了新的文本后,但在显示之前发送这条消息,以便应用程序可以重新确定编辑控制框窗口的大小。EN_VSCROLL用户单击了编辑控制框的垂直滚动条,Windows在更新显示屏幕之前,发送这条消息 4实例 【例8-3】一个演示静态文本控件、按钮控件和编辑框控件的程序。它能求数一和数二的最大公约数和最小公倍数。(1)创建一个基于对话框的应用程序GcdExam,向导生成的每个步骤都使用缺省的。(2)在对话框资源IDD_GCDEXAM_DIALOG中添加控件如下图所示。控件类型属性值对应的成员变量静态文本控件IDIDC_STATIC C

35、aption数一 IDIDC_STATIC Caption数二 成组框IDIDC_STATIC Caption操作数 IDIDC_STATIC Caption操作结果 编辑框控件IDIDC_EDIT1int m_nSource1 IDIDC_EDIT2int m_nSource2 IDIDC_EDIT3int m_nResult单选按钮IDIDC_RADIO1 Caption最大公约数 IDIDC_RADIO2 Caption最小公倍数 按钮控件IDIDOK Caption退出 在对话框中,设置控件的属性如下表所示例8-3(续)(3)添加单选按钮的消息映射 前 面 讲 的 所 有程序中的消息映

36、射 的 添 加 都 是 通 过ClassWizard来进行的,但有时想要处理的消息在类向导中没有,或者需要对一些特殊的情况要处理(如本例子,想用一个消息响应函数OnGcd响应多个ON_COMMAND消息)时,当有很多个命令的功能类似,可以设置它们的ID号为连续的,再在消息映射中处理。ClassWizard不支持这种功能,程序员必须手工在消息映射中添加这类映射项。对于本程序,我们希望单击“最大公约数”或“最小公倍数”时,都执行同一个消息映射函数OnGcd(UINT nID),然后在映射函数再做进一步的处理。手工添加消息映射函数的步骤为:对话框类CGcdExamDlg头文件GcdExamDlg.h

37、中添加消息映射函数原型说明。class CGcdExamDlg:public CDialogpublic:CGcdExamDlg(CWnd*pParent=NULL);/standard constructor /Generated message map functions/AFX_MSG(CGcdExamDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID,LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_ms

38、g void OnGcd(UINT nID);/手工添加的消息映射函数原型说明/AFX_MSGDECLARE_MESSAGE_MAP();在对话框类CGcdExamDlg的实现文件GcdExamDlg.cpp中添加消息映射。BEGIN_MESSAGE_MAP(CGcdExamDlg,CDialog)/AFX_MSG_MAP(CGcdExamDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_COMMAND_RANGE(IDC_RADIO1,IDC_RADIO2,OnGcd)/AFX_MSG_MAPEND_MESSAGE_MAP(

39、)在对话框类在对话框类CGcdExamDlg的实现文件的实现文件GcdExamDlg.cpp中实现消息映射函数。中实现消息映射函数。void CGcdExamDlg:OnGcd(UINT nID)UpdateData(true);/将前台输入到界面中的数据保存到后台变量中将前台输入到界面中的数据保存到后台变量中int p,q,r;p=min(m_nSource1,m_nSource2);/p为两者的较小者为两者的较小者q=max(m_nSource1,m_nSource2);/q为两者的较大者为两者的较大者if(nID=IDC_RADIO1)/求最大公约数的话求最大公约数的话(利用欧几里德算法

40、利用欧几里德算法)while(r=q%p)q=p;p=r;m_nResult=p;/p为最大公约数,放到变量为最大公约数,放到变量m_nResult中显示中显示if(nID=IDC_RADIO2)/求最小公倍约数的话求最小公倍约数的话r=p;/p为较小者为较小者while(p%q!=0)/p不能被不能被q整除的话整除的话p+=r;/一直累加原较小者,直到累加结果能被原较大者整除一直累加原较小者,直到累加结果能被原较大者整除m_nResult=p;/p为最大公约数,放到变量为最大公约数,放到变量m_nResult中显示中显示UpdateData(false);/将后台更改的数据送到前台加以显示将

41、后台更改的数据送到前台加以显示8.3.5 列表框控件 列表框是一个放有用户可以选择的对象列表项的控制窗口,这些列表项一般是以字符串形式或图形形式来给出。它与单选按钮组或复选框组一样,都可以让用户在其中选择一个或多个项,但不同的是,列表框中项的数目是可灵活变化的,程序运行时可往列表框中添加或删除某些项。并且当列表框中的数目较多,列表框不能一次全部显示时,就可以提供滚动条来拓展显示范围。8.3.5 列表框控件(续)1常见属性 在对话框的应用程序中,选中所添加的列表框控件,然后按鼠标右键弹出菜单,选择“Properities”菜单项,就会弹出列表框控件的属性设置对话框,如下图所示。8.3.5 列表框

42、控件(续)2常用方法 列表框控件的操作是通过CListBox类的成员函数来操作,下表为列表框控件类CListBox的成员函数。成员函数成员函数说明说明GetCount获取列表框中字符串的数目获取列表框中字符串的数目GetItemDataPtr获取一个指向列表框项的指针获取一个指向列表框项的指针GetSel获取一列表框项的选择状态获取一列表框项的选择状态SetColumnWidth设置一多列列表框的宽度设置一多列列表框的宽度GetCurSel获取列表框中当前所选串的索引(从零开始)获取列表框中当前所选串的索引(从零开始)SetCurSel选择一列表框串选择一列表框串AddString在列表框中增

43、加一个串在列表框中增加一个串DeleteString从列表框中删除一个串从列表框中删除一个串InsertString在列表框中指定位置处插入一个串在列表框中指定位置处插入一个串ResetContent清除列表框中所有列表项清除列表框中所有列表项FindString在列表框中查找一个串在列表框中查找一个串SelectString查找并选择单列表框中的一个列表框串查找并选择单列表框中的一个列表框串8.3.5 列表框控件(续)3常用消息 列表框的操作,不仅可以调用CListBox类的成员函数来进行,还可以通过发送消息给列表框来进行。(1)发送消息到列表框 当列表框创建出来之后,往往要添加、删除、修改

44、或检查列表框中的项,列表框的项除了用字符串来指定外,还往往通过索引来确定。索引表明某项在列表框中排列的位置,它以0为基准,即列表框中的第一项索引为0,第二项索引为1,依此类推。8.3.5 列表框控件(续)(2)列表框发出的通知消息 当列表框发生了某个事件,如用户双击了列表框中的某一项,列表框就会向其所属的主窗口发送一条通知消息。列表框的通知消息是以带参数的WM_COMMAND消息的形式来发送的。8.3.5 列表框控件(续)这时WM_COMMAND的wParam参数的高位字就是通知代码,低位字是列表框的资源标识符,lParam参数则是列表框的句柄。常见的列表框通知消息有三条:LBN_SELCHA

45、NGE表示列表框中的选择将要改变,LBN_DBLCLK 表示用户双击了列表框中的某一项,LBN_SELCANCEL表示用户取消了对列表框中的某一项选择。消息消息作用作用参数参数LB_ADDSTRING添加字符串到列表框中wparam=0,lParam=字符串地址LB_INSERTSTRING添加一个字符串到指定的位置处wparam=索引,lParam=字符串地址LB_DELETESTRING删除指定的字符串wparam=索引,lParam=0LB_RESETCONTENT删除列表框中的全部项wparam=0,lParam=0LB_SETCURSEL设置单选列表框中的当前选择项wparam=项的

46、索引,lParam=0LB_GETTEXT获取指定项的字符串waram=指定项的索引,lParam=字符串地址,返回字符串长度LB_SELSEL选择多项列表框中的某个项waram=选择标志,lParam=指定项的索引8.3.6 组合框控件 一个组合框是一个列表框和编辑框控件或者静态文本框控件的组合。控件的列表部分可以始终显示,也可以当用户单击了下拉箭头时才打开,当前选择的内容在静态文本框或编辑框中显示。另外,若组合框具有下拉列表风格,用户可以键入列表框中的某个选项的开始字符来选择它。如果列表框的内容是可见的,列表框将把开头内容与用户键入内容相匹配的第一项高亮度显示。8.3.6 组合框控件(续)

47、1.常见属性 在对话框的应用程序中,选中所添加的组合框控件,然后按鼠标右键弹出菜单,选择Properities菜单项,就会弹出组合框控件的属性设置对话框,如下图所示。8.3.6 组合框控件(续)2.常用方法 组合框控件的操作是通过CComboBox类的成员函数来操作,下表为组合框控件类CcomboBox常用的成员函数。成员函数成员函数功能描述功能描述GetCount获得组合框之列表框中选择项数目获得组合框之列表框中选择项数目GetCurSel获得组合框之列表框中当前选择项的下标获得组合框之列表框中当前选择项的下标GetDroppedState决定下拉组合框的列表框是否可见决定下拉组合框的列表框

48、是否可见GetEditSel获取组合框中的编辑控件中所选文本的开始和末尾字符位置获取组合框中的编辑控件中所选文本的开始和末尾字符位置GetLBText获取组合框中的列表框中的字符串获取组合框中的列表框中的字符串LimitText指定用户所允许输入编辑框控件的文本长度指定用户所允许输入编辑框控件的文本长度Paste将将CF_TEXT格式数据从剪贴板复制到编辑框中光标的当前位置格式数据从剪贴板复制到编辑框中光标的当前位置SetCurSel在组合框之列表框中选择一项在组合框之列表框中选择一项SetEditSel在组合框之编辑框中选择文字在组合框之编辑框中选择文字ShowDropDown显示或隐藏组合

49、框的列表项部分显示或隐藏组合框的列表项部分8.3.6 组合框控件(续)3.常用消息 列表框的操作,不仅可以调用CComboBox类的成员函数来进行,还可以通过发送消息给组合框来进行,因此,首先要熟悉可以发送到组合框中的消息有哪些。8.3.6 组合框控件(续)(1)发送消息到组合框 发给到组合框的消息大体分为两类:一类是作用于组合框中的列表部分,另一类是作用于组合框中的编辑控件,它们分别与发送给列表框和编辑框控件的消息存在对应关系。作用于组合框中的列表框的消息有CB_ADDSTRING、CB_INSERTSTRING、CB_DELETESTRING等,它们分别对应 于 发 给 列 表 框 中 的

50、 消 息 L B _ A D D S T R I N G、LB_INSERTSTRING、LB_DELETESTRING等。作用于组合框中的编辑框的消息有CB_GETEDITSEL、CB_SETEDITSEL、WM_CUT等。8.3.6 组合框控件(续)(2)组合框发出的通知消息 组 合 框 发 出 的 通 知 代 码 也 包 含 在WM_COMMAND消息的wParam参数高位字节中,它们与列表框以及组合框的通知消息存在一一对应关系。CBN_DBCLICK表示用户双击了一个列表项,CBN_SELCHANGE表示用户当前的选择发生了变化,CBN_CLOSEUP表示下拉列表框的列表即将被关闭,C

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(对话框及常用控件课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|