现在的位置: 首页 > 综合 > 正文

把CPropertySheet的标签放到下方时出现的错误

2013年09月07日 ⁄ 综合 ⁄ 共 1323字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.