对话框和常用控件_第1页
对话框和常用控件_第2页
对话框和常用控件_第3页
对话框和常用控件_第4页
对话框和常用控件_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

对话框和常用控件本章内容

4.1对话框简介

4.2对话框资源

4.3对话框程序设计方法4.4常用控件(自学)

4.5作业4.1对话框简介

对话框是一种用户界面,它为用户提供了一种标准的处理数据的方法。因为大部分的对话框是作为对菜单的单击响应而显示出来的(在Word软件中,单击菜单项后有…的菜单,看都会出现哪些对话框),因此对话框常常被看作是用户菜单命令的扩展。从程序员角度来看,对话框和控件都是窗口,查看MSDN中的MFC组织图可以看到,它们都是从CWnd类派生来的,这正好说明了“对话框和控件都是窗口”。因此,对对话框的操作,经常要使用窗口的成员函数来进行。4.1.1 对话框的分类

1.模态对话框在对话框关闭之前,用户无法在应用程序的其它窗口中进行工作的对话框称为模态对话框。例如Windows的各种应用软件中的OpenFile对话框,用户不能在应用程序的其它地方工作,直到对话框关闭。2.非模态对话框对话框保留在屏幕的同时,用户还可以在应用程序其它窗口中进行工作的对话框称为非模态对话框。例如,Word字处理软件中的Find和Replace对话框就是非模态对话框的一个很好的例子。

4.1.2 对话框的组成

对话框模板对话框模板定义了对话框的特性(比如大小、位置和风格)以及对话框中每个控件的类型和位置。程序员不仅可以使用对话框资源编辑器建立对话框资源模板外,还可以根据需要在内存中创建对话框模板。当对话框模板创建后,程序员好可以在创建和管理对话框时动态地改变部分控件的信息,如禁止、变灰、改变标题和大小。对话框模板可以看作对话框应用程序的一种用户接口,用户在应用程序的使用中,看到的都是资源模板中的东西。

4.1.2 对话框的组成(续)

对话框类

从CDialog类派生的对话框类提供编程接口来管理与对话框模板相关联的对话框。CDialog类的许多成员函数与对话框编程密切相关,可供程序员调用。由于对话框是一种窗口,因此相应的对话框类必须与一个Windows窗口相联系,而对话框资源模板就是用于创建这个Windows窗口及其包含在其中的控件。对话框类可以看作对话框应用程序的一种程序员接口,用户对应用程序操作,后台调用的都是该类的成员函数来完成的。6

4.1.3 对话框的实现过程使用对话框的一般过程:①添加对话框资源;②设置对话框的属性;③添加和布局控件;④创建对话框类;⑤添加对话框代码;⑥在程序中调用对话框。4.2对话框资源图4.1Ex_SDI资源视图资源类别资源标识符一个单文档应用程序所使用的资源可分为下列几类:(1)快捷键列表(Accelerator)。一系列组合键的集合,被应用程序用来引发一个动作。该列表一般与菜单命令相关联,用来代替鼠标操作。(2)对话框(Dialog)。含有按钮、列表框、编辑框等各种控件的窗口。(3)图标(Icon)。代表应用程序显示在Windows桌面上的位图,它同时有32x32像素和16x16像素两种规格。(4)菜单(Menu)。用户通过菜单可以完成应用程序的大部分操作。(5)字串表(StringTable)。应用程序使用的全局字符串或其他标识符。9(6)工具栏按钮(Toolbar)。工具栏外观是以一系列具有相同尺寸的位图组成的,它通常与一些菜单命令相对应,用以提高用户的工作效率。(7)版本信息(Version)。包含应用程序的版本、用户注册码等相关信息。除了上述常用资源类别外,VisualC++6.0应用程序中还可有鼠标指针、HTML等,也可以自己添加新的资源类别。ID标识符一般地,要遵循下列规则:在标识符名称中允许使用字母a~z、A~Z、0~9以及下划线。标识符名称不区分大小写字母,如new_idd与New_Idd是相同的标识符。不能以数字开头,如8BIT是不合法的标识符名。除了上述规则外,出于习惯,VisualC++还提供了一些常用的定义标识符名称的前缀供使用、参考,见下表。11添加对话框资源对展开的不同类型的对话框资源不作任何选择,选中“Dialog”,单击[新建]按钮,系统就会自动为当前应用程序添加了一个对话框资源,并出现如下图所示的界面。添加对话框资源后的开发环境13对话框模板控件工具栏布局工具栏默认标识符一旦对话框资源被打开或被创建,就会出现对话框编辑器,通过它可以在对话框中进行控件的添加和布局等操作。控件的添加。对话框编辑器最初打开时,控件工具栏是随之出现的,利用此工具栏中的各个按钮可以顺利完成控件的添加。下图说明了各个按钮所对应的控件类型。15控件的选择静态文本组框复选框组合框水平滚动条旋转按钮滑动条列表视图标签复合编辑月历用户定制控件静态图片编辑框按钮单选框列表框垂直滚动条进展条热键树形视图动画日期选择IP地址扩展组合框创建对话框类

MFC提供了一系列对话框类,并实现了对话框消息响应和处理机制。CDialog类是对话框类中最重要的类,我们在程序中创建的对话框类一般都是CDialog类的派生类。CDialog类还是其它所有对话框类的基类,其派生关系如下所示:

CObject CCmdTarget CWnd CDialog

17CDialog类从CWnd类派生而来,所以它继承了CWnd类的成员函数,具有CWnd类的基本功能,在你的CDialog类的派生类中可以直接调用CDialog类的成员函数。大部分的成员函数是虚函数,可以在你的派生类中重载,以实现特定的目的。除了CDialog类成员函数,类CWnd和CWinApp也提供了一些成员函数用于对话框的管理。

有关对话框的常用处理函数CDialog::CDialog()通过调用派生类构造函数,根据对话框资源模板定义一个对话框。CDialog::DoModal()激活模态对话框,显示对话框窗口。CDialog::Create()根据对话框资源模板创建非模态对话框窗口。如果对话框不是Visible属性,还需通过调用CWnd::ShowWindow()函数显示非模态对话框窗口。CDialog::OnOk()单击OK按钮时调用该函数,接收对话框输入数据,关闭对话框。19CDialog::OnCancel()单击Cancel按钮或按Esc键时调用该函数,不接收对话框输入数据,关闭对话框。CDialog::OnInitDialog()WM_INITDIALOG消息处理函数,在调用DoModal或Create函数时系统发送WM_INITDIALOG消息,在显示对话框前调用该函数进行初始化。CDialog::EndDialog()用于关闭模态对话框窗口。CWnd::ShowWindow()显示或隐藏对话框窗口CWnd::DestroyWindow()关闭并销毁非模态对话框CWnd::UpdateData()通过调用DoDataExchange()设置或获取对话框控件的数据,此函数只有一个BOOL参数,当为TRUE时,将控件信息转换为变量数据;反之,将变量数据转换为控件信息。CWnd::DoDataExchange()被UpdateData()调用以实现对话框数据交换,不能直接调用。

CWnd::GetWindowText()获取对话框窗口的标题CWnd::SetWindowText()修改对话框窗口的标题CWnd::GetDlgItemText()获取对话框中控件的文本内容CWnd::SetDlgItemText()设置对话框中控件的文本内容CWnd::GetDlgItem()获取控件或子窗口的指针CWnd::MoveWindow()用于移动对话框窗口CWnd::EnableWindow()使窗口处于禁用或可用状态26

4.3对话框程序设计方法例1:模式对话框设计在本例中,我们将制作一个简单的对话框,它通过菜单命令弹出,当单击菜单命令“弹出对话框”,应用程序弹出一名为“Dialog”对话框。注意:在模式对话框推出之前,程序不能继续进行,必须等到对话框关闭。实现步骤:1、建立资源;2、创建类;3、实现消息映射,添加代码;4、编译运行。1、建立资源运行AppWizard建立一个单文档应用程序创建对话框模板,单击菜单命令“Insert/Resource”,选中“Dialog”,单击“new”按钮,可看到如下对话框模板。首先删除“Cancel”按钮,将“OK”按钮拖放到中下方,之后添加一个“StaticText”控件,设置标题为“VC课程”。

设置对话框ID,鼠标右键单击对话框,选择“Properties”选项,在弹出的属性对话框中,ID设置为IDD_MYDIALOG。28创建菜单命令:打开资源编辑器中的菜单项,添加自己的菜单命令,其ID值设置为ID_PUPDIALOG

2、创建类创建基于新对话框的类,可双击新建的对话框,它将弹出下面菜单单击“ok”按钮,在下一个出现的对话框中添加新建的类名,选择基类和对话框ID,在Name选项中填入“CMyDlg”,在“Baseclass”选项中选择“CDialog”作为该类的基类。3、实现消息映射,添加代码

选择类名CMainFrame(管理菜单),选择ID:ID_PUPDIALOG,在Message中选择COMMAND,通过ADDFUNCTION建立菜单项“弹出对话框”的消息映射。在函数中添加如下代码:在MainFrm.cpp文件中添加如下代码:#include“MyDlg.h”4、编译运行,单击build/Execute*.exe。结果如下例2文本控件应用本例通过键盘输入信息显示在菜单窗口。步骤:1、建立单文档程序,建立对话框,修改其属性2、建立菜单3、为新对话框建立新类4、建立消息映射、添加代码;5、编译运行1、建立单文档程序,建立对话框,修改其属性运行AppWizard创建一单文档应用程序创建对话框模版将对话框“OK”按钮的标题改为“Apply”,添加一个文本控件和一个静态文本控件

设置文本控件ID,ID值为:IDC_MYEDIT设置对话框ID,鼠标右键单击对话框,选择“Properties”选项,在属性对话框中ID设置为IDD_MYDIALOG。

2、建立菜单

打开资源编辑器中的菜单项,添加自己的菜单命令。3、为新对话框建立新类新对话框类属性设置

4、建立消息映射、添加代码在CMyDlg对话框类头文件中添加一个公有成员变量CString m_String;//用于与对话框文本控件数据交换。//通过此字符变量获取文本控件信息。在CMyDlg对话框类的构造函数对此变量进行初始化。CMyDlg::CMyDlg(CWnd*pParent/*=NULL*/) :CDialog(CMyDlg::IDD,pParent){ //{{AFX_DATA_INIT(CMyDlg)//NOTE:theClassWizardwilladdmemberinitializationhere

m_String=_T(""); //}}AFX_DATA_INIT}在CMyDlg对话框类的DoDataExchange函数中添加动态数据映射函数voidCMyDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyDlg) //NOTE:theClassWizardwilladdDDXandDDVcallshere

DDX_Text(pDX,IDC_MYEDIT,m_String); //}}AFX_DATA_MAP}此函数将ID为IDC_MYEDIT的控件内容信息传给m_String。在视图类的头文件中添加如下代码:

#include“MyDlg.h”//将对话框类包含到视图类中。classCMyMsgView:publicCView{protected://createfromserializationonly CMyMsgView(); DECLARE_DYNCREATE(CMyMsgView)//Attributespublic: CMyMsgDoc*GetDocument();

CMyDlgDlg;//创建对话框对象CStringstr;//此字符变量存储对话框传来的控件内容信息。//Operations添加菜单命令“ID_D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论