首页 > 代码库 > 静态分割窗口
静态分割窗口
静态分割窗口
创建静态分割窗口的步骤为:
1. 在父框架类中定义一个CSplitterWnd类型的成员对象。
2. 重载父框架类的CFrameWnd::OnCreateClient成员函数。
3. 在重载的CFrameWnd::OnCreateClient函数中调用CSplitterWnd成员对象的CreateStatic成员函数,然后可以调用CSplitterWnd成员对象的CreateView成员函数为每个窗格创建视图。
实例:在主框架窗口中的客户区创建一个两行一列的静态分割窗口:(首先创建一个名为“Example34”的MFC单文档工程)
1. 在MainFrm.h文件中为CMainFrame类添加成员对象:CSplitterWnd m_wndSplitter;。
2. 在Class View类视图中找到CMainFrame类,右键点击,在右键菜单中选择Properties,就会显示属性页,然后在属性页的工具栏上点击Tip为Overrides的按钮,下面的列表中就列出了能够重载的函数,找到OnCreateClient生成重载函数。
3. 在MainFrm.cpp文件中找到刚重载的OnCreateClient函数进行修改。因为鸡啄米没有新建其他视图类,所以上下两个窗格的视图都是CExample34View。为了能识别CExample34View类,还需在MainFrm.cpp文件中添加#include "Example34View.h",在Example34View.h文件中添加#include "Example34Doc.h"。最终OnCreateClient函数修改如下:
- BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
- {
- // TODO: Add your specialized code here and/or call the base class
- CRect rc;
- // 获取框架窗口客户区的CRect对象
- GetClientRect(&rc);
- // 创建静态分割窗口,两行一列
- if (!m_wndSplitter.CreateStatic(this, 2, 1))
- return FALSE;
- // 创建上面窗格中的视图
- if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CExample34View), CSize(rc.Width(), rc.Height()/2), pContext))
- return FALSE;
- // 创建下面窗格中的视图
- if (!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CExample34View), CSize(rc.Width(), rc.Height()/2), pContext))
- return FALSE;
- return TRUE;
- //return CFrameWndEx::OnCreateClient(lpcs, pContext);
- }
4. 运行程序,在结果界面中关掉其他面板后效果如下:
如果大家想创建在其中某个窗格中再嵌套分割窗口,那么就需要再定义一个CSplitterWnd对象,以父窗格所在的CSplitterWnd对象为父框架窗口创建分割窗口即可。
如何将子窗口和对话框关联起来?
Class View,右击工程名,Class Wizard,Add Class下拉菜单选择MFC Class...,填写类名CInfoView并选择基类为CFormView,此时会自动生成InfoView.h和InfoView.cpp并自动生成了一个对话框,在MainFrm.cpp文件中包含头文件InfoView.h
最后,将上面代码修改为:
- if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CInfoView), CSize(rc.Width(), rc.Height()/2), pContext))
- return FALSE;
如此一来,上面的子窗口就和对话框关联起来了,也就是说,上面的子窗口显示的是该对话框。
静态分割窗口