MFC窗口静态分割

首先建立MFCAppWizard(exe),取名字为SplitterWnd,下一步,选择单文档“Single document”,其他默认,点击“完成”。

点击ResourceView,在Dialog下插入一个Dialog窗口用于稍后的分割后的窗口,ID号分别改为“IDD_FORMVIEW1”,属性style=child。记得及时保存。

添加两个类如图

 

选择基类

作为左窗口

右上视图用于显示文本,故其基类选CEditView,类名为CLeftTopView;另一个MFC类的基类选CFormView类,取类名为CLeftBttmView,该类即对应右下视图(由于该类基于CFormView类,需要有对话框与之对应,故应先在资源中新建对话框,对话框中的控件如图1    style必须为child)。

完成类的添加后,进行代码编写,首先在CMainFrame类声明中添加CSplitterWnd对象的声明:

 

CSplitterWndm_wndSplitter;// split the view into left and right

  CSplitterWnd m_wndSplitterRight; //split theright view into top and bottom

然后重载CMainFrame类的函数OnCreateClient,添加如下代码,即可实现窗口的分割:

 

BOOLCMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)

{

         CRectrect; GetClientRect(rect);

         //TODO: 在此添加专用代码和/或调用基类

         //先把窗口分割为1>2的形式,即分割为两列

         /*m_wndSplitter.CreateStatic(this,2, 1 , WS_CHILD | WS_VISIBLE| WS_BORDER);

 

         //然后把窗口第2列再分割为 2>1的形式

         //m_wndSplitterRight.CreateStatic(&m_wndSplitter, 2, 1,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 1) );

         //下面为分割后的窗口对应的视图类

         m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CLiftView),

                   CSize(rect.Width()/2,rect.Height()), pContext);

        

         m_wndSplitterRight.CreateView(1,1,RUNTIME_CLASS(CRightDownView),

                   CSize(rect.Width()/2,rect.Height()/2),pContext);

 

         m_wndSplitterRight.CreateView(1,0,RUNTIME_CLASS(CRightUpView),

                   CSize(rect.Width()/2,rect.Height()/2), pContext);

         returntrue;*/

 

         //先把窗口分割为1>2的形式,即分割为两列

         m_wndSplitter.CreateStatic(this,1, 2 , WS_CHILD | WS_VISIBLE| WS_BORDER);

 

         //然后把窗口第2列再分割为 2>1的形式

          m_wndSplitterRight.CreateStatic(&m_wndSplitter,2, 1, WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 1) );

         //下面为分割后的窗口对应的视图类

         m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CLiftView),

                   CSize(rect.Width()/4,rect.Height()), pContext);

         m_wndSplitterRight.CreateView(0,0,RUNTIME_CLASS(CRightUpView),

                   CSize(rect.Width()/4*3,rect.Height()/4*3),pContext);

         m_wndSplitterRight.CreateView(1,0,RUNTIME_CLASS(CRightDownView),

                   CSize(rect.Width()/4*3,rect.Height()/4),pContext);

         returntrue;

 

 

         returnCFrameWndEx::OnCreateClient(lpcs, pContext);

}

 


你可能感兴趣的:(VC++知识总结)