把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);
}