可以使用以下三个步骤在对话框中创建分割窗:
1. In the OnCreate function or your CDialog, register a new WindowClass by calling "AfxRegisterWndClass".
在你的CDialog类的OnCreate函数中使用AfxRegisterWndClass注册一个新的窗口类。
2. Create a new CFrameWnd by using the "new" operator and initialize it.
使用new操作符创建一个CFrameWnd,并对其进行初始化。
3. Create your splitter by using the new CFrameWnd you just created as the parent.
在步骤2中创建的CFrameWnd上创建分割窗。
int CMyDialog::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; // Initialize a context for the view. CMyTreeView is my view and // is defined as : class CMyTreeView : public CTreeView. CCreateContext ccc; ccc.m_pNewViewClass = RUNTIME_CLASS(CMyTreeView); ccc.m_pCurrentDoc = NULL; ccc.m_pNewDocTemplate = NULL; ccc.m_pLastView = NULL; ccc.m_pCurrentFrame = NULL; // Because the CFrameWnd needs a window class, we will create // a new one. I just copied the sample from MSDN Help. // When using it in your project, you may keep CS_VREDRAW and // CS_HREDRAW and then throw the other three parameters. CString strMyClass = AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW, ::LoadCursor(NULL, IDC_ARROW), (HBRUSH) ::GetStockObject(WHITE_BRUSH), ::LoadIcon(NULL, IDI_APPLICATION)); // Create the frame window with "this" as the parent m_pMyFrame = new CFrameWnd; m_pMyFrame->Create(strMyClass,"", WS_CHILD, CRect(0,0,1,1), this); m_pMyFrame->ShowWindow(SW_SHOW); m_pMyFrame->MoveWindow(0,0,300,300); // and finally, create the splitter with the frame as // the parent m_wndSplitter.CreateStatic(pMyFrame,1, 2); m_wndSplitter.CreateView(0,0, RUNTIME_CLASS(CMyTreeView), CSize(100,100), &ccc); m_wndSplitter.CreateView(0,1, RUNTIME_CLASS(CMyTreeView), CSize(100,100), &ccc); } BOOL CMyDialog::OnInitDialog() { CDialog::OnInitDialog(); CRect rect; // Get the rectangle of the custom window. The custom window // is just a a big button that is not visible and is disabled. // It's a trick to not use coordinates directly. GetDlgItem(IDC_CUTSOM_WINDOW)->GetWindowRect(&rect); // Move the splitter ScreenToClient(&rect); m_pFrameWnd->MoveWindow(&rect); m_pFrameWnd->ShowWindow(SW_SHOW); m_wndSplitter.MoveWindow(0,0, rect.Width(), rect.Height()); m_wndSplitter.ShowWindow(SW_SHOW); return TRUE; // return TRUE unless you set the focus to a // control // EXCEPTION: OCX Property Pages should return // FALSE }