Visual C++程序设计教程课件第6章_第1页
Visual C++程序设计教程课件第6章_第2页
Visual C++程序设计教程课件第6章_第3页
Visual C++程序设计教程课件第6章_第4页
Visual C++程序设计教程课件第6章_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

第6章对话框

第6章对话框

在Windows程序中,对话框是最重要的显示信息和取得用户数据的单元; 一个应用程序可以拥有几个对话框,这些对话框从用户那里接受特定类型的信息; 可以使用资源编辑器创建对话框资源,向其中添加控件,调整对话框的布局,使对话框更加便于使用。6.1消息映射

WINDOWS中消息主要有以下三种类型:标准的WINDOWS消息:这类消息是以WM_为前缀,例如WM_COMMAND、WM_MOVEWM_QUIT等;命令消息:命令消息以WM_COMMAND为消息名。控件通知消息:控件通知消息也是以WM_COMMAND为消息名。6.1消息映射(续)

对于标准的Windows消息,在CWnd类中已经预定义了默认的处理函数。这些函数以On开头,以它响应的WindowsWM_消息名后半部分作为函数名的后半部分; 对于控件通知消息和命令消息,一般没有默认的消息处理函数,其函数名理论上可以随意,但最好遵守一些约定,如以On开头。当用ClassWizard加入这两种消息处理函数时,它会提供一个建议的函数名。6.1消息映射(续)消息映射包括了两部分:一部分存在于头文件中。在类的定义中加上一行宏调用:

DECLARE_MESSAGE_MAP()另一部分存在于类的实现文件(.cpp文件)中。在文件中加上消息映射表:

BEGIN_MESSAGE_MAP(类名,父类名)

……

消息映射入口项

…… END_MESSAGE_MAP()6.2定义对话框

对话框大致可以分为以下两种:模态对话框 模态对话框弹出后,独占了系统资源,用户只有在关闭模态对话框后,才可以继续执行应用程序其他部分的代码。模态对话框一般要求用户做出某种选择。非模态对话框 非模态对话框弹出后,程序可以在不关闭对话框的情况下继续执行,在转入到应用程序其他部分的代码时可以不需要用户做出响应。非模态对话框一般用来显示信息,或者实时的进行一些设置。6.2定义对话框(续)

一般的对话框的创建与使用流程可以大体分为以下步骤:

1.创建对话框资源

2.创建与对话框资源相关的对话框类的派生类

3.创建有关控件的消息响应

4.创建与控件相关联的变量

5.在程序中创建对话框类派生类的对象

6.调用DoModal或Creat函数显示对话框对话框实例:步骤1.使用AppWizard创建一个基于对话框类型的程序Eg6_1。 注意在AppWizard的第一页选择“Dialogbased”。步骤2.AppWizard创建新项目完成后,在工作区单击ResourceView标签来修改程序的资源,双击资源文件夹中的Dialog,然后双击IDD_EG6_1_DIALOG项,打开下图所示的对话框。对话框实例(续)这个标准对话框模板中,使用了两种控件,即两个按钮和一个静态文本。对话框实例(续)

步骤3.可以设置对话框的属性,右键单击整个对话框的背景,选择“Properties”项,在弹出的对话框中修改此对话框ID为:IDD_EG6_1_DIALOG”,标题为:“对话框示例”。

对话框实例(续)

步骤4.当对话框资源完成以后,选择View|ClassWizard,打开ClassWizard。发现已经有一个类CEg6_1Dlg与新的对话框相联系。 如果没有与对话框资源相对应的对话框类,可以使用ClassWizard创建一个新类。6.3通用对话框

Windows操作系统提供了通用对话框,MFC也提供了相应的类,用来操作这些通用对话框。这个类就是CCommonDialog类。6.3.1通用对话框

与文件对话框相对应的类是CFileDialog类。 函数原型如下:CFileDialog(BOOLbOpenFileDialog,LPCTSTRlpszDefExt=NULL,//为用户指定一个缺省的扩展名LPCTSTRlpszFileName=NULL,//指定对话框中出现的初始文档名DWORDdwFlags=OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,//设置不同的标志来规范对话框的行为LPCTSTRlpszFilter=NULL,//允许用户指定过滤器来选择在文档列表中出现过的文档CWnd*pParentWnd=NULL//指向父对话框的指针); 在构造了CFileDialog对象之后,可以调用函数DoModal()以显示对话框。6.3.2应用实例

在工程Eg6_1中,打开资源编辑器,右键单击背景部分,在弹出的菜单中选择Insert,在InsertResources对话框中选择Menu,单击NEW。 打开DialogProperties对话框,在Menu项选择IDR_MENU1,将菜单与对话框资源联系起来。6.3.2应用实例(续)步骤1.在资源编辑器里选择IDR_MENU1,建立文件菜单,文件菜单下包括打开和另存为两个子菜单。两个子菜单的属性设置如图:

6.3.2应用实例(续)6.3.2应用实例(续)步骤2.为子菜单添加消息响应函数为“打开”子菜单添加消息响应函数如下:voidCEg6_1Dlg::OnFileOpen(){CFileDialogdlg(true);//构造文件通用对话框对象dlg.DoModal();//打开文件对话框}6.3.2应用实例(续)步骤3.为“另存为”子菜单添加消息响应函数如下:voidCEg6_1Dlg::OnFileSaveAs(){CFileDialogdlg(FALSE);//构造文件通用对话框对象dlg.DoModal();//打开文件对话框}运行程序,分别选择“打开”和“另存为”菜单查看结果。6.4消息对话框

消息对话框是最常用最简单的对话框,一般将通过调用函数MessageBox弹出的对话框称为消息对话框。

MessageBox函数原型为:

intMessageBox(

HWNDh//父级窗口的句柄

LPCTSTRlpText,//指向信息字符串地址的指针

LPCTSTRlpCaptain,//指向消息对话框标题

//字符串地址指针

UINTuType//消息对话框的风格 );6.4消息对话框(续)

下面为Eg6_1程序增加消息对话框的功能:步骤1.为对话框新增一个菜单IDR_MENU2,标题为“其他对话框”,其子菜单为“消息对话框”,其属性设置如图:6.4消息对话框(续)

步骤2.利用ClassWizard为“警告”菜单添加消息相应函数,函数名为OnMenu1(),代码如下:

voidCEg6_1Dlg::OnMenu1() { //TODO:Addyourcommandhandlercodehere

MessageBox(“未保存文件,要退出吗?”,“警告”, MB_ICONWARNING+MB_YESNO+MB_DEFBUTTON2);

}6.4消息对话框(续)

步骤3.运行程序,选择“消息对话框”子菜单,查看运行结果。6.5属性对话框

属性页对话框将多个对话框集中起来,通过标签或按钮来激活各个页面,主要分为一般属性页对话框和向导对话框两类。在一般属性页对话框中,页面的切换通过点击不同的标签实现;在向导对话框中,页面的选择是通过点击“上一页”、“下一页”等按钮实现的。属性页对话框

与属性页对话框相关的类主要包括CPropertySheet类和CPropertyPage类。

CPropertySheet类是CWnd的一个派生类,其对象作为属性页对话框的窗口框架出现,主要实现管理各个属性页面的作用。

CPropertySheet类的重要成员函数:VoidAddPage(CpropertyPage*pPage):该函数用于向属性框中增加属性页。intDoModal():用于显示一个模态属性页,对于一般属性页,返回值为IDOK、IDCANCEL或者0。

为Eg6_1程序增加消息对话框的功能:步骤1.首先为菜单“其他对话框”增加子菜单“属性页对话框”。步骤2.打开资源面板,选择Dialog条目,单击右键,在弹出的菜单中选择InsertDialog,新建两个对话框资源;步骤3.将新建的对话框标题该为“第一页”和“第二页”;步骤4.为新建的对话框资源添加其相对应的类,类名分别为“Dlg”、“Dlg1”;步骤5.利用ClassWizard为“属性页对话框”菜单添加消息相应函数,函数名OnMenu2(),为其添加代码如下:为Eg6_1程序增加消息对话框的功能:(续)voidCEg6_1Dlg::OnMenu2(){ //TODO:AddyourcommandhandlercodehereCPropertySheetm_sheet("属性页对话框");CDlg1page2;CDlgpage1;m_sheet.AddPage(&page1);m_sheet.AddPage(&page2);m_sheet.DoModal();}6.6鼠标和键盘消息

消息分为鼠标消息、键盘消息、窗口消息、自定义消息。

VisualC++把消息机制有效的封装起来,不需要写冗长的代码就可以很轻松的编写各个不同的处理函数。6.6.1鼠标消息

用户移动鼠标时,系统屏幕上移动一个称之为鼠标光标的位图。鼠标光标含有一个叫做热点的像素点,系统用它来跟踪和识别光标的位置。6.6.1鼠标消息

用户移动鼠标时,系统屏幕上移动一个称之为鼠标光标的位图。鼠标光标含有一个叫做热点的像素点,系统用它来跟踪和识别光标的位置。

捕捉鼠标

系统通常在发生鼠标事件时,向含有光标热点的窗口投递消息,应用程序可以使用函数SetCapture来改变这种特性,把鼠标消息发往指定的窗口。在应用程序调用函数ReleaseCapture或指定另一个捕捉窗口之前,或者是在用户单击另一个线程创建的窗口之前,这个窗口将接收所有鼠标消息。鼠标消息类型

只要用户移动鼠标,按下或释放鼠标,鼠标将会产生一个输入事件。Windows系统把鼠标事件转换为消息,再把它们投递到线程消息队列中。消息分为两组:客户区消息和非客户区消息。鼠标消息类型(续)鼠标消息的建立要对鼠标操作进行处理,可在Eg6_1程序中作如下操作:单击File|ClassWizard,打开MFCClassWizard对话框,准备生成鼠标消息处理函数。选中标签MemberMap标签中的ControlIds项中的条目Eg6_1Dlg,在Messages里面选择WM_RBUTTONDOWN。鼠标消息的建立(续)单击“AddFuction”按钮,然后单击“EditCode”按钮,进入源程序,增加以后的代码如下:voidCEg6_1Dlg::OnRButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault

MessageBox(“右键被按下”);

CDialog::OnRButtonDown(nFlags,point);}6.6.2键盘消息

按下一个键就会产生一条WM_KEYDOWN或WM_SYSKEYDOWN消息,并将被放到与有关键盘输入的窗口相应的线程消息队列中,释放一个键则会产生一条WM_KEYUP或WM_SYSKEYUP消息,同样也会被放到队列中。系统和非系统击键 Windows系统对系统击键和非系统击键有一个划分,系统击键将产生系统击键消息WM_SYSKEYDOWN和WM_SYSKEYUP消息,非系统击键将产生WM_KEYDOWN和WM_KEYUP消息。键盘消息类型WM_KEYDOWN:某一键被按下WM_

温馨提示

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

评论

0/150

提交评论