我建立了一个SDI的工程,然后分割出了3个窗口这三个窗口都可以通过分割线在一定范围内调整大小。
我现在在其中的一个窗口CFaceSystemView建立了一个CPropertySheet的变量m_Sheet,用来制作选项卡,然后我有两个属性表页面m_FaceGen和m_FaceMesh,都是从CPropertyPage类继承过来,然后加入了选项卡m_Sheet。
之后我得到了该窗口的大小,然后我想调整选项卡和选项卡页面的大小,使之与窗口大小一致,同时在我利用分割线调整窗口大小的时候能够相应的调整选项卡和选项卡页面的大小。
这个使用重载的OnSize()函数就可以实现,初始的时候使用OnCreate()函数可以实现。但是我设定大小的时候总是报错,而且显示的效果总是不让人满意,而且感觉选项卡大小和页面大小都没有被调整。由于初始化页面对话框的时候Addpage时总会有个框留下来,到底该如何调整,谢谢各位达人了,已经被困扰2天了...
我的OnCreate()的函数如下:
int CFaceSystemView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1; // TODO:  Add your specialized creation code here
//添加选项卡属性表页面
m_Sheet.AddPage( &m_FaceGen );
m_Sheet.AddPage( &m_FaceMesh );
m_Sheet.Create(this, WS_CHILD|WS_VISIBLE); //修改风格 
m_Sheet.ModifyStyleEx(0, WS_EX_CONTROLPARENT);   
m_Sheet.ModifyStyle( 0, WS_TABSTOP );    //设置选项卡标签名字
TC_ITEM item;
item.mask = TCIF_TEXT;

item.pszText = _T("3DFace");
m_Sheet.GetTabControl()->SetItem(0, &item);

item.pszText = _T("MeshFace");
m_Sheet.GetTabControl()->SetItem(1, &item); //调整选项卡和其中的页面大小,以适应窗口的大小
CRect rect;
GetClientRect( &rect );
m_Sheet.SetWindowPos( NULL, rect.left, rect.top, rect.Width(),rect.Height(), SWP_NOZORDER|SWP_NOACTIVATE ); m_Sheet.GetClientRect( &rect ); m_FaceGen.SetWindowPos( NULL, rect.left+8, rect.top+27, rect.Width()-8, rect.Height()-27, SWP_SHOWWINDOW ); m_FaceMesh.Create(IDD_FACEMESHVIEW, &m_Sheet); if ( m_FaceMesh.GetSafeHwnd() )   
m_FaceMesh.SetWindowPos( &wndNoTopMost, rect.left+8, rect.top+27, rect.Width()-8, rect.Height()-27, SWP_HIDEWINDOW ); return 0;
}

解决方案 »

  1.   

    这个使用重载的OnSize()函数就可以实现,初始的时候使用OnCreate()函数可以实现。但是我设定大小的时候总是报错-------------------------------------------------------------------我想这个是因为你第一次onsize的时候是在调整view的大小 而这个时候你的选项卡控件还没有创建出来。才会报错顺序是这样 view的onsize  create 然后是第二次onsize才是你需要调整的。你可以断点调试一下看是不是这样。然后给予相应的处理就好
      

  2.   

    CPropertySheet的大小是由子页面决定的其大小为 Page 中 最大的 Size .(资源模板的大小)
      

  3.   

    我按照你的步骤做了一个测试工程,发现有个问题:虽然你在 OnSize 里改变了 Tab 控件的大小,可是没有同时调整你的两个 Page 的大小,可能这就是你遇到的问题。
      

  4.   

    谢谢大家,问题就出在OnSize()与OnCreate()的先后关系,以及大小的调整的顺序上。尤其感谢3楼还专门做了一个测试工程。谢谢。