用VS08程序向导,单文档程序,默认设置生成的。工程名为3view;

其中默认生成的视图类CMy3viewView,对应3viewView.h,3viewView.cpp;

在Resourse View添加个新对话框,在对话框的属性中,Border设置成None;Style设置成Child;

生成的新类中Base class设置为CFormView;  本程序中定义类名为CDefFormView;

默认生成的文档类为:3viewDoc.h,3viewDoc.cpp;

在主框架头文件MainFrm.h中添加如下头文件; //为了调用程序默认的视类CMy3viewView;

#include "3viewDoc.h"
#include "3viewView.h"

并添加如下变量

CSplitterWnd m_wndSplitter;
 CSplitterWnd m_wndSPlitterTB;
 CSplitterWnd m_wndSPlitterTB2;
 BOOL m_is_spilit  //用来判断分割窗口是否成功,做为窗口自适应大小的变量

并重载OnCreateClient函数

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
CRect ct;
GetClientRect(&ct);
//主框架左右分成1行3列
m_wndSplitter.CreateStatic(this,,); //在m_wndSplitter的第1行第1列分割区成2行1列
m_wndSPlitterTB.CreateStatic(&m_wndSplitter,,,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(,));
//在m_wndSplitter的第1行第2列分割区成2行1列
m_wndSPlitterTB2.CreateStatic(&m_wndSplitter,,,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(,)); //在m_wndSPlitterTB中创建第1行第1列视图
m_wndSPlitterTB.CreateView(,,RUNTIME_CLASS(CDefFormView),CSize(ct.Width()/,ct.Height()/),pContext);
//在m_wndSPlitterTB中创建第2行第1列视图
m_wndSPlitterTB.CreateView(,,RUNTIME_CLASS(CDefFormView),CSize(ct.Width()/,ct.Height()/),pContext); //在m_wndSPlitterTB2中创建第1行第1列视图
m_wndSPlitterTB2.CreateView(,,RUNTIME_CLASS(CDefFormView),CSize(ct.Width()/,ct.Height()/),pContext);
//在m_wndSPlitterTB2中创建第2行第1列视图
m_wndSPlitterTB2.CreateView(,,RUNTIME_CLASS(CMy3viewView),CSize(ct.Width()/,ct.Height()/),pContext);
//在m_wndSPlitterTB2中创建第3行第1列视图
m_wndSPlitterTB2.CreateView(,,RUNTIME_CLASS(CDefFormView),CSize(ct.Width()/,ct.Height()/),pContext); //在m_wndSPlitter中创建第1行第3列的视图
m_wndSplitter.CreateView(,,RUNTIME_CLASS(CMy3viewView),CSize(ct.Width()/,),pContext);
  
  m_wndSplitter.SetColumnInfo(0,ct.Width()/3,50);
  m_wndSplitter.SetColumnInfo(1,ct.Width()/3,50);
  m_wndSplitter.SetColumnInfo(2,ct.Width()/3,50);
//获取对应视图的对象
CMy3viewView* view = (CMy3viewView *)m_wndSplitter.GetPane(,);
CDefFormView* view2 = (CDefFormView*)m_wndSPlitterTB.GetPane(,); return TRUE;
//return CFrameWnd::OnCreateClient(lpcs, pContext);
}

重载OnSize函数:(主框架大小变化是分割窗口自适应大小)

void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy); // TODO: Add your message handler code here
if(m_is_spilit)
{
CRect ct;
GetClientRect(&ct); m_wndSplitter.SetRowInfo(,ct.Height(),);
m_wndSplitter.SetColumnInfo(,ct.Width()/,);
m_wndSplitter.SetColumnInfo(,ct.Width()/,);
m_wndSplitter.SetColumnInfo(,ct.Width()/,); m_wndSPlitterTB.SetRowInfo(,ct.Height()/,);
m_wndSPlitterTB.SetRowInfo(,ct.Height()/,); m_wndSPlitterTB2.SetRowInfo(,ct.Height()/,);
m_wndSPlitterTB2.SetRowInfo(,ct.Height()/,);
m_wndSPlitterTB2.SetRowInfo(,ct.Height()/,); m_wndSplitter.RecalcLayout(); }
}

生成的程序如图显示:

MFC单文档分割区(CSplitterWnd)的更多相关文章

  1. MFC单文档程序结构

    MFC单文档程序结构三方面: Doc MainFrame View

  2. MFC单文档

    一.创建并运行MFC单文档程序 1.创建单文档程序 这里使用的是VS2017.首先,打开VS2017,选择文件->新建->项目,然后选择Visual C++ -> MFC /ATL& ...

  3. VC++ MFC单文档应用程序SDI下调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错原因分析及解决办法:glewInit()初始化的错误

    1.问题症状 在VC++环境下,利用MFC单文档应用程序SDI下开发OpenGL程序,当调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错,出错代码如下: OpenG ...

  4. MFC单文档框架分析及执行流程(转)

    原文转自 https://blog.csdn.net/u011619422/article/details/40402705 首先来分析一下MFC单文档类的结构: 它包括如下几个类: CAboutDl ...

  5. VC-基础:MFC单文档程序架构解析

    MFC单文档程序架构解析 这里我以科院杨老师的单文档程序来分析一下MFC单文档的程序架构,纯属个人见解,不当之处烦请指教! 首先我们了解到的是 图(一) theApp 是唯一一个在程序形成的时候就存在 ...

  6. MFC单文档程序架构解析

    MFC单文档程序架构解析 MFC单文档程序架构解析 这里我以科院杨老师的单文档程序来分析一下MFC单文档的程序架构,纯属个人见解,不当之处烦请指教! 首先我们了解到的是 图(一) theApp 是唯一 ...

  7. MFC单文档视图程序简介

    在视图应用程序中,应用程序的数据由文档对象代表,数据的视图由视图对象代表.MFC的Cdocument类是文档对象的基类,Cview类是视图对象的基类.应用程序的主窗口,其操作功能在MFC的Cframe ...

  8. MFC单文档视图中嵌入GLFW窗口

    开始学习OpenGL由于有一段时间,但是glfw只有窗口区,虽然通过某种手段(移步这里)可以加入工具栏,但仍然无法作为一个标准的GUI,而直接在MFC或Qt里面使用OpenGL API感觉有诸多制肘, ...

  9. 【2016.3.30项目技术记录】]VS2010自动生成MFC单文档框架程序的修改:去除属性框,在CViewTree类中添加鼠标单击响应

    转自http://blog.csdn.net/yanfeiouc2009/archive/2010/06/07/5653360.aspx 手头上有个东西要用到单文档,由于想省事,直接用VS2010做了 ...

随机推荐

  1. PowerDesigner生成Oracle表名带有引号的解决方法

    PowerDesigner生成表名带有引号,如下: /*==============================================================*/ /* Tabl ...

  2. 细说VS MSBuild 和 Framework 的区别

    如今已经是 VS2017 横行的时代,而据我所知,大部分人还停留在使用 VS2015 VS2013 或更低的版本,主要是因为他们参与的项目基本使用这几个VS的版本开发的.眼红VS2017却不敢升级,主 ...

  3. groovy && java 混编 gradle 配置

    参考配置: apply plugin: "application" apply plugin: "java" apply plugin: "groov ...

  4. phpstrom主题

    http://phpstorm-themes.com/ 安装方法 JAR文件 导航->file->Import Settings->然后选择你刚才下载的JAR文件->点击确认- ...

  5. 14.Python使用Pillow教程

    1.打算开始学习PIL,在命令行输入:pip3 install PIL,报错信息如下所示,后百度了下,发现:PIL仅支持到Python2.7,后来一群志愿者在此基础上创建了兼容性版本,为Pillow, ...

  6. outlook2013插件 VSTO开发与部署

    一.背景 最近因为项目需要对outlook开发一个插件,功能是将outlook的邮件作导出功能,需要使用VSTO开发一个插件将邮件进行导出的操作.于是,开始学习VSTO outlook的开发了,折腾了 ...

  7. C/S模式与B/S模式的详细介绍

    网络程序开发的两种计算模式--C/S模式与B/S模式.两种各有千秋,用于不同场合. C/S适用于专人使用,安全性要求较高的系统: B/S适用于交互性比较频繁的场合,容易被人们所接受,倍受用户和软件开发 ...

  8. 将socket程序从linux移植到windows上

    今天突然想试下纯socket编程在两个系统上代码重合量有多大,只要不使用VC自定义的宏(比如SOCKET.SOCKADDR等等)感觉代码重合量挺大的. 比如最简单的TCP客户端和服务端对话,在VC中用 ...

  9. 2016-the brave never die

    2016年最后一天工作日了,由于这段时间一直忙于春节项目没时间写点关于2016年的总结,回忆一下,2016年其实还有很多事情没做好,究其原因,感觉是因为对于2016年没有做任何的规划和计划,就凭着一股 ...

  10. 数据结构与算法JavaScript描述——队列

    注:澄清一个bug: /** * 删除队首的元素: */ function dequeue(){ return this.dataStore.shift(); } 应该有return:   队列是一种 ...