VC属性表的实现与应用

VC属性表的实现有2种方法:

  1,通过CTabCtrl控件实现属性页功能

  2,通过CPropertySheet和CPropertyPage类来实现

 

下面分别简单介绍一下这两种方法的实现:

1,通过CTabCtrl控件实现属性页功能

1)、建立一个基于对话框的应用程序; 
2)、画CTabCtrl控件,addclass,类向导中关联变量名为m_tab,新建三个对话框属性设为style:Child, border:None,用ClassWizard生成新的类,基类为Cdialog,分别为Cpage0,Cpage1,Cpage2,ID号分别为IDD_DIALOG0,IDD_DIALOG1,IDD_DIALOG2。在主对话框中加入三个变量,Cpage0 page0;Cpage1 page1;Cpage2 page2。别忘了在主对话框的头文件中要加入#include "Page0.h",#include "Page1.h",#include "Page2.h"  

3)、在主对话框的OnInitDialog()内初始化 : 
// TODO: Add extra initialization here 

//初始化m_tab控件  
m_tab.InsertItem(0,_T("first sheet")); 
m_tab.InsertItem(1,_T("second sheet")); 
m_tab.InsertItem(2,_T("third sheet ")); 

//建立属性页各页  
page0.Create(IDD_DIALOG0,GetDlgItem(IDC_TAB1));  
page1.Create(IDD_DIALOG1,GetDlgItem(IDC_TAB1));  
page2.Create(IDD_DIALOG2,GetDlgItem(IDC_TAB1));  
//设置页面的位置在m_tab控件范围内  
CRect rect; 
m_tab.GetClientRect(&rect); 
rect.top+=20;  
rect.bottom-=4;  
rect.left+=4;  
rect.right-=4;  
page0.MoveWindow(&rect); 
page1.MoveWindow(&rect); 
page2.MoveWindow(&rect); 
page1.ShowWindow(TRUE);  
m_tab.SetCurSel(1);  

至此,初始化完成,下面添加CTabCtrl控件的通知事件和处理函数.

4)、add event handler.选择TCN_SELCHANGE消息,函数修改如下:

//m_tab控件属性页选择时显示各页
void CMy3Dlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)  

// TODO: Add your control notification handler code here 
int CurSel;  
CurSel=m_tab.GetCurSel();  
switch(CurSel)  
{  
case 0:  
page0.ShowWindow(TRUE); 
page1.ShowWindow(FALSE);  
page2.ShowWindow(FALSE);  
break;  
case 1:  
page0.ShowWindow(FALSE); 
page1.ShowWindow(TRUE);  
page2.ShowWindow(FALSE);  
break;  
case 2:  
page0.ShowWindow(FALSE); 
page1.ShowWindow(FALSE);  
page2.ShowWindow(TRUE);  
break;  
default: ;  
}  

*pResult = 0; 


2,通过CPropertySheet和CPropertyPage类来实现(根据新建立的MFC模板对话框程序来修改.)

1) 新建2个对话框IDD_DIALOG1和IDD_DIALOG2,在上面随便放点什么控件之类的;

2) 用向导为它们添加类CPage1和CPage2,基类都是CPropertyPage.同时自动创建.cpp和.h文件

3) 用向导添加新类CProSheet,基类为CPropertySheet,同时自动创建ProSheet.h和ProSheet.cpp.

4) 在ProSheet.h中定义

#include "Page1.h"
#include "Page2.h"

class CProSheet : public CPropertySheet
{

.......
public:
   
CPage1 m_page1;//
    CPage2 m_page2;//
}

5) 在CProSheet.cpp里两个构造函数处添加:
//CProSheet.cpp
CProSheet::CProSheet()
{
   
AddPage(&m_page1);
    AddPage(&m_page2);
}
CProSheet::CProSheet()
{
   
AddPage(&m_page1);
    AddPage(&m_page2);
}

6)  好了,现在可以在你想调用的地方调用这个属性页了:比如你想在C***::Fun()里调用,就在C***.cpp的顶部加入#include "ProSheet.h",然后
void C***::Fun()
{
  CProSheet proSheet("属性页测试",this,0);
  proSheet.DoModal();
}这样,你调用Fun()的时候就可以看到效果了.


同样,如果想在主程序开始的时候,就调用,可以在xxapp.c中的InitInstance()函数下调用:

BOOL xxApp::InitInstance()
{
 AfxEnableControlContainer();

 // Standard initialization

 

 allsheet   allcontrolssheet(_T("NIC Utility"));
 m_pMainWnd = &allcontrolssheet;
 allcontrolssheet.DoModal();


 return FALSE;
}

这样主对话框的类就可以删除了.而直接调用属性表.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值