首先我用分隔条把两个视图分开,左边的是CFromView,右边的是CScrollView.
我在CFromView中创建了一个属性框,并在属性框中加载了两个属性页.然后在void CMyFormView::OnInitialUpdate()
中加入下面的代码:
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
CWnd* pwndPropSheetHolder = GetDlgItem(IDC_PLACEHOLDER);
m_pMyPropSheet = new CMyPropSheet(pwndPropSheetHolder);
if(!m_pMyPropSheet->Create(pwndPropSheetHolder,WS_CHILD|WS_VISIBLE,0))
{
delete m_pMyPropSheet;
m_pMyPropSheet = NULL;
return;
}
CRect rectTemp;
this->GetWindowRect(rectTemp);
pwndPropSheetHolder->SetWindowPos(NULL,0,0,rectTemp.Width(),rectTemp.Height()-100,0);
pwndPropSheetHolder->GetWindowRect(rectTemp);
m_pMyPropSheet->SetWindowPos(NULL,0,0,rectTemp.Width()-20,rectTemp.Height(),SWP_NOZORDER|SWP_NOACTIVATE);}
此时编译运行没有错误,但是不知道怎么看不到属性框右边的边界,很奇怪.然后我在CFormView中加入OnSize函数响应WM_SIZE信息..
void CMyFormView::OnSize(UINT nType, int cx, int cy) 
{
CFormView::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
CWnd* pwndPropSheetHolder = GetDlgItem(IDC_PLACEHOLDER);
CRect rectTemp;
this->GetWindowRect(rectTemp);
pwndPropSheetHolder->SetWindowPos(NULL,0,0,rectTemp.Width(),rectTemp.Height()-100,0);
pwndPropSheetHolder->GetWindowRect(rectTemp);
m_pMyPropSheet->SetWindowPos(NULL,0,0,rectTemp.Width()-20,rectTemp.Height(),SWP_NOZORDER|SWP_NOACTIVATE);
}
编译构件都没有问题,但是一运行就来问题了..
出现(关闭 调试)对话框.
我对OnSize函数在多视图中的运行机制不明白,请高手指点一下..有遇到过看不到属性框右边界的也告诉我一下原因^_^

解决方案 »

  1.   

    属性框边界的问题我搞清楚了..
    原来是属性页比属性框大的缘故.
    但是怎么样在程序中动态设置属性页的大小,
    属性页其实就是一个对话框,在CPropertPage中我没看到初始化函数,是不是要放入CPropertySheet中初始化Page上的控件?
      

  2.   

    onSize函数怎么写呢,还是没有解决啊!!
      

  3.   

    可以调用CPropertPage的SetWindowPos或者MoveWindow
      

  4.   

    void CMyFormView::OnSize(UINT nType, int cx, int cy) 
    第一次,sheet还没有create出来。你需要判断一下他的句柄是否为非0.如果是0,就return.
      

  5.   

    CPropertyPage的SetWindowPos和MoveWindow我试过,很难控制.
    比如我写
    CRect rectTemp;
    this->GetWindowRect(rectTemp);
    m_MyPage1.MoveWindow(0,0,rectTemp.Width(),rectTemp.Height());
    那第一个属性页就把整个属性框盖了,别的页全看不见了..我在void CMyFormView::OnSize(UINT nType, int cx, int cy)中加了
    if(m_pMyPropSheet)
    同样在执行的时候报错,跟原来情况一样^_^;
      

  6.   

    这样差不多
    m_MyPage1.GetWindowRect(rectTemp);
    m_MyPage1.GetParent()->ScreenToClient(rectTemp);
    m_MyPage1.MoveWindow(rectTemp.left, rectTemp,rectTemp.Width()-10, rectTemp.Height()-10);
      

  7.   

    没有人愿意帮助解答一下么..
    哪里有创建单文档多视图界面,并且响应OnSize()的例子??
    解决这个问题是不是要重载CSplitterWnd类???