版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第四章 对话框和标准控件,2,本章内容,对话框概述 使用对话框 标准控件 通用对话框 公共控件(略),3,一、对话框概述,对话框是Windows应用程序中常用的I/O界面,是实现人机交互的容器型窗口,对话框总会包含一些功能性控件。 控件是嵌入在对话框或其他窗口内的子窗口,用于实际完成数据或信息的I/O。 对话框的存在方式有两种:一是作为独立的程序主窗口出现和使用;二是作为普通窗口类程序的弹出式子窗口实现其人机交互功能。 从状态上区分,对话框分为“模式对话框”和“非模式对话框”两种。,4,1、MFC的CDialog类 CDialog类的成员函数有: CDialog()构造函数,创建对话框对象
2、 DoModal()激活并显示模式对话框 Create()创建非模式对话框 OnOk()与OnCancel()确定与取消按钮的处理函数 OnInitDialog()WM_INITDIALOG的消息处理函数 EndDialog()关闭模式对话框的函数,5,对话框要实现人机交互,还必须使用CWnd类函数: ShowWindow()显/隐对话框; DestroyWindow()关闭销毁对话框; UpdateData()设置或获取对话框控件的数据 GetWindowText()获取对话框窗口的标题 SetWindowText ()设定对话框窗口的标题 GetDlgItemText()获取对话框中控件的
3、文本内容 SetDlgItemText ()设置对话框中控件的文本内容 GetDlgItem()获取控件或子窗口的指针,返回ID EnableWindow()使能或禁用窗口,6,2、MFC为对话框提供了DDX机制 以此来自动实现控件与应用程序之间的数据交换的,同时使用DDV机制实现数据合法性的自动验证 。 DDX全称Dialog Data Exchange;数据交换 DDV全称Dialog Data Validation;数据检验,7,3、使用信息/消息对话框 程序员在编程时可以直接调用,以下为函数原型:,三个函数依次为:MFC全局函数;API函数;CWnd类的成员函数。AfxMessageB
4、ox()和: MessageBox()可以在任何地方使用,而第三种函数只能用于控件、对话框和窗口。 lpText表示要在对话框内显示的信息字串;hWnd表示对话框父窗口的指针,可为NULL;lpCaption表示信息框的标题;nType表示对话框的图标与按钮风格;,8,9,二、使用对话框,编程时,对话框由资源模板和对话框类共同组成。 1、创建和使用对话框的主要步骤 创建对话框模板资源和相关控件; 用类向导创建对话框类和与控件相关联的成员变量和消息处理函数; 设计程序访问接口来显示对话框并获取与控件相关联的程序数据。,10,对话框在程序中的调用一般由菜单项来完成。 由程序显示对话框就需要调用菜单
5、命令的消息处理函数,加入如下通用型代码: CMyDialog myDlg; myDlg.DoModol(); 而要从对话框中获取相关控件数据的方法是: CMyDialog mydlg; /当对话框内控件接受输入并单击OK键后 If (myDlg.DoModol()=IDOK) appVariableX=dlg.m_nXControlDataMember; ; ,11,对话框的基本工作流程,12,2、创建和使用对话框实例 编制一个在客户区画圆的应用程序,要求用对话框来接受用户键盘输入的圆半径参数。 步骤(1)为视图类声明成员变量: UINT m_nViewRadius; (2)创建对话框模板(标
6、题:输入半径;ID缺省IDD_DIALOG1) (3)添加两个控件:Static Control: 请输入半径;EditBox: IDC_EDIT_RADIUS。 (4)双击对话框空白处,为其创建新类CRadiusDlg,并为其核心控件IDC_EDIT_RADIUS创建m_nRadius的UINT类型变量。,13,(5)在程序的“编辑”菜单中添加“输入半径(I)”的菜单命令,并用类向导生成消息映射函数,加入如下定义代码: CRadiusDlg dlg; Dlg. m_nRadius=100; /设置控件初值 If(dlg.DoModal()=IDOK) m_nViewRadius=dlg m_
7、nRadius; /接受并存储编辑框内的数据 Invalidate( );/强制刷新视图 (6)在视图类的OnDraw()函数中加入画圆代码: pDC-Ellipse(90,90, m_nViewRadius, m_nViewRadius); (7)在视图类中加入包含语句: #include “RadiusDlg.h”,14,三、标准控件,1、控件概述 Windows提供两种控件:标准控件和公共控件。 标准控件有:静态控件、编辑框、按钮、列表框、 组合框和滚动条。可满足多数UI设计的要求。 各控件的功能:静态控件用于提示文字或美工图片;编辑框接受键盘输入信息;按钮中的单选钮提供排他型选择;复选
8、框提供多项选择;列表框以列表方式显示各选项;组合框是编辑框与列表框之集成;滚动条控制文档的显示范围。,15,除标准控件之外,控件工具箱中列示的其他控件基本上都属于公共控件。 MFC对控件分别由不同的类来管理。,CStatic静态文本与图片 CEdit编辑框 CButton组框单选复选框 CComboBox组合框 CScrollBar滚动条 CSpinButtonCtrl旋转钮 CProgressCtrl进度条 CSliderCtrl滑动条 CListBox列表框 CListCtrl列表视控件,CTreeCtrl树型列表 CTabCtrl标签 CAnimateCtrl动画控件 CRichEdit
9、Ctrl复合编辑 CDateTimeCtrl日期时间 CMonthCalCtrl日历 CComboBoxEx扩展组合框 CStatusBarCtrl状态条控件 CToolBarCtrl工具条控件 CImageList图像列表,16,用户对控件的操作将会引发控件事件和消息,消息由其父窗口接收并处理。标准控件和公共控件都能发送WM_COMMANDO类型的消息,后者还可发送WM_NOTIFY通知消息。消息的参数中包含了控件ID和通知码,通知码前缀最后一个字母总为N。 比如:BN_CLICKED为按钮单击; EN_UPDATE为编辑框刷新; CBN_SETFOCUS表示组合框获得焦点。,17,2、对话
10、框内控件的组织 (1)添加或删除控件 添加:鼠标单击、拖放、画框均可;删除:选中后Del键. (2)设置控件属性 属性决定外观及风格,通过右键快捷菜单中的属性项设置。 常用属性:ID、Caption 、Visable 、Group 、Disabled 和Tab Stop;分别表示识别号、名称标题、是否可见、指定控件组之首控件、初始禁用、Tab键停留。 其中,控件的Tab键次序由创建的先后顺序决定,但也可以人为设置,重设的命令为Ctrl+D,或菜单Layout | TabOrder。 (3)调整控件大小 通过控件周围的编辑句柄调整,选中控件后,其左上角坐标及长宽尺寸便自动显示于状态栏的右侧窗格。
11、只有静态文本控件的尺寸由其Caption字符多少决定。,18,CTRL+D命令可以重置各个控件的Tab键次序,19,(4)控件的多选方法 按住Ctrl /Shift键配合鼠标左键;用鼠标拖框圈定目标控件。 (5)移动和复制控件 方向键及鼠标拖放可以移动控件;按住Ctrl键不放,鼠标拖放目标控件,可复制控件; (6)批量控件编排 先多选目标控件, 后使用窗底工具栏的工具(在状态栏之上),测试对话框,靠左对齐,靠右对齐,靠上对齐,靠下对齐,垂直居中,水平居中,水平等距离,垂直等距离,宽度相同,高度相等,大小相同,显示网格,显示标尺,20,3、静态控件 静态控件用于显示提示字符串或图形信息。包括静态
12、文本(Static Text)、图片控件(Picture Control)和组框(Group Control)三种类型。 静态文本:一般只起文字提示作用,不发送任何消息,所以一般不需要特意相互区分,默认ID均为IDC_STATIC。但是,如何有时需要动态改变某一控件的文字信息,就需要为其确立一个唯一的ID。该控件最多只能显示255个字符,且可以以n作用换行符。 图片控件:用于显示边框、矩形、图标或位图,对其他相关控件起修饰作用。 组框:通常仅用于作为一组控件的外围边界,起圈围和版面划分作用,外型由文本标题和矩形边框组成。,21,4、编辑框控件 编辑框(Edit box),又称文本框,是接受用户
13、键盘输入的最常用控件,具有数据消息的接收与输出功能。可接受的消息包括文本、数字或口令,输入时允许进行如文本编辑的一般操作。 Edit box的常用属性: Multiline多行输入;Align Text对齐方式; Number只接收数字;PassWord只接受密码口令; ReadOnly信息只读;Border周围边框; Upercase转为大写;Lowercase转为小写; Edit box可发送的常见消息: EN_CHANGE信息改变时;EN_UPDATE信息更新显示前; EN_KILLFOCUS失去焦点时;EN_SETFOCUS得到焦点时; EN_MAXTEXT输入字符超限时。,22,编辑
14、框的应用实例:编写一个名为PassWord的SDI应用程序,要求程序启动后先弹出一用户登录对话框,只有当用户输入正确的口令后方可进入主界面。 创建工程,从C盘向工程中任意导入两个图标资源; 按图示创建对话框模板,并向其添加相关控件; 用类向导创建CPasswordDlg类,并分别为三个核心控件添加CString型的成员变量并限定输入位为6位:m_strUserName; m_strPassword和m_strShowPassword; 用类向导为复选框IDC_CHECKSHOW声明Control类型的变量m_ButtonCheck.,23,IDC_EDITSHOWPASS的属性:Read-On
15、ly IDC_EDITPASS的属性:Password IDC_CHECKSHOW的变量为:Control类型,m_ButtonCheck,24,用类向导为口令控件添加EN_CHANGE的消息处理函数OnChangeEditpass(),并加入代码,实现将口令字符向“显示口令”控件的传递和显示。 if(m_ButtonCheck.GetCheck() /判断“显示口令”复选框是否选定 UpdateData(true); /由控件向程序传递数据 m_strShowPass= m_strPassword; /传递口令到显示变量 UpdateData(FALSE); /将变量数据向控件传递并显示 在
16、程序应用类的初始化函数中显示对话框,并实现用户信息的验证。(代码见下页) 编译运行程序。,25,#include “PasswordDlg.h” /本句加至应用类cpp文件的头部 int nCount=0; /初始化口令输入次数 /本句后加至初始化函数的前半部 while(nCount=3) MessageBox(NULL, 口令输入超过3次,请退出!,错误信息, MB_OK|MB_ICONERROR); return FALSE; /退出程序 ,26,5、按钮控件 按钮(button)包括按键按钮(Push button) 、单选钮(Radio button) 和复选框(Check box)
17、三种,均可激发单击、双击或命令消息。 PushButton又称命令按钮,最常用。一个对话框内可以给惟一一个PushButton设定Defult属性;按钮具有的Owner Draw属性可以通过调用OnDrawItem()消息函数来重新定制其外观;Icon和Bitmap属性表示可以用指定图标或位图代替文本标题,从而实现所谓“图形按钮”。 Radio button由圆圈及文本标题共同组成,用于在一组选项中由用户任选其一项。 RadioButton的Auto属性为默认属性;Group属性仅限于本组第一个RadioButton选用,其Tab键次序必须排第1,其ID值可用于在对话框中为控件建立关联的成员变
18、量。 Check box由空心方框及文本标题组成,成组时可以多选。调用CButton类的成员GetCheck()和SetCheck()可获得和设置单选钮或复选框的选中状态。,27,按钮控件的联合应用实例: 编写一个对话框型应用程序ColrButn,加入两个单选钮用于控制色彩模式,用三个复选框来控制RGB三原色分量,而且只有在“彩色”模式下才能使用RGB复选框,当程序运行后用户单击了“应用”按钮时,右侧的绘制按钮将根据颜色选择实现“按钮自画”。,28,编程的主要步骤: (1)创建基于对话框的程序ColrButn,修改对话框标题,添加相关控件,并设置好控件正确的Tab键次序;注意第1个单选钮和第1
19、个复选框一定要设置Group属性,自画按钮要有“自画”属性; (2)用类向导为单选钮IDC_RADIO_COLOR添加m_nColor的整型变量;为三个复选框依次添加BOOL型的m_bRed、 m_bBlue、 m_bGreen变量; (3)为两个单选钮分别添加BN_CLICKED消息处理函数,使选择“彩色”时所有复选框可用,选择“单色”时所有复选框禁用,两个函数的核心代码是: CWnd *pWnd; pWnd=GetDlgItem(IDC_CHECK_RED); /获得复选框对象指针 pWnd-EnableWindow( );/启用复选框; 参数为FALSE时禁用,29,(4)为“应用”按钮
20、添加消息处理函数,并加入代码: CWnd *pWnd=GetDlgItem(IDC_BUTTON_DRAW); pWnd-Invalidate();/使自画按钮区无效 pWnd-UpdateWindow( );/发送WM_PAINT消息,更新无效区域 (5)为对话框添加WM_DRAWITEM消息处理函数,先接收单选钮和复选框的变量数据,然后依此重绘“自画按钮”。 UpdateData(); COLORREF clrBtn; if(m_nColor=0) clrBtn=RGB(m_bRed? 255:0, m_bGreen? 255:0, m_bBlue? 255:0); else clrBtn
21、=RGB(0,0,0); CDC dc; dc.Attach(lpDrawItemStruct-hDC);/连接句柄 if(nIDCtl=IDC_BUTTON_DRAW) CWnd *pWnd; pWnd=GetDlgItem(IDC_BUTTON_DRAW); /获得自画按钮对象的指针 CRect rc; pWnd-GetClientRect( /分离句柄,30,6、列表框 在列表型控件里,包含列表框、组合框、列表视、树视控件4种,其中,List-Box是最简单的一种。它是一个能罗列出一些文本项的窗口,用于显示类型相同的一系列文本信息。 List-Box的风格属性:Single、Multip
22、le、Extended(扩展多选)和None(不选)。最常用的是单选,仅允许每次选一项。 List-Box的其他属性:Sort按字母顺序排列;Vertical Scroll垂直滚动;Multi-column指定有水平滚动条的多列列表;Want key input表示有输入时向上级窗口发送消息。 List-Box常用的通知消息:LBN_SETFOCUS; LBN_KILLFOCUS; LBN_DBCLK; LBN_SELCHANGE分别表示得焦点、失焦点、双击、选项改变。 CListBox类的成员函数可实现列表项的添加、删除、修改和获取等操作。 AddString(); InsertString
23、(); DeleteString(); ResetContent(); FindString(); SelectString(); GetCurSel(); SetCurSel(); GetText(); GetItemData()。,31,7、组合框 组合框(ComboBox) 吸收了编辑框与列表框的共同优点,既可显示列表项以供用户选择,也可直接输入新的列表选择项。形态上包含简单组合框(Simple)、下拉组合框(Dropdown)、下拉列表框(DropList)3种。 简单组合框是一个列表框和编辑框的组合,尺寸固定,被选中的列表项显示于编辑框之内;下拉组合框多加一个下拉按钮,用于控件列表框
24、的收缩;下拉列表框与前类相似,只是无法使用编辑框。 ComboBox的风格属性:在各控件原属性基础上,属性控制页中新增了一个“Data”标签页,用于接受列表项的初始化(用Ctrl+Enter换行)。 ComboBox的通知消息:CBN_CLOSEUP和CBN_DROPDOWN: 关闭和打开列表框时发送; CBN_SELENDCANCEL: 当前选项被取消时发送;CBN_EDITCHANGE和CBN_SELCHANGE: 编辑框文字被修改并显示之前和之后发送。其它消息有:得焦点、失焦点、双击列表项。 CComboBox类的成员函数: 直接继承了CEdit类和CListBox类的成员。,32,组合
25、框编程实例: 创建一个名为DynCreateCtrls的SDI程序,用菜单命令调用一个对话框,当用户在组合框中选择一种控件类型并单击“应用按钮”时,实现在对话框内动态创建该控件的效果。,33,编程实现: (1)创建DynCreateCtrls的SDI程序,新建一个IDD_COMBODLG“使用组合框”的对话框,向其添加3个控件:静态文本“请选择控件类型”;组合框IDC_COMBOCTRLNAME和“应用”按钮; (2)用类向导创建对话框类CCombDlg,并为其中的组合框添加两个数据成员:CComboBox m_ComboBx和CString m_strCtrlName; 在所创建的CComb
26、Dlg类中手工加入CWnd*pWndCtrl的私有型变量; (3)用类向导为CCombDlg类添加WM_INITDIALOG和WM_DESTROY消息映射函数,分别加入初始化和清除代码。 pWndCtrl=NULL; return TRUE; /初始化 If(pWndCtrl!=NULL) delete pWndCtrl; /删除动态生成的控件对象 (4)用类向导为组合框创建SBN_SELCHANGE的消息处理函数,加入代码,34,if(pWndCtrl!=NULL) delete pWndCtrl; /删除上次动态生成的控件对象 pWndCtrl=NULL; int nChoice=m_Co
27、mboBx.GetCurSel(); /获得当前选择项索引 switch(nChoice) case 0: /创建静态文本控件 pWndCtrl=new CStatic; (CStatic*) pWndCtrl)-Create(_T(Static Text), WS_VISIBLE, CRect(280,40,400,70),this,1); break; case 1: /创建编辑框控件 pWndCtrl=new CEdit; (CEdit*) pWndCtrl)-Create(WS_VISIBLE|WS_BORDER, CRect(280,40,400,70),this,2); break
28、; case 2: /创建组框 pWndCtrl=new CButton; (CButton*) pWndCtrl)-Create(_T(Group Box), WS_VISIBLE|BS_GROUPBOX, CRect(280,40,400,100),this,3); break;,35,case 3: /创建按键按钮 pWndCtrl=new CButton; (CButton*) pWndCtrl)-Create(_T(Button),WS_VISIBLE| WS_DISABLED|BS_PUSHBUTTON, CRect(280,40,400,70),this,4); break; c
29、ase 4: /创建复选框 pWndCtrl=new CButton; (CButton*) pWndCtrl)-Create(_T(Check Box), WS_VISIBLE|BS_CHECKBOX, CRect(280,40,400,70),this,5); break; case 5: /创建单选钮 pWndCtrl=new CButton; (CButton*) pWndCtrl)-Create(_T(Radio Box), WS_VISIBLE|BS_RADIOBUTTON, CRect(280,40,400,70),this,6); break; case 6: /创建组合框 p
30、WndCtrl=new CComboBox; (CComboBox*) pWndCtrl)-Create(WS_VISIBLE| CBS_DROPDOWN, CRect(280,40,400,100),this,7); break;,36,case 7: /创建列表框 pWndCtrl=new CListBox; (CListBox*) pWndCtrl)-Create(WS_VISIBLE|WS_BORDER, CRect(280,40,400,100),this,8); break; case 8: /创建组合框 pWndCtrl=new CScrollBar; (CScrollBar*) pWndCtrl)-Create(WS_VISIBLE|SBS_VERT, CRect(350,40,380,100),this,9); br
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物理试卷+答案【黑吉辽蒙卷】【高二】黑龙江省龙东十校联盟2025-2026学年高二上学期10月月考
- 家具公司车间纪律检查规定
- 某服装公司熨烫设备管控实施细则
- 进步家长会家长代表发言稿
- 消气防培训背景
- 某珠宝公司清洗机报废处理方案
- 基于AI的小学语文写作教学课堂互动模式创新研究教学研究课题报告
- 智能研修环境下教师学习成果转化对教学质量提升的影响研究教学研究课题报告
- 消毒剂知识培训
- 我国近海捕捞渔业投入控制与管理政策优化:基于可持续发展视角的研究
- 白内障疾病教学案例分析
- 英语试卷浙江杭州市学军中学2026年1月首考适应性考试(12.29-12.30)
- 生产车间停线制度
- (一模)2026年沈阳市高三年级教学质量监测(一)生物试卷(含答案)
- 2025年和田地区公务员录用考试《公安专业科目》真题
- 2026年上海市安全员-B证(项目负责人)考试题及答案
- 老年听力障碍患者护理
- 炼焦精煤采购合同范本
- 2025年公务员多省联考《申论》题(黑龙江行政执法卷)及参考答案
- 2026版《金版教程》高考一轮复习地理核心素养提升练(五)
- 假结婚协议书合同样本
评论
0/150
提交评论