计算机图形学---第5章 对话框和常用控件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.2控件的创建和使用方法 (2 of 7)
5.2.2 控件的数据交换和数据校验
例如,为CMyDlg类的按钮控件IDC_BUTTON1添加并使用其成员变量 m_MyBtn,则其相应的过程如下: (1)启动MFC ClassWizard,切换到Member Variables页面,如图。 (2)选定Class name为CMyDlg,然后在Control IDs列表中,选定所要关 联的控件ID号IDC_BUTTON1,双击鼠标左键或单击[Add Variable]按钮, 如图。
默认对话框 模板 默认对话框 资源ID号
标尺
控件工具栏
基准线
布局工具栏
图5.1 打开的对话框编辑器
5.1对话框的使用 (4 of 14)
在对话框编辑器中添加和编辑控件
(1)控件添加的方法
在对话框中添加一个控件的方法有下列几种: 在控件工具栏中单击某控件,鼠标箭头在对话框内变成“十”字形状;在对话框指 定位置单击鼠标左键,再拖动选择框可改变控件的大小和位置。 在控件工具栏中单击某控件,鼠标箭头在对话框内变成“十”字形状;在指定位置 处单击鼠标左键不放,拖动鼠标至满意位置,释放鼠标键。 用鼠标左键点中控件工具栏中的某控件,并按住鼠标键不放;在移动鼠标到对话框 的指定位置的过程中,会看到一个虚线框,下面带有该控件的标记;释放鼠标键。
5.1对话框的使用 (14 of 14)
添加用户代码 (1)在头文件(MyDlg.h文件)中系统自动声明消息处理函数OnButton1: protected: //{{AFX_MSG(CMyDlg) afx_msg void OnButton1(); //}}AFX_MSG (2)在MyDlg.cpp源文件开头部分的消息映射入口,系统自动添加消息映射 宏: BEGIN_MESSAGE_MAP(CMyDlg, CDialog) // 消息映射开始 //{{AFX_MSG_MAP(CMyDlg) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) //}}AFX_MSG_MAP END_MESSAGE_MAP() // 消息映射结束 表明消息及其处理函数之间的联系。单击按钮控件IDC_BUTTON1时,系统 将自动调用OnButton1函数。 (3)在MyDlg.cpp文件中写入一个空的消息处理函数的模板,以便用户填入 具体代码,如下面的框架: void CMyDlg::OnButton1() { // TODO: Add your control notification handler code here }
第5章对话框和常用控件
5.1 对话框的使用 5.2 控件的创建和使用方法 5.3 常用控件 5.4 通用对话框和消息对话框
5.2控件的创建和使用方法 (1 of 7)
5.2.1控件的创建方法
控件的创建方式有以下两种:
一种是在对话框模板中用编辑器指定控件,也就是说,将控件的父
窗口指定为对话框,这样做的好处是明显的,因为当应用程序启动 该对话框时,Windows系统就会为对话框创建控件;而当对话框消 失时,控件也随之清除。 另一种是将控件看作是任一窗口的子窗口,并通过调用相应的 Create函数来创建。
(a) (b)
图5.3 单个控件和多个控件的选择框
5.1对话框的使用 (6 of 14)
(4)控件的移动、删除和复制 当单个控件或多个控件被选取后,按方向键或用鼠标拖动控件的选择框可 移动控件。若在鼠标拖动过程中还按住Ctrl键则复制控件。若按Del键可将 选取的控件删除。 (5)设定控件的Tab键次序 一是改变用Tab键选择控件的次序,二是当两个或两个以上的控件构成一 组时,需要它们的Tab键次序连续。 对话框内控件的Tab键次序设定步骤如下: 首先,选择“Layout”“Tab Order”命令,或按Ctrl+D,此时每个控件的 左上方都有一个数字,表明了当前Tab键次序,如图。 其次,按新的次序依次用鼠标单击各个控件,新的Tab键即可生成。 最后,单击对话框或按Enter键结束Tab Order 方式。
图5.7 Guide Settings对话框
5.1对话框的使用 (9 of 14)5.1.4 Nhomakorabea对话框的编程
给对话框添加完控件之后,还可以修改对话框的属性,方法如下: 改变对话框的属性 在对话框模板的非控件的区域内左击,用下列方式之一打开属性对话框: 选择“View”菜单“Properties”命令或按Alt+Enter健。 用鼠标右击对话框模板,选取Properties命令。 如图,General是对话框属性的默认显示页面,其中列有对话框的标识符名 称框、标题框等,具体说明如表。
(2)单个控件的选取 鼠标选取 保证选择按钮( )是被选中的,移动鼠标指针至指定的控件上,单击鼠标左键。 助记符选取 在相应的控件上右击。选择“Properties”菜单项,对话框中的“Caption”框是用来输 入控件的标题,在标题中的某个字母之前键入“&”符号,则该字母就是此控件的助记符。 Tab键选取 利用Tab键,可在对话框内的控件中进行选择。每按一次Tab键依次选取对话框中的 下一个控件,若按住Shift键,再单击Tab键则选取上一个控件。 (3)多个控件的选取 在对话框内按住鼠标左键不放,拖出一个大的虚框,释放鼠标,则被该虚框所包围的控 件都将被选取。 先按住Shift键不放,用鼠标选取控件,直到所需要的多个控件选取之后再释放 Shift键。 若在选取时,对已选取的控件再选取一下,则该控件取消选取。 一旦单个控件被选取后,其四周由选择框包围着,选择框上还有几个 (通常是八个)蓝色实 心小方块,拖动它可改变控件的大小,如图。 多个控件被选取后,其中只有一个控件的选择框有几个蓝色实心小方块,这个控件称为 主要控件,而其他控件的选择框的小方块是空心的。如图。
图5.4 控件的Tab键次序
5.1对话框的使用 (7 of 14)
对话框内控件的布局
靠齐右边 高度相同 测试对话框 隔相等 左右居中 靠齐下边 显示网格 上下间
左右间隔相等 靠齐左边 尺
靠齐上边 大小相同
宽度相同 上下居中 显示标
图5.5 控件布局工具栏 图5.6 Layout菜单命令项
5.1对话框的使用 (8 of 14)
5.1对话框的使用 (12 of 14)
消息映射 选定IDC_BUTTON1的BN_CLICKED,双击左键或单击[Add Function]按 钮,如图。 在ClassWizard中,可以为添加的成员函数名重新定义,单击[OK]。选定成 员函数OnButton1项,双击左键或单击[Edit Code]按钮,在此成员函数添加 代码。
控件的选择 静态文本 组框 复选框 组合框 水平滚动条 旋转按钮 滑动条 列表视图 标签 复合编辑 月历 用户定制工 具 图5.2 控件工具栏和各按钮含义 静态图片 编辑框 按钮 单选框 列表框 垂直滚动条 进展条 热键 树形视图 动画 日期选择 IP地址 组合框的扩 展
5.1对话框的使用 (5 of 14)
布局命令使用前,需要选取多个控件,通常“主要控件”起到了关键作用。 多个控件的布局过程中,常需要重新设置“主要控件”。设置的方法是按 住Ctrl或Shift键,用鼠标单击所要指定的控件。 系统提供了网格、标尺等辅助工具。在图5.5的控件布局工具栏的最后两个 按钮分别用来网格和标尺的切换。一旦网格显示,添加或移动控件时都将 自动定位在网格线上。“Layout”菜单下的“Guide Settings”命令提供了设 置网格单元大小的功能,如图。 测试对话框
图5.17 “Add Member Variable”对话框
图5.16 ClassWziard的“Member Variables”页面
5.2控件的创建和使用方法 (3 of 7)
(3)在Member variable name框中填好与控件相关联的成员变量m_MyBtn,单 击[OK],在Control IDs列表中出现刚才添加的内容。 需要说明的是: DDV/DDX技术中,允许为同一个控件关联多个不同数据类型的成员变量, 而且这些变量的名字也必须互不相同。 如果添加的成员变量是一个数值类型,则在MFC ClassWizard对话框的 Member Variables页面下方通常还要求用户输入变量的范围,这就是控件 的数据校验设置。 (4)单击[OK],发现ClassWizard作了以下三方面的修改。 在MyDlg.h文件中,添加与控件关联的成员变量的声明,代码如下: // Dialog Data //{{AFX_DATA(CMyDlg) enum { IDD = IDD_DIALOG1 }; CButton m_MyBtn; CString m_strEdit;
图5.14 “Add Member Function”对话框
图5.13 “MFC ClassWizard”对话框
5.1对话框的使用 (13 of 14)
不同资源对象(控件、菜单命令等)的消息是不相同的。例如,按钮 控件IDC_BUTTON1的消息有两个:BN_CLICKED和 BN_DOUBLECLICKED,分别表示当用户单击或双击该按钮时产 生的消息。 一般不需要对对话框中自带的[OK](确定)与[Cancel](取消)按钮进行 消息映射,因为系统已自动设置了这两个按钮的动作,当用户单击 这两个按钮都将自动关闭对话框。
模式对话框
指当对话框被弹出,用户必须在对话框中作出相应的操作,在退出对 话框之前,对话框所在的应用程序不能继续执行。
无模式对话框
指当对话框被弹出后,一直保留在屏幕上,可继续在对话框所在的应 用程序中进行其它操作;需要使用对话框时,单击对话框所在的区域 即可激活。 上述两种对话框的不同之处: (创建和退出) 创建时,模式对话框由系统自动分配内存空间,而无模式对话框需要 用户来指定内存。 退出时,两种对话框所使用的终止函数不一样。模式对话框通过调用 CDialog:: EndDialog来终止,而且对话框对象被自动删除;而无模 式对话框则是调用CWnd::DestroyWindow来终止,由于无模式对话 框在调用创建函数后立即返回,因而不知道何时删除对象,所以还需 要通过重载CWnd::PostNcDestroy函数来删除对话框对象。
图5.9 属性对话框
5.1对话框的使用 (10 of 14)
添加一个对话框类 在对话框模板的非控件的区域内双击,如图5.11的对话框。 单击[OK],弹出如图5.12的对话框。可以为对话框资源定义一个新类名。
图5.11 “Adding a Class”对话框
图5.12 “New Class”对话框
5.1对话框的使用 (11 of 14)
在程序中使用对话框
(1) 利用项目工作区的FileView标签项,将Ex_SDIHello.cpp源文件打开; (2) 在Ex_SDIHello.cpp源文件的前面加上包含类CMyDlg的头文件: #include "MyDlg.h" (3) 在InitInstance函数体中的“return TRUE;”语句之前添加下列代码: CMyDlg dlg; dlg.DoModal(); DoModal是模式对话框最常用的函数,它负责对话框的显示和终止。 (4) 编译并运行。 在程序的一开始就出现用户自己设计的对话框,单击[Button1]按钮将 弹出“欢迎进入对话框的设计!”的消息对话框来。
第5章对话框和常用控件
5.1 对话框的使用 5.2 控件的创建和使用方法 5.3 常用控件 5.4 通用对话框和消息对话框
第5章对话框和常用控件
5.1 对话框的使用 5.2 控件的创建和使用方法 5.3 常用控件 5.4 通用对话框和消息对话框
5.1对话框的使用 (1 of 14)
5.1.1模式和无模式对话框
5.1对话框的使用 (2 of 14)
5.1.2 创建对话框 步骤:单击“Insert” “Resource”,在弹出的对话框中选择“Dialog”, 然后单击“New”,就会新建一个对话框。
5.1对话框的使用 (3 of 14)
5.1.3使用对话框编辑器
打开对话框编辑器
将项目工作区窗口切换到ResourceView页面,双击Dialog目录下任意一个 对话框ID。