急问这个问题了啊:    我在Mainframe.h中定义  CSplitterWnd m_wndSplitter1; , 然后在.cpp 文件里面的
 OnCreateClient 中如下分解窗口:   if(m_wndSplitter1.CreateStatic(this,1,2)==NULL)
        return FALSE;

m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CLeftView),CSize(500,100),pContext);
m_wndSplitter1.CreateView(0,1,RUNTIME_CLASS(CRightView1),CSize(500,100) ,pContext);    分解窗口的确没有问题,的确可以成功分解窗口, 但是,由于会改变窗口大小,所以需要在OnSize 里面动态调整这两个窗口的大小,我这样做:    CRect rect;
    GetWindowRect(rect);
    m_wndSplitter1.SetColumnInfo(0, (rect.Width())/2, 10);
    m_wndSplitter1.SetColumnInfo(1, (rect.Width())/2, 10);
    m_wndSplitter1.RecalcLayout();按道理而言,应该时没有问题的才对啊,不过,这样,一运行马上就报错了。完全不明白这个是啥子原因哟, 请大侠们指教了啊。 不胜感激啊。

解决方案 »

  1.   

    原因就在于程序刚启动就调用了OnSize(),这是还没有创建分割窗口。
    解决办法就是在OnSize里判断一下分割窗口是否已创建好,只有已创建好时才调整大小。
      

  2.   

    这个问题我已经注意到了, 我把它改成这样: HWND   hWnd1   =   m_wndSplitter1.GetSafeHwnd();
    if(hWnd1==NULL||!IsWindow(hWnd1))
    return;    CRect rect;
        GetClientRect(&rect);
        m_wndSplitter1.SetColumnInfo(0, (rect.Width()-234)/2, (rect.Width()-234)/2);
        m_wndSplitter1.SetColumnInfo(1, (rect.Width()-234)/2, (rect.Width()-234)/2);
        m_wndSplitter1.RecalcLayout();  即使是加上上面的判断是否已经创建好的语句,但是还是错误,不知道是什么原因了。
      

  3.   

    把判断语句改成if (GetSafeHwnd()   &&   m_wndSplitter1.GetSafeHwnd())