本帖最后由 vivikey 于 2014-07-02 18:47:40 编辑

解决方案 »

  1.   

    CPropertySheet::Create 用WS_CHILD 风格在WM_SIZE消息中 MoveWindow
     CPropertySheet::GetTabControl 可获取CTableCtrl 
       CTableCtrl  GetClientRect  然后调整子页大小
      

  2.   

    你好,我在Dlg的OnCreate中用m_addSheet.Create(this,WS_CHILD |WS_VISIBLE ,WS_EX_OVERLAPPEDWINDOW);
    但运行以后CPropertySheet并未显示,如果调用m_addSheet. ShowWindow(SW_SHOW),编译不报错在运行时就会弹出错误。
      

  3.   

    别用CPropertySheet了,用CTabCtrl+ CDialog吧
      

  4.   

    Propertysheet 在创建之前要AddPage,
      

  5.   

    非模态调用用showwindow和movewindow
    适配可以参考http://blog.csdn.net/xianglitian/article/details/5667015
      

  6.   


    CTabCtrl 各标签页用的是同一个页面窗口。而我所需要的各页面是有不同控件的。
      

  7.   

    本帖最后由 VisualEleven 于 2014-07-03 12:59:25 编辑
      

  8.   


    哦,是的,我忘了。现在可以显示出来了。但是是在Dlg的左上角显示的,把原有的控件给覆盖掉了。能否把它放在另一个可视控件里?这样不运行也能控件好布局。
      

  9.   


    CTabCtrl 各标签页用的是同一个页面窗口。而我所需要的各页面是有不同控件的。你可以多创建几个对话框嘛,Child风格的能行么?我去查一下MSDN先。
      

  10.   


    谢谢,但我并不想把按键什么的做大小的改变。我只改变一部分控件的大小。原理是一样的
    都是按着某种规则MoveWindow
      

  11.   


    谢谢,但我并不想把按键什么的做大小的改变。我只改变一部分控件的大小。
    EASYSIZE, codeproject上搜索EASYSIZE
      

  12.   


    哦,是的,我忘了。现在可以显示出来了。但是是在Dlg的左上角显示的,把原有的控件给覆盖掉了。能否把它放在另一个可视控件里?这样不运行也能控件好布局。你需要MoveWindow的啊,否则默认都是左上角,会把TAB覆盖掉一部分的Propertysheet的init函数中
    RECT rt = {0};
    ::GetClientRect(m_hWnd,&rt);
    rt.top += 21;
    rt.bottom -= 1;
    rt.left += 1;
    rt.right -= 1;
    m_ProPage1.MoveWindow(&rt);
    m_ProPage2.MoveWindow(&rt);
      

  13.   

    需要在OnSize中动态去排列子窗口,根据相对位置动态计算子窗口的坐标,动态的移动子窗口
      

  14.   


    CTabCtrl 各标签页用的是同一个页面窗口。而我所需要的各页面是有不同控件的。4楼回答很到位,我一直这样用