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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值