




已阅读5页,还剩99页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
建议学时:12学习重点:理解相关概念掌握对话框编程掌握常用控件使用,第四章对话框及Windows,1,本章内容,对话框,模态对话框和非模态对话框,属性对话框,通用对话框,Windows常用控件,综合实例,对话框主要由两部分组成:对话框资源和对话框类,对话框资源,4.1对话框概述,对话框类,4.1对话框概述,4.1对话框概述,对话框(DialogBox)是GUI(图形用户界面GraphicalUserInterface)的常用组件,也是其最复杂的组件。按照对话框工作方式可以分为两种类型:模态对话框和非模态对话框。模态对话框:在关闭模态对话框之前,该程序不能进行其他工作。我们通常所用的对话框大部分都是模态对话框。如:“保存”对话框;“打开”对话框。非模态对话框:非模态对话框打开后,该程序仍然能够进行其他工作。如:“查找与替换”对话框。,MFC的对话框基类为CDialog,它既支持模态对话框,也支持非模态对话框。派生关系如下所示:,4.1对话框概述,CDialog的主要的成员函数有:virtualintDoModal()功能:打开模态对话框,直到对话框关闭时返回。若点击“OK”键关闭,则返回“IDOK”。BOOLCreate(LPCTSTRlpszTemplateName,CWnd*pParentWnd=NULL)功能:创建一个对话框。(通常用于非模态对话框的创建)voidEndDialog(intnResult)功能:退出一个模态对话框,4.1对话框概述,virtualvoidOnCancel()功能:该函数是单击模态或非模态对话框中的Cancel按钮,或Esc键时,由框架调用。virtualBOOLOnInitDialog()功能:对话框初始化virtualvoidOnOK()功能:单击OK(或确定)按钮,(ID为IDOK的按钮)时调用的函数,关闭模态对话框,并返回IDOK。,4.1对话框概述,1.模态对话框的创建和引用过程基本步骤:添加对话框资源,设置其属性。在ResourceView,Dialog中右键点击,插入新对话框。,4.2模态和非模态对话框,IDD通常需要修改,Caption用于输入标题,要确保Language为“中文”,4.2模态和非模态对话框,为新建的对话框建立相应的类。使对话框与具体的类相绑定。,4.2模态和非模态对话框,在主对话框中定义对话框对象,并调用DoModal函数打开注意:在主对话框类中需要添加#include“对话框类名.h”如:#include“Dlg1.h”CDlg1d1;d1.DoModal();,4.2模态和非模态对话框,【例4_1】模态对话框的创建过程。,4.2模态和非模态对话框,2.非模态对话框的创建和引用过程基本步骤:在ResourceView,Dialog中右键点击,插入新对话框。为新建的对话框建立相应的类。使对话框与具体的类相绑定在主对话框中定义对话框对象,并调用Create函数打开。并通过ShowWindow函数显示。注意:定义类的对象必须定义为指针类型。利用DestroyWindow函数关闭非模态对话框。注意:OnOk或OnCancel函数仅为隐藏非模态对话框,而DestroyWindow可以关闭非模态对话框。,4.2模态和非模态对话框,例如:CNewDlg*pDlg=newCNewDlg;pDlg-Create(IDD_DIALOG1,this);pDlg-ShowWindow(SW_SHOW);,4.2模态和非模态对话框,【例4_2】非模态对话框的创建过程。,4.2模态和非模态对话框,创建属性页的方法(两种)1.在相关函数里创建CPropertySheet类的对象。添加每个属性页对话框,并为每个对话框添加以CPropertyPage类为基类的对话框类。创建CPropertySheet类的对象,调用AddPage函数进行加载AddPage函数定义:voidAddPage(CPropertyPage*pPage)调用DoModal函数打开属性对话框。,4.3属性对话框,参考代码:CPropertySheets1(_T(属性页对话框);CPage1p1;CPage2p2;CPage3p3;s1.AddPage(,4.3属性对话框,【例4_3】属性对话框的创建过程。,4.3属性对话框,2.创建一个新的以CPropertySheet为基类的类,并通过其对象创建。(书上的方法)添加每个属性页对话框,并为对话框添加以CPropertyPage类为基类的对话框类。创建新的以CPropertySheet为基类的类。Project-AddClass-MFCclass-,4.3属性对话框,在新类的.h文件内添加属性页类的对象。如:CPage1p1;CPage2p2;CPage3p3;在新类的.cpp文件的第二个构造函数内调用AddPage函数加载如:AddPage(在相关函数中创建新类的对象,并调用DoModal函数打开属性页对话框。,4.3属性对话框,已经被系统定义好,直接可以拿来使用的对话框,4.4通用对话框,消息对话框(MessageBox或AfxMessageBox类),一种简单的对话框,用户可以直接调用消息对话框函数来使用它,而不需要自己创建。VisualC+提供三个消息对话框函数,它们的原型为:intAfxMessageBox(LPCTSTRlpText,UINTnType=MB_OK,UINTnIDHelp=0);intMessageBox(HWNDhWnd,LPCTSTRlpText,LPCTSTRlpCaption,UINTnType);intCWnd:MessageBox(LPCTSTRlpText,LPCTSTRlpCaption=NULL,UINTnType=MB_OK);,4.4通用对话框,4.4通用对话框,4.4通用对话框,例如:voidCLi2_1View:OnDraw(CDC*pDC)CLi2_1Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:adddrawcodefornativedatahereMessageBox(_T(这是一个单文档应用程序!),_T(消息框),MB_ICONEXCLAMATION|MB_OKCANCEL);或者AfxMessageBox(_T(这是一个单文档应用程序!),MB_ICONEXCLAMATION|MB_OKCANCEL);两个函数均至少可定义一个参数。,运行结果如下:,1.颜色对话框(CColorDialog类)CColorDialog类提供了可以选择颜色的对话框,使得用户可以从颜色列表中选择要用的颜色。该类的操作步骤进行:(1)在视图类相应位置构造CColorDialog对象。(2)调用成员函数DoModal()来显示对话框并让用户从中选择颜色。(3)通过GetColor函数获取得到的颜色。,参考代码:CClientDCdc(this);CColorDialogcoldlg;if(coldlg.DoModal()=IDOK)COLORREFcol=coldlg.GetColor();dc.SetTextColor(col);dc.TextOut(250,250,_T(颜色被选定);,4.4通用对话框,【例4_4_1】颜色对话框的使用。,4.4通用对话框,2.字体对话框(CFontDialog类)CFontDialog的成员函数,4.4通用对话框,CFontDialog类封装了标准的【字体】对话框,使得用户可以从系统安装的字体列表中选择要用的字体。该类的操作步骤进行:(1)定义LOGFONT对象f1,并定义CFontDialog对象dlg(LOGFONTf1;COLORREFc1;CFontDialogfontdlg(,4.4通用对话框,【例4_4_2】字体对话框的使用。,3.文件对话框(CFileDialog类)用CFileDialog类提供的通用文件对话框,实现Windows标准的【打开】和【另存为】功能。,使用CFileDialog步骤:构造CFileDialog类的对象。该类的构造函数为:CFileDialog(BOOLbOpenFileDialog,)值为TRUE,代表【打开】对话框;值为FALSE,构造【另存为】对话框,CFileDialogdlg(TRUE,_T(bmp“),_T(*.bmp“),OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT,_T(文本文件(*.txt)|*.txt|Word文件(*.doc)|*.doc|);第1个参数TRUE:【打开】对话框;第2个参数“bmp”:如果在文件名对话框中输入文件名时未指定扩展名,则会自动附加“.bmp”;第3个参数“*.bmp”:文件名对话框中的初始文件名是*.bmp;第4个参数代表dwFlags:不显示隐藏文件,且可以在列表框中进行多选;如:OFN_EXPLORER,OFN_HIDEREADONLY,OFN_ALLOMULTISELECT第5个参数是过滤器:允许打开文件的类型,可以多选,以|表示或者,以|表示结束。,(2)调用成员函数DoModal(),将对话框显示在屏幕上,并让用户从中选择文件。(3)如果DoModal()返回的是IDOK,那么调用下表中的成员函数获取文件信息。,参考代码:CFileDialogdlg(FALSE,_T(txt),_T(*.txt),OFN_EXPLORER,_T(文本文件(*.txt)|*.txt|所有文件(*.*)|*.*|);CStrings;if(dlg.DoModal()=IDOK)s=dlg.GetPathName();MessageBox(s+_T(被保存),_T(保存文件);,【例4_4_3】打开和保存对话框的使用。,本部分小结:(1)了解对话框的含义,属性。(2)了解如何在资源视图中添加新的对话框,设置对话框属性,并为对话框添加类。(3)熟悉模态对话框和非模态对话框的创建过程。(4)掌握通用对话框。,1增加或删除控件,增加控件:从控件工具栏中选中要增加的控件,再将此控件拖动至对话框模板中的确定位置上删除控件:先单击对话框中的控件,再按Delete键,控件的选择,按钮,组合框,复选框,编辑框,分组框,列表框,单选按钮,静态文本,图片,水平滚动条,垂直滚动条,滚动条,旋转按钮,进度条,热键,列表视图,树形视图,标签,动画,组合编辑,日期选择,日历,IP地址,组合框的扩展,用户定制工具,控件属性与组织:右键点击控件-property通常需要修改的是:Caption(标题)和ID(ID标号)当选中若干个控件后可以调整控件的相对位置。若没有以下视图则选择添加自定义工具栏-”布局”。,4.5Windows常用控件,调整Tab顺序TabOrder规定了使用Tab键访问控件的顺序,默认的TabOrder是控件生成的顺序,选择菜单项Format|TabOrder可以显示并修改TabOrder。,改变TabOrder的方法是:选择TabOrder菜单项、出现了顺序号之后,按所需的访问顺序依次单击每一个控件,然后,单击空白处。,控件的成员变量:右键点击控件-Addvariable,控件的成员变量:创建的成员变量分为值类型和控件类型。,编辑框的通知消息,访问控件一般有三种方法:1利用对话框的数据交换功能访问控件2通过控件对象来访问控件3利用CWnd类的一些用于管理控件的成员函数来访问控件,4.5.1控件编程方法,常用的用于控件的函数:GetDlgItem()函数:该函数根据参数说明的控件ID,返回指定控件的一个CWnd型指针。程序可以把该指针强制转换成相应的控件类指针,然后通过该指针来访问控件。SetFocus()函数:设置当前输入焦点。GetFocus()函数:获取当前拥有输入焦点的CWnd对象。,静态控件(StaticControl)是用来显示一个文本串或图形信息的控件,包括静态文本控件(StaticText)、图片控件(PictureControl)和组框(GroupBox)。所有静态控件默认的ID标识都为IDC_STATIC,如果需要在程序中区分和操纵各个不同的静态控件,必须重新为它指定一个惟一的ID标识。,4.5.3常用控件CStatic类控件,1.StaticText静态文本控件不要求与对话框进行交互,需要显示的文本串只要在该控件属性对话框的Caption属性中直接输入。,修改Caption值,其它属性:Aligntext决定文本的横向对戏方式:LeftCenterRight。默认Left.Noprefix不将控件文本中的“/在列表框的尾部添加在指定字符串。(2)列表类对象.InsertString(nIndex,_T(“指定字符串”);/在列表框的标号为nIndex的位置添加在指定字符串。(3)intnIndex=列表类对象.GetCurSel();/得到当前所选项的标号。(4)列表类对象.DeleteString(nIndex)/删除指定列表标号的内容。(5)intnIndex=列表类对象.FindString(-1,_T(“指定字符串”);/从-1(列表起始位置开始查找指定字符串,返回该字符串的位置,若查无此项,则返回LB_ERR)。(6)列表类对象.SetCurSel(nIndex);/将列表项定位在nIndex位置(7)列表类对象.GetText(nIndex,str);/将nIndex位置的内容取出赋给str字符串。,列表框的通知消息,【例4_List】列表类的使用。,组合框的属性组合框控件是把编辑框和列表框控件组合起来的一类控件。按风格特征,可把组合框分为3类:简单组合框、下拉式组合框和下拉式列表框。,类型,数据,4.5.2常用控件CComboBox类控件,1简单组合框(Simple)显示一个编辑控件和列表框。该列表框总是可见的。当列表框包含的选项太多,显示不下时,将使用一个滚动条在整个列表框中滚动。2下拉式组合框(Dropdown)除了包含一个编辑框和列表框外,还包含一个下拉按钮。仅当单击下拉按钮时才出现列表框。编排控件时单击下拉按钮,当光标变成“”形状时,可以调整程序运行后列表框部分显示的大小(单击下拉按钮),如图所示。,3下拉式列表框(DropList)与下拉式组合框相似,只有被用户打开时,才显示列表框。同时,编辑框只能显示选中的选项,而不允许用户输入。因此,用户只能从列表框中选择选项。,组合框大部分属性与编辑框或列表框相关的属性有相同的意义,但它有一个新的功能属性,即可以通过组合框控件属性对话框的Data选项卡添加初始的列表项,如下图所示。注意,每输入完一个列表项,按下“;”键后才能换行输入下一项。,组合框的基本操作,组合框的操作可以分为两类:对组合框中的列表框进行操作和对组合框的编辑控件进行操作。,组合框的通知消息,在组合框的通知消息中,有的是列表框发出的,有的是编辑框发出的。,【例4_ComboBox】组合框类的使用。,在树形控件中每一个结点都有一个句柄(HTREEITEM),同时添加结点时必须提供的参数是该结点的父结点句柄,(其中根Root结点只有一个,既不可以添加也不可以删除)利用InsertItem可以添加一个结点,函数原形:HTREEITEMInsertItem(LPCTSTRlpszItem,HTREEITEMhParent=TVI_ROOT,HTREEITEMhInsertAfter=TVI_LAST)pszItem为显示的字符,hParent代表父结点的句柄,当前添加的结点会排在hInsertAfter表示的结点的后面,返回值为当前创建的结点的句柄。第三个参数可不初始化。例如:HTREEITEMm_root1=m_Tree.InsertItem(_T(计算机),TVI_ROOT);,4.5.3高级控件树形控件TreeCtrl,树形控件的属性,是否拥有扩展按钮,CTreeCtrl成员函数:HTREEITEMGetRootItem();得到根结点。HTREEITEMGetChildItem(HTREEITEMhItem);得到子结点。HTREEITEMGetPrevSiblingItem/GetNextSiblingItem(HTREEITEMhItem);得到指明结点的上/下一个兄弟结点。HTREEITEMGetParentItem(HTREEITEMhItem);得到父结点。,HTREEITEMGetSelectedItem();得到所选择的结点的句柄。LPCTSTRGetItemText(HTREEITEM*tree);得到指定结点的结点文本信息,返回一个字符串。,CTreeCtrl通知消息:TVN_SELCHANGED在所选中的结点发生改变后发送。TVN_ITEMEXPANDED在某结点被展开后发送。TVN_BEGINLABELEDIT在开始编辑结点字符时发送。TVN_ENDLABELEDIT在结束编辑结点字符时发送。TVN_GETDISPINFO在需要得到某结点信息时发送。,【例4_Tree】树形视图类的使用。,参考代码:/信息初始化HTREEITEMm_root1=m_Tree.InsertItem(_T(计算机),TVI_ROOT);HTREEITEMm_root2=m_Tree.InsertItem(_T(基础学科),TVI_ROOT);HTREEITEMm_root3=m_Tree.InsertItem(_T(外语),TVI_ROOT);HTREEITEMm_h11=m_Tree.InsertItem(_T(软件),m_root1);HTREEITEMm_h12=m_Tree.InsertItem(_T(硬件),m_root1);HTREEITEMm_h111=m_Tree.InsertItem(_T(软件工程),m_h11);HTREEITEMm_h112=m_Tree.InsertItem(_T(数据库),m_h11);HTREEITEMm_h113=m_Tree.InsertItem(_T(网络),m_h11);HTREEITEMm_h21=m_Tree.InsertItem(_T(数学),m_root2);HTREEITEMm_h22=m_Tree.InsertItem(_T(物理),m_root2);HTREEITEMm_h31=m_Tree.InsertItem(_T(英语),m_root3);HTREEITEMm_h32=m_Tree.InsertItem(_T(日语),m_root3);HTREEITEMm_h33=m_Tree.InsertItem(_T(俄语),m_root3);,/信息获取HTREEITEMhp;hp=m_Tree.GetSelectedItem();m_edit=m_Tree.GetItemText(hp);UpdateData(false);,Tab属性页控件可以在一个窗口中添加不同的页面,然后在页选择发生改变时得到通知。效果和属性对话框相似。,4.5.3高级控件标签TabCtrl,添加页面的函数为:BOOLInsertItem(intnItem,LPCTSTRlpszItem);nItem为添加页面位置,从零开始,lpszItem为页选择位置上显示的文字。此外CTabCtrl还提供了一些函数用于得到/修改控件的状态。intGetCurSel()/intSetCurSel(intnItem);用于得到/设置当前被选中的页位置。BOOLDeleteItem(intnItem)/BOOLDeleteAllItems();用于删除指定/所有页面。voidRemoveImage(intnImage);用于删除某页选择位置上的图标。,对于列表控件的通知消息为:TCN_SELCHANGE在当前页改变后发送。TCN_SELCHANGING在当前页改变时发送可以通过返回TRUE来禁止页面的改变。,为TabCtrl控件添加页面步骤:添加对话框,作为独立的页面,并设置其属性:Border:noneStyle:Child为每个对话框关联对话框类,并在主对话框中创建新增对话框类的对象,如:CDlg1m_mm1;CDlg2m_mm2;在主对话框中添加TabCtrl控件,并为其关联Control类型的成员变量m_tab。,为TabCtrl控件添加页面步骤:在主对话框的OnInitDialog函数中进行初始化设置:如:m_tab.InsertItem(0,_T(姓名);m_tab.InsertItem(1,_T(学号);m_mm1.Create(IDD_NAME,为TabCtrl控件添加页面步骤:双击TabCtrl控件,为其添加TCN_SELCHANGE消息响应函数,如:if(m_tab.GetCurSel()=0)m_mm1.ShowWindow(SW_SHOW);m_mm2.ShowWindow(SW_HIDE);elsem_mm1.ShowWindow(SW_HIDE);m_mm2.ShowWindow(SW
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 审计运营考试题库及答案
- 森林火知识培训课件
- 森林消防危险地形课件
- 梯形面积课件
- 2025年财务分析师招聘面试实战模拟题及案例解读
- 2025年残联就业指导员面试技巧及常见问题解答
- 2025年注册验船师考试(C级船舶检验法律法规)冲刺试题及答案二
- 2025年风电场安全管理高级运维工程师考试重点解析
- 桥梁施工员培训课件
- 2025年计算机二级考试全攻略考试要点与模拟题
- 员工荣誉证书模板
- 无人机应急通信
- 生物化学之蛋白质化学(唐炳华)
- 产品保修卡模板
- 2024年福建浦开集团有限公司招聘笔试参考题库附带答案详解
- 二次装修管理培训课件
- 八年级集体备课课件
- 《产钳助产术医学》课件
- 包装袋管理制度
- 工程结构检测与加固- 课件 第4、5章 钢结构检测与加固、混凝土结构检测与加固
- 混凝土结构-钢筋位置、钢筋保护层厚度考试试题及答案
评论
0/150
提交评论