可以使用以下三个步骤在对话框中创建分割窗:
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
}