您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:346 来源:vckbase.com

本文章共4778字,分4页,当前第1页,快速翻页:
 

在对话框中加入属性页
作者:黄晨量

下载本文全部源代码

逆风者
当一个基于对话框的程序中有相当多的控件时,你一定会想到使用属性页来将这些控件分类放置。本文针对这种方法来讨论几种可能实现的方案。

方案一

本方案的例子请见源代码打包文件中的Property1部分

在对话框上放置一个Tab Control的控件,再在对话框上放置所需的控件(本例放置了2个按钮,试图在每个标签中显示一个)。然后利用Class Wizard来为Tab Control控件创建一个控件变量,该变量是CTabCtrl类的,再为其他控件也创建相应的控件类。 在主对话框的初始函数中CProperty1Dlg::OnInitDialog()加入如下代码:
//本例插入两个标签,实际运用中可通过循环插入所需个数的标签,运行后默认第一个标签被选中

m_tab.InsertItem( 0, _T("Tab1") );

m_tab.InsertItem( 1, _T("Tab2") );

//将不是第一个标签的控件隐藏掉,只留下你要的控件

m_button2.ShowWindow( SW_HIDE );

再利用ClassWizard处理Tab Control的 TCN_SELCHANGE 的消息。在消息处理函数中,利用CWnd::ShowWindow来使相应的控件显示和隐藏。
void CProperty1Dlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) 

{

//GetCurSel返回当前被选中的标签的索引号(以0为基础算起)

int sel = m_tab.GetCurSel();



switch(sel)

{

case 0:

m_button1.ShowWindow( SW_SHOW );

m_button2.ShowWindow( SW_HIDE );

break;

case 1:

m_button2.ShowWindow( SW_SHOW );

m_button1.ShowWindow( SW_HIDE );

break;

}



*pResult = 0;

}

这样做以后就可以使界面上的控件在不同的标签中显示了,但是这个方案也有很多弊病。

所有的控件仍然在一个对话框内,在使用对话框编辑器进行编辑时,操作很不方便。
为了能分类显示控件,必须用ClassWizard为每一个控件创建一个控件变量,以便利用各控件变量的CWnd基类的ShowWindow函数来显示和隐藏。有时为了使用DDX和DDV机制来进行数据交换,还要创建一些存放值的变量,这样就使得整个对话框类变得相当庞大难以操作。
当然你也可以使用数组来存放那些控件变量或值变量,但是这样并不是最好,有时一些不相关的控件变量放入一个数组中,通过没有实际意义的数组索引号来访问控件,对程序的编写会造成麻烦。 最好能将所有控件进行分类,放入不通对话框类中,这些对话框作为子对话框出现在主对话框中。可以。现在看看方案二。

方案二

本方案的例子请见源代码打包文件中的Property2部分
这个方案中,我将使用MFC中现成的CPropertySheet和CPropertyPage类来完成将控件分散到各个对话框类中。

首先加入两个(或数个)对话框资源。修改各对话框资源的属性,将对话框的Caption属性改为你要在标签上所显示的文字。将对话框的Style属性改为:Child, Border属性改为:Thin, 只选中Title Bar复选框,去掉其他复选框。然后你可以在这些对话框中加入要分开显示的各个控件。

为上述对话框资源分别制作一个对话框类,该对话框类是从CPropertyPage继承。这样一来各子对话框类就好了,主对话框类可以直接使用CPropertySheet类。使用如下代码即可:

CPropertySheet sheet("属性页对话框");

CPage1 page1;

CPage2 page2;

//加入子对话框作为一个属性页

sheet.AddPage(&page1);

sheet.AddPage(&page2);

//产生一个模态对话框,也可以使用Create方法来产生一个非模态对话框(具体参见MSDN)

sheet.DoModal();



 
 
本文章更多内容1 - 2 - 3 - 4 - 下一页>>
相关文章

MFC程序员的WTL指南: Part VIII - 属性页与
如何使用设备描述表
数据库开发之窗体编程
为对话框中的控件增加提示的简单方法
一种另类“关于(About)”对话框的动态显示方
VC学习笔记之一:怎样实现XP风格按钮
基于SHA-256的HMAC文件校验器
如何在编辑框中使用IAutoComplete接口
如何在服务(Service)程序中显示对话框
Security Briefs...小心完全信任的代码
深入浅出硬盘分区表
监听以太网(三) Packet32数据结构说明
在资源文件中加入声音资源
直接通过DAO读写Access文件
轻松实现DES算法查看器
Pure C :.NET 下的泛型编程
MFC程序员的WTL指南: Part IV - 对话框与控
QQ界面的模拟实现(上)
解析CE下浏览器源码
魔法单词记忆——DAO访问ACCESS数据库

相关评论


本文章所属分类:首页 VC++

  热门关键字: