欢迎来到天天文库
浏览记录
ID:40849461
大小:26.96 KB
页数:15页
时间:2019-08-08
《标签式对话框》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、标签式对话框 在设计较为复杂的对话框时,常常会遇到这种情况:对某一事物的设置或选项需要用到大量的控件,以至于一个对话框放不下,而这些控件描述的是类似的属性,不能分开。用普通的对话框技术,这一问题很难解决。 MFC提供了对标签式对话框的支持,可以很好的解决上述问题。标签式对话框实际上是一个包含了多个子对话框的对话框,这些子对话框通常被称为页(Page)。每次只有一个页是可见的,在对话框的顶端有一行标签,用户通过单击这些标签可切换到不同的页。显然,标签式对话框可以容纳大量的控件。在象Word和DeveloperStudio这样复杂的软件中,用户会接触到较多的标签式对话框,一个典型的标签
2、式对话框如图5.10所示。 图5.10典型的标签式对话框 5.5.1标签式对话框的创建 为了支持标签式对话框,MFC提供了CPropertySheet类和CPropertyPage类。前者代表对话框的框架,后者代表对话框中的某一页。CPropertyPage是CDialog类的派生类,而CPropertySheet是CWnd类的派生类。虽然CPropertySheet不是CDialog类的派生类,但使用CPropertySheet对象的方法与使用CDialog对象是类似的。标签式对话框是一种特殊的对话框,因此,和普通对话框相比,它的设计与实现既有许多相似之处,又有一些不同的特
3、点。 创建一个标签式对话框一般包括以下几个步骤: 分别为各个页创建对话框模板,去掉缺省的OK和Cancel按钮。每页的模板最好具有相同的尺寸,如果尺寸不统一,则框架将根据最大的页来确定标签对话框的大小。在创建模板时,需要在模板属性对话框中指定下列属性: 指定标题(Caption)的内容。标题的内容将显示在该页对应的标签中。 选择TitleBar、Child、ThinBorder和Disable属性。 根据各个页的模板,用ClassWizard分别为每个页创建CPropertyPage类的派生类。这一过程与创建普通对话框类的过程类似,不同的是在创建新类对话框中应在Bas
4、eclass一栏中选择CPropertyPage而不是CDialog。 用ClassWizard为每页加入与控件对应的成员变量,这个过程与为普通对话框类加入成员变量类似。 程序员可直接使用CPropertySheet类,也可以从该类派生一个新类。除非要创建一个非模态对话框,或要在框架对话框中加入控件,否则没有必要派生一个新类。如果直接使用CPropertySheet类,则一个典型的标签式对话框的创建代码如清单5.12所示,该段代码也演示了标签式对话框与外界的数据交换。这些代码通常是放在显示对话框的命令处理函数中。可以看出,对话框框架的创建过程及对话框与外界的数据交换机制与普通对话
5、框是一样的,不同之处是还需将页对象加入到CPropertySheet对象中。如果要创建的是模态对话框,应调用CPropertySheet::DoModal,如果想创建非模态对话框,则应该调用CPropertySheet::Create。 若从CPropertySheet类派生了一个新类,则应该将所有的页对象以成员变量的形式嵌入到派生类中,并在派生类的构造函数中调用CPropertySheet::AddPage函数来把各个页添加到对话框中。这样,在创建标签式对话框时就不用做添加页的工作了。 清单5.12典型的标签式对话框创建代码 voidCMyView::DoModalProper
6、tySheet() { CPropertySheetpropsheet; CMyFirstPagepageFirst;//derivedfromCPropertyPage CMySecondPagepageSecond;//derivedfromCPropertyPage //Movememberdatafromtheview(orfromthecurrently //selectedobjectintheview,forexample). pageFirst.m_nMember1=m_nMember1; pageFirst.m_nMember2=m_nMember
7、2; pageSecond.m_strMember3=m_strMember3; pageSecond.m_strMember4=m_strMember4; propsheet.AddPage(&pageFirst); propsheet.AddPage(&pageSecond); if(propsheet.DoModal()==IDOK) { m_nMember1=pageFirst.m_nMemb
此文档下载收益归作者所有