请问如何制作属性页的程序 我想制作一个对话框的程序,我想主对话框就是一个属性页程序,可以在不同的选项间切换,请问大家如何解决这个问题,我在书上看到的例子是一个单文档界面的程序中,调用属性页对话框的程序,和我的要求不一样,请大家帮助我,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.codeguru.com/propertysheet/index.shtml 在对话框中加入属性页作者:黄晨量下载本文全部源代码当一个基于对话框的程序中有相当多的控件时,你一定会想到使用属性页来将这些控件分类放置。本文针对这种方法来讨论几种可能实现的方案。 方案一本方案的例子请见源代码打包文件中的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机制来进行数据交换,还要创建一些存放值的变量,这样就使得整个对话框类变得相当庞大难以操作。 当然你也可以使用数组来存放那些控件变量或值变量,但是这样并不是最好,有时一些不相关的控件变量放入一个数组中,通过没有实际意义的数组索引号来访问控件,对程序的编写会造成麻烦。 最好能将所有控件进行分类,放入不通对话框类中,这些对话框作为子对话框出现在主对话框中。 具体的访问:http://www.vckbase.com/vckbase/vckbase14/ picture控件的重绘 中文输入遇到的问题 mfc的声音 CTRL+v的问题 如何在C语言下生成mp3文件及打开该类型的文件 请问高手:非API的DLL如何调用呀 请指教:如何在按钮消息处理函数中得到按钮的指针? 菜问题:用MFC ClassWizard指向某个类时出错 请问高手们,我已学完了c++基本语法接下来应学什么望能指教! 〉〉〉菜鸟的困惑:如何理解这种“特殊”类型定义。<<<<<<<< #### 一个关于设置映射模式、CDC的问题,先谢谢了! #### 那么小的问题。。。气死人`!我错在哪里。。。。
作者:黄晨量下载本文全部源代码当一个基于对话框的程序中有相当多的控件时,你一定会想到使用属性页来将这些控件分类放置。本文针对这种方法来讨论几种可能实现的方案。 方案一本方案的例子请见源代码打包文件中的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机制来进行数据交换,还要创建一些存放值的变量,这样就使得整个对话框类变得相当庞大难以操作。
当然你也可以使用数组来存放那些控件变量或值变量,但是这样并不是最好,有时一些不相关的控件变量放入一个数组中,通过没有实际意义的数组索引号来访问控件,对程序的编写会造成麻烦。 最好能将所有控件进行分类,放入不通对话框类中,这些对话框作为子对话框出现在主对话框中。