VC CTabCtrl 属性页使用模式

VC CTabCtrl 属性页使用模式


场景: 在某对话框CDlgXXX中添加一个属性页, 该属性页有2页或者多页, 以2页为例.

// DlgXXX.h 中声明如下代码

#include "Dlg1.h"
#include "Dlg2.h"
#define TAB_DLG_COUNT 2
...
public:
	void InitTabCtrl();		// 初始化CTabCtrl

	CDlg1	*m_pDlg1;
	CDlg2	*m_pDlg2;
	HWND	m_pHWND[TAB_DLG_COUNT];
	void SelTabDlg(int nSel);
	void MoveTabDlg(HWND hWnd);
...
	// 响应这个消息(双击该TabCCtrl控件, VC向导会自动为你添加)
	afx_msg void OnTcnSelchangeTabControl(NMHDR *pNMHDR, LRESULT *pResult);	


// DlgXXX.cpp 中代码
void CDlgXXX::InitTabCtrl()
{
	CTabCtrl *pTabCtrl = (CTabCtrl*)GetDlgItem(IDC_TAB_CONTROL);
	pTabCtrl->InsertItem(0, _T("页1"));
	pTabCtrl->InsertItem(1, _T("页2"));
	// 创建两个页面
	if(m_pDlg1 == 0)
	{
		m_pDlg1 = new CDlg1;
		m_pDlg1->Create(CDlg1::IDD, this);
		m_pHWND[0] = m_pDlg1->m_hWnd;
		MoveTabDlg(m_pHWND[0]);
	}
	if(m_pDlg2 == 0)
	{
		m_pDlg2 = new CDlg2;
		m_pDlg2->Create(CDlg2::IDD, this);
		m_pHWND[1] = m_pDlg2->m_hWnd;
		MoveTabDlg(m_pHWND[1]);
	}
	SelTabDlg(0);
}

// 选择时使用
void CDlgXXX::SelTabDlg(int nSel)
{
	for(int i = 0; i < TAB_DLG_COUNT; ++i)
	{
		::ShowWindow(m_pHWND[i], SW_HIDE);
	}
	::ShowWindow(m_pHWND[nSel], SW_SHOW);
}

// 页移动到TabCtrl的正确位置
void CDlgXXX::MoveTabDlg(HWND hWnd)
{
	CRect rect;
	GetDlgItem(IDC_TAB_CONTROL)->GetWindowRect(&rect);
	this->ScreenToClient(&rect);
	rect.DeflateRect(1, 1, 3, 3);
	rect.top += 20;
	::MoveWindow(hWnd, rect.left, rect.top, rect.Width(), rect.Height(), FALSE);
}

// 选择响应函数
void CDlgXXX::OnTcnSelchangeTabControl(NMHDR *pNMHDR, LRESULT *pResult)
{
	SelTabDlg(((CTabCtrl*)GetDlgItem(IDC_TAB_CONTROL))->GetCurSel());
	*pResult = 0;
}

// 记得销毁new出来的页
void CDlgXXX::OnDestroy()
{
	if(m_pDlg1 != 0)
	{
		m_pDlg1->DestroyWindow();
		delete m_pDlg1;
		m_pDlg1 = 0;
	}
	if(m_pDlg2 != 0)
	{
		m_pDlg2->DestroyWindow();
		delete m_pDlg2;
		m_pDlg2 = 0;
	}
	CDlgXXX::OnDestroy();
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CTabCtrl类是MFC中的一个控件类,它用于创建多个选项卡,并在其中显示不同的内容。以下是CTabCtrl的基本使用步骤: 1. 在对话框资源中添加一个Tab Control控件。 2. 在代码中定义一个CTabCtrl对象,并调用其Create()函数进行初始化。如下所示: ```c++ CTabCtrl tabCtrl; tabCtrl.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP, CRect(10, 10, 300, 200), this, 1); ``` 3. 调用CTabCtrl的InsertItem()函数添加选项卡。如下所示: ```c++ TCITEM tcItem; tcItem.mask = TCIF_TEXT; tcItem.pszText = _T("Tab 1"); tabCtrl.InsertItem(0, &tcItem); ``` 这样就添加了一个名为“Tab 1”的选项卡。 4. 在选项卡上添加控件。可以在选项卡上添加任何控件,例如按钮、列表框等。需要注意的是,这些控件需要设置为子窗口,否则在选项卡上无法显示。如下所示: ```c++ CButton btn; btn.Create(_T("Button 1"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(10, 40, 100, 60), &tabCtrl, 2); ``` 5. 在选项卡切换时显示不同的内容。可以通过CTabCtrl的SetCurSel()函数设置当前选中的选项卡,并在该选项卡上显示相应的内容。如下所示: ```c++ int nSel = tabCtrl.GetCurSel(); switch (nSel) { case 0: // 显示选项卡1的内容 break; case 1: // 显示选项卡2的内容 break; case 2: // 显示选项卡3的内容 break; } ``` 以上就是使用CTabCtrl控件创建选项卡的基本步骤。需要注意的是,CTabCtrl控件的使用还有很多细节需要注意,例如添加选项卡时需要设置选项卡的样式、选项卡的图标等。建议参考MFC的官方文档进行详细学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值