MFC下分割窗口
来源:互联网 发布:mac桌面文件夹被隐藏 编辑:程序博客网 时间:2024/04/28 03:10
1. 在 MainFrm.h 文件中在CMainFrame 类内定义一个成员对象: CSplitterWnd m_wndSplitter;。点击资源视图,在Dialog下插入两个个Dialog窗口用于稍后的分割后的窗 口(一般在新建项目时已经生成一个,只需再添加一个Dialog即可),ID号分别改为“IDD_TIANDITONGXUN_C_FORM_L”和“IDD_TIANDITONGXUN_C_FORM_R”,并分别将这两个对话框的Border设置为None,Style设置为Child。单击ClassView标签,在项目名称上点击右键,选择“添加”,再选择“类”,在新弹出的对话框中单击“MFC类”,直接点击右下方“添加”键,在新弹出的对话框中,类名设置为CTianDiTongXun_CView_R,类选择CFormView,基类选择CFormView,对话框ID选择IDD_TIANDITONGXUN_C_FORM_R,单击完成即可。另一个类一般已自动生成并关联。
2. 在 Class View 类视图中找到CMainFrame 类,右键点击,在右键菜单中选择属性,就会显示属性页,然后在属性页的工具栏上点击“重写”按钮,下面的列表中就列出了能够重载的函数,找到 OnCreateClient 函数后,点击生成重载函数。
3.在 MainFrm.cpp 文件中找到刚重载的OnCreateClient 函数进行修改。在 MainFrm.cpp 文件中添加#include "TianDiTongXun_CView_L.h" 和#include"TianDiTongXun_CView_R.h",在 E TianDiTongXun_CView_L.h文件中添加#include " TianDiTongXun_CViewDoc.h",另一头文件也同理加上(注,TianDiTongXun_CViewDoc.h文件只有一个)。最终 OnCreateClient 函数修改如下:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCTlpcs, CCreateContext* pContext)
{
CRect rc;
// 获取框架窗口客户区的CRect 对象
GetClientRect(&rc);
// 创建静态分割窗口,两行一列
if(!m_wndSplitter.CreateStatic(this, 2, 1))
return FALSE;
// 创建上面窗格中的视图
if(!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CTianDiTongXun_CView_L),CSize(rc.Width(), rc.Height()/2), pContext))
return FALSE;
// 创建下面窗格中的视图
if(!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CTianDiTongXun_CView_R),CSize(rc.Width(), rc.Height()/2), pContext))
return FALSE;
return TRUE;
//return CFrameWndEx::OnCreateClient(lpcs, pContext);
}
说明:1.新开的每一个窗口都是用m_wndSplitter.CreateView函数来设着其大小的。
如:if (!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CExample34View),CSize(rc.Width(), rc.Height()/2), pContext));中CreateView的第一和第二个参数为当前此句要设计的窗口编号,这里是第2行第1列(是从0开始计数的);CSize函数为设置当前区域的尺寸,其中Height为高度,Width为宽度,如:rc.Width(), rc.Height()/2)意思为宽度为整个客户区,高度为整个客户区的高度的1/2,其中rc为整个客户区。
2.代码中红色区域为要改的部分。
3. RUNTIME_CLASS(CTianDiTongXun_CView)中括号内的类名,即为相应对话框ID所关联的类名,注意修改。
4.下面是3行4列的代码:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext*pContext)
{
// TODO: 在此添加专用代码和/或调用基类
CRect rc;
// 获取框架窗口客户区的CRect 对象
GetClientRect(&rc);
// 创建静态分割窗口,两行一列
if(!m_wndSplitter.CreateStatic(this, 3, 4))
return FALSE;
// 创建上面窗格中的视图
if(!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CTianDiTongXun_CView),CSize(rc.Width()/4, rc.Height()/3), pContext))
return FALSE;
// 创建下面窗格中的视图
if(!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CTianDiTongXun_CView),CSize(rc.Width()/4, rc.Height()/3), pContext))
return FALSE;
if(!m_wndSplitter.CreateView(0, 2, RUNTIME_CLASS(CTianDiTongXun_CView),CSize(rc.Width()/4, rc.Height()/3), pContext))
return FALSE;
if(!m_wndSplitter.CreateView(0, 3, RUNTIME_CLASS(CTianDiTongXun_CView),CSize(rc.Width()/4, rc.Height()/3), pContext))
return FALSE;
// 创建上面窗格中的视图
if(!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CTianDiTongXun_CView),CSize(rc.Width()/4, rc.Height()/3), pContext))
return FALSE;
// 创建下面窗格中的视图
if(!m_wndSplitter.CreateView(1, 1, RUNTIME_CLASS(CTianDiTongXun_CView),CSize(rc.Width()/4, rc.Height()/3), pContext))
return FALSE;
if(!m_wndSplitter.CreateView(1, 2, RUNTIME_CLASS(CTianDiTongXun_CView),CSize(rc.Width()/4, rc.Height()/3), pContext))
return FALSE;
if(!m_wndSplitter.CreateView(1, 3, RUNTIME_CLASS(CTianDiTongXun_CView),CSize(rc.Width()/4, rc.Height()/3), pContext))
return FALSE;
// 创建上面窗格中的视图
if(!m_wndSplitter.CreateView(2, 0, RUNTIME_CLASS(CTianDiTongXun_CView),CSize(rc.Width()/4, rc.Height()/3), pContext))
return FALSE;
// 创建下面窗格中的视图
if(!m_wndSplitter.CreateView(2, 1, RUNTIME_CLASS(CTianDiTongXun_CView),CSize(rc.Width()/4, rc.Height()/3), pContext))
return FALSE;
if(!m_wndSplitter.CreateView(2, 2, RUNTIME_CLASS(CTianDiTongXun_CView),CSize(rc.Width()/4, rc.Height()/3), pContext))
return FALSE;
if(!m_wndSplitter.CreateView(2, 3, RUNTIME_CLASS(CTianDiTongXun_CView),CSize(rc.Width()/4, rc.Height()/3), pContext))
return FALSE;
return TRUE;
//returnCFrameWndEx::OnCreateClient(lpcs, pContext);
}
4. 如果大家想创建在其中某个窗格中再嵌套分割窗口(如下图),那么就需要在 MainFrm.h 文件中为 CMainFrame 类再定义一个成员对象: CSplitterWnd m_wndSplitter2;。即在分割窗口时,只能等行等列的分割,如下图这种两列不同行的分发只能分别定义两个成员变量,左边、右边分别对应一个变量,右边的变量再分割成一个2行1列的窗口。
详细操作过程如下:
1.定义两个CSplitterWnd类的对象。
2.新建2个对话框,并关联相应类。
3.在MainFrm.cpp中加入相应的头文件。
4.生成OnCreateClient函数。
5.修改OnCreateClient函数,(未完待续)
参考文章:
http://blog.sina.com.cn/s/blog_6cc1c52d01011usd.html
http://www.cnblogs.com/fjchenqian/archive/2009/04/08/1431338.html
- MFC下分割窗口
- MFC 窗口分割
- Vs2008 MFC窗口分割
- MFC分割窗口
- MFC 实现分割窗口
- MFC窗口静态分割
- MFC二次分割窗口
- MFC 窗口分割
- MFC分割窗口知识
- mfc任意分割窗口
- MFC分割窗口总结
- MFC窗口分割/拆分
- MFC窗口分割类CSpliterWnd分割窗口
- MFC下分割CSplitterWnd窗口等比例缩放
- MFC 窗口分割与通信
- MFC CSplitterWnd 静态分割窗口
- MFC中任意分割窗口
- MFC分割窗口的实现
- 算法设计与应用基础 - Week01
- Codeforces 596 C Wilbur and Points【贪心】
- java基础语法
- 【c++】万年历
- JavaWeb学习总结(四十九)——简单模拟Sping MVC
- MFC下分割窗口
- 在Eclipse上运行Spark(Standalone,Yarn-Client)
- 完美解决SDWebImage加载多个图片内存崩溃的问题
- 链表奇偶分离,并且链表反转
- 【软件工程实践】20160903
- 占位
- RxJava 与 Retrofit 结合的最佳实践
- 占位
- 占位