请问在VS2005的环境下,MFC自动生成的多文档,在不用CSplitterWnd的前提下,如何分割子窗口?要自己重新写个功能和CSplitterWnd差不多的类吗?
请各位大虾先大概讲下思路先,然后再贴点代码,多谢

解决方案 »

  1.   

    为什么不用?自己做不一定比MS做的好啊。网上有很多分割窗口的源代码,不过好像都是从CSplitterWnd派生出来的
      

  2.   

    可以参考CSplitterWnd的源代码。
      

  3.   

    上网找一个什么工具,名字我忘记了,效果绝对比MS的好,并不是自己做的就不如MS,微软的又不是天!
      

  4.   

    你要先搞清楚 CSplitterWnd的处理机制再自己写
      

  5.   

    用或参考其源代码吧。
    WTL中也有类似的代码。
      

  6.   

    各位大侠,麻烦提供下源代码,谢谢
    我估计下载了WTL的代码也找不出其中我需要的部分
      

  7.   

    LRESULT CALLBACK ProcSplitter(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) 

    switch (Msg) 

    case WM_LBUTTONDOWN: 
    SetCapture(hwnd); 
    break; 
    case WM_LBUTTONUP: 
    ReleaseCapture(); 
    break; 
    case WM_MOUSEMOVE: 

    if ((wParam & MK_LBUTTON) == MK_LBUTTON && GetCapture() == hwnd) 

    HDWP hdwp; 
    RECT rect, rectStatus, rectTree; 
    hdwp = BeginDeferWindowPos(3); 
    GetClientRect(GetParent(hwnd), &rect); 
    GetClientRect(hStatus, &rectStatus); 
    GetWindowRect(hTree, &rectTree); 
    DeferWindowPos(hdwp, hTree, NULL, 0, 0, rectTree.right - rectTree.left + (short)LOWORD(lParam), rect.bottom - rectStatus.bottom, SWP_NOMOVE | SWP_NOZORDER); 
    DeferWindowPos(hdwp, hSplitter, NULL, rectTree.right - rectTree.left + (short)LOWORD(lParam), 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER); 
    DeferWindowPos(hdwp, hList, NULL, rectTree.right - rectTree.left + (short)LOWORD(lParam) + 2, 0, rect.right - rectTree.right + rectTree.left - (short)LOWORD(lParam) - 2, rect.bottom - rectStatus.bottom, SWP_NOZORDER); 
    EndDeferWindowPos(hdwp); 


    break; 
    default: 
    return DefWindowProc(hwnd, Msg, wParam, lParam); 

    return 0; 
    }    SetCapture和ReleaseCapture是分别在鼠标左键按下与释放的时候捕获和释放鼠标,这是分隔条的一般要求。这段代码中的核心部分就是在处理鼠标移动的事件,就是当鼠标左键按下并且分隔条捕获鼠标的时候来改变三个相关窗口的位置和宽度。具体的矩形操作与主窗口WM_SIZE的代码原理相似,我就不多说了。 
      

  8.   

    既然是MFC自动生成的多文档(MDI),何必用CSplitterWnd.
    先删除VIEW和DOC,再将CMDIFrameWnd分割为多个CMDIChildWnd(如3个)作为容器,然后可以在各CMDIChildWnd中创建你要的类(如对话框)
    请下载我的"SpecialMDI.zip"
      

  9.   

    多谢大虾的代码,不过你的"SpecialMDI.zip"我进去了下载不了,麻烦你弄好下
      

  10.   

    我这里"我的资源"上不去了,你要不忌讳给我一个Email地址我给你发去.