您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 第四章 对话框和标准控件
1第四章对话框和标准控件2本章内容对话框概述使用对话框标准控件通用对话框公共控件(略)3一、对话框概述•对话框是Windows应用程序中常用的I/O界面,是实现人机交互的容器型窗口,对话框总会包含一些功能性控件。•控件是嵌入在对话框或其他窗口内的子窗口,用于实际完成数据或信息的I/O。•对话框的存在方式有两种:一是作为独立的程序主窗口出现和使用;二是作为普通窗口类程序的弹出式子窗口实现其人机交互功能。•从状态上区分,对话框分为“模式对话框”和“非模式对话框”两种。41、MFC的CDialog类CDialog类的成员函数有:CDialog()——构造函数,创建对话框对象DoModal()——激活并显示模式对话框Create()——创建非模式对话框OnOk()与OnCancel()——确定与取消按钮的处理函数OnInitDialog()—WM_INITDIALOG的消息处理函数EndDialog()——关闭模式对话框的函数5对话框要实现人机交互,还必须使用CWnd类函数:ShowWindow()——显/隐对话框;DestroyWindow()——关闭销毁对话框;UpdateData()——设置或获取对话框控件的数据GetWindowText()——获取对话框窗口的标题SetWindowText()——设定对话框窗口的标题GetDlgItemText()——获取对话框中控件的文本内容SetDlgItemText()——设置对话框中控件的文本内容GetDlgItem()——获取控件或子窗口的指针,返回IDEnableWindow()——使能或禁用窗口62、MFC为对话框提供了DDX机制以此来自动实现控件与应用程序之间的数据交换的,同时使用DDV机制实现数据合法性的自动验证。DDX——全称DialogDataExchange;数据交换DDV——全称DialogDataValidation;数据检验73、使用信息/消息对话框程序员在编程时可以直接调用,以下为函数原型:三个函数依次为:MFC全局函数;API函数;CWnd类的成员函数。AfxMessageBox()和::MessageBox()可以在任何地方使用,而第三种函数只能用于控件、对话框和窗口。lpText——表示要在对话框内显示的信息字串;hWnd表示对话框父窗口的指针,可为NULL;lpCaption——表示信息框的标题;nType——表示对话框的图标与按钮风格;89二、使用对话框编程时,对话框由资源模板和对话框类共同组成。1、创建和使用对话框的主要步骤创建对话框模板资源和相关控件;用类向导创建对话框类和与控件相关联的成员变量和消息处理函数;设计程序访问接口来显示对话框并获取与控件相关联的程序数据。10对话框在程序中的调用一般由菜单项来完成。由程序显示对话框就需要调用菜单命令的消息处理函数,加入如下通用型代码:CMyDialogmyDlg;myDlg.DoModol();而要从对话框中获取相关控件数据的方法是:CMyDialogmydlg;//当对话框内控件接受输入并单击OK键后If(myDlg.DoModol()==IDOK){appVariableX=dlg.m_nXControlDataMember;……;}11•对话框的基本工作流程122、创建和使用对话框实例编制一个在客户区画圆的应用程序,要求用对话框来接受用户键盘输入的圆半径参数。步骤(1)为视图类声明成员变量:UINTm_nViewRadius;(2)创建对话框模板(标题:输入半径;ID缺省IDD_DIALOG1)(3)添加两个控件:StaticControl:请输入半径;EditBox:IDC_EDIT_RADIUS。(4)双击对话框空白处,为其创建新类CRadiusDlg,并为其核心控件IDC_EDIT_RADIUS创建m_nRadius的UINT类型变量。13(5)在程序的“编辑”菜单中添加“输入半径(I)…”的菜单命令,并用类向导生成消息映射函数,加入如下定义代码:CRadiusDlgdlg;Dlg.m_nRadius=100;//设置控件初值If(dlg.DoModal()==IDOK){m_nViewRadius=dlgm_nRadius;//接受并存储编辑框内的数据Invalidate();//强制刷新视图}(6)在视图类的OnDraw()函数中加入画圆代码:pDC-Ellipse(90,90,m_nViewRadius,m_nViewRadius);(7)在视图类中加入包含语句:#include“RadiusDlg.h”14三、标准控件1、控件概述Windows提供两种控件:标准控件和公共控件。标准控件有:静态控件、编辑框、按钮、列表框、组合框和滚动条。可满足多数UI设计的要求。各控件的功能:静态控件——用于提示文字或美工图片;编辑框——接受键盘输入信息;按钮中的单选钮——提供排他型选择;复选框——提供多项选择;列表框——以列表方式显示各选项;组合框——是编辑框与列表框之集成;滚动条——控制文档的显示范围。15除标准控件之外,控件工具箱中列示的其他控件基本上都属于公共控件。MFC对控件分别由不同的类来·管理。CStatic——静态文本与图片CEdit——编辑框CButton——组框单选复选框CComboBox——组合框CScrollBar——滚动条CSpinButtonCtrl——旋转钮CProgressCtrl——进度条CSliderCtrl——滑动条CListBox——列表框CListCtrl——列表视控件CTreeCtrl——树型列表CTabCtrl——标签CAnimateCtrl——动画控件CRichEditCtrl——复合编辑CDateTimeCtrl——日期时间CMonthCalCtrl——日历CComboBoxEx——扩展组合框CStatusBarCtrl——状态条控件CToolBarCtrl——工具条控件CImageList——图像列表16•用户对控件的操作将会引发控件事件和消息,消息由其父窗口接收并处理。标准控件和公共控件都能发送WM_COMMANDO类型的消息,后者还可发送WM_NOTIFY通知消息。消息的参数中包含了控件ID和通知码,通知码前缀最后一个字母总为N。•比如:BN_CLICKED为按钮单击;•EN_UPDATE为编辑框刷新;•CBN_SETFOCUS表示组合框获得焦点。172、对话框内控件的组织(1)添加或删除控件添加:鼠标单击、拖放、画框均可;删除:选中后Del键.(2)设置控件属性属性决定外观及风格,通过右键快捷菜单中的属性项设置。常用属性:ID、Caption、Visable、Group、Disabled和TabStop;分别表示识别号、名称标题、是否可见、指定控件组之首控件、初始禁用、Tab键停留。其中,控件的Tab键次序由创建的先后顺序决定,但也可以人为设置,重设的命令为Ctrl+D,或菜单Layout|TabOrder。(3)调整控件大小通过控件周围的编辑句柄调整,选中控件后,其左上角坐标及长宽尺寸便自动显示于状态栏的右侧窗格。只有静态文本控件的尺寸由其Caption字符多少决定。18CTRL+D命令可以重置各个控件的Tab键次序19(4)控件的多选方法按住Ctrl/Shift键配合鼠标左键;用鼠标拖框圈定目标控件。(5)移动和复制控件方向键及鼠标拖放可以移动控件;按住Ctrl键不放,鼠标拖放目标控件,可复制控件;(6)批量控件编排先多选目标控件,后使用窗底工具栏的工具(在状态栏之上)测试对话框靠左对齐靠右对齐靠上对齐靠下对齐垂直居中水平居中水平等距离垂直等距离宽度相同高度相等大小相同显示网格显示标尺203、静态控件静态控件用于显示提示字符串或图形信息。包括静态文本(StaticText)、图片控件(PictureControl)和组框(GroupControl)三种类型。静态文本:一般只起文字提示作用,不发送任何消息,所以一般不需要特意相互区分,默认ID均为IDC_STATIC。但是,如何有时需要动态改变某一控件的文字信息,就需要为其确立一个唯一的ID。该控件最多只能显示255个字符,且可以以\n作用换行符。图片控件:用于显示边框、矩形、图标或位图,对其他相关控件起修饰作用。组框:通常仅用于作为一组控件的外围边界,起圈围和版面划分作用,外型由文本标题和矩形边框组成。214、编辑框控件编辑框(Editbox),又称文本框,是接受用户键盘输入的最常用控件,具有数据消息的接收与输出功能。可接受的消息包括文本、数字或口令,输入时允许进行如文本编辑的一般操作。Editbox的常用属性:Multiline——多行输入;AlignText——对齐方式;Number——只接收数字;PassWord——只接受密码口令;ReadOnly——信息只读;Border——周围边框;Upercase——转为大写;Lowercase——转为小写;Editbox可发送的常见消息:EN_CHANGE——信息改变时;EN_UPDATE——信息更新显示前;EN_KILLFOCUS——失去焦点时;EN_SETFOCUS——得到焦点时;EN_MAXTEXT——输入字符超限时。22编辑框的应用实例:编写一个名为PassWord的SDI应用程序,要求程序启动后先弹出一用户登录对话框,只有当用户输入正确的口令后方可进入主界面。①创建工程,从C盘向工程中任意导入两个图标资源;②按图示创建对话框模板,并向其添加相关控件;③用类向导创建CPasswordDlg类,并分别为三个核心控件添加CString型的成员变量并限定输入位为6位:m_strUserName;m_strPassword和m_strShowPassword;④用类向导为复选框IDC_CHECKSHOW声明Control类型的变量m_ButtonCheck.23IDC_EDITNAMEIDC_EDITPASSIDC_EDITSHOWPASSIDC_CHECKSHOWIDC_EDITSHOWPASS的属性:Read-OnlyIDC_EDITPASS的属性:PasswordIDC_CHECKSHOW的变量为:Control类型,m_ButtonCheck24⑤用类向导为口令控件添加EN_CHANGE的消息处理函数OnChangeEditpass(),并加入代码,实现将口令字符向“显示口令”控件的传递和显示。if(m_ButtonCheck.GetCheck())//判断“显示口令”复选框是否选定{UpdateData(true);//由控件向程序传递数据m_strShowPass=m_strPassword;//传递口令到显示变量UpdateData(FALSE);//将变量数据向控件传递并显示}⑥在程序应用类的初始化函数中显示对话框,并实现用户信息的验证。(代码见下页)⑦编译运行程序。25#include“PasswordDlg.h”//本句加至应用类cpp文件的头部intnCount=0;//初始化口令输入次数///本句后加至初始化函数的前半部while(nCount3){CPasswordDlgdlg;if(dlg.DoModal()==IDOK)if((strcmp(dlg.m_strUserName,FBI009)!=0)||(strcmp(dlg.m_strPassword,USA911)!=0)){MessageBox(NULL,用户名或口令错误,请重试!,错误信息,MB_OK|MB_ICONERROR);nCount++;}elsebreak;elsereturnFALSE;}if(nCount=3){MessageBox(NULL,口令输入超过3次,请退出!,错误信息,MB_OK|MB_ICONERROR);returnFALSE;//退出程序}265、按钮控件按
本文标题:第四章 对话框和标准控件
链接地址:https://www.777doc.com/doc-4048939 .html