把CPropertySheet的标签放到下方时出现的错误
这个是我的实现代码:
CRect rect;
DWORD dwStyle = WS_CHILD | WS_VISIBLE;
DWORD dwStyleEx = WS_EX_CONTROLPARENT;
m_sheet.AddPage(&m_dlgFileBack);
m_sheet.AddPage(&m_dlgFileDel);
m_sheet.Create(this, dwStyle, dwStyleEx);
CTabCtrl* pTabCtrl = m_sheet.GetTabControl();
if(pTabCtrl)
{
pTabCtrl->ModifyStyle(0, TCS_BOTTOM);
}
这样运行的时候就会出现下面的样子,就是标签只能看到小小的一条,其他的都看不到。
这个问题花了我很长时间,最后在准备发帖子询问的时候才突然想到原因
希望对遇到同样问题的朋友有点帮助
原来,创建CPropertySheet的时候,自动创建了一个CTabCtrl,我们可以用CPropertyShhet::GetTabControl()得到该TabCtrl的指针
如果要放到下面就要改变这个TabCtrl的大小,否则就会遮住属性页标签
完整的代码如下:
CRect rect;
DWORD dwStyle = WS_CHILD | WS_VISIBLE;
DWORD dwStyleEx = WS_EX_CONTROLPARENT;
m_sheet.AddPage(&m_dlgFileBack);
m_sheet.AddPage(&m_dlgFileDel);
m_sheet.Create(this, dwStyle, dwStyleEx);
CTabCtrl* pTabCtrl = m_sheet.GetTabControl();
if(pTabCtrl)
{
pTabCtrl->ModifyStyle(0, TCS_BOTTOM);
}
// 调整属性表到静态框大小
CWnd* pWnd = (CWnd*)GetDlgItem(IDC_STATIC_SHEET);
if(pWnd)
{
CRect rect;
pWnd->GetWindowRect(rect);
ScreenToClient(rect);
m_sheet.MoveWindow(rect);
//
// 调整TabCtrl大小
//
// rect.top += 5;
// rect.left += 5;
rect.bottom -= 5;
rect.right -= 10;
if(pTabCtrl)
{
pTabCtrl->MoveWindow(rect);
}
//
// 调整当前活动页大小
//
rect.top += 5;
rect.left += 5;
rect.bottom -= 20;
rect.right -= 20;
CPropertyPage* page = m_sheet.GetActivePage();
if(page)
{
page->MoveWindow(rect);
}
pWnd->ShowWindow(SW_HIDE);
}