静态分割窗口

 静态分割窗口

创建静态分割窗口的步骤为:

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函数修改如下:

C++代码

  1. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
  2. {
  3. // TODO: Add your specialized code here and/or call the base class
  4. CRect rc;
  5. // 获取框架窗口客户区的CRect对象
  6. GetClientRect(&rc);
  7. // 创建静态分割窗口,两行一列
  8. if (!m_wndSplitter.CreateStatic(this, 2, 1))
  9. return FALSE;
  10. // 创建上面窗格中的视图
  11. if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CExample34View), CSize(rc.Width(), rc.Height()/2), pContext))
  12. return FALSE;
  13. // 创建下面窗格中的视图
  14. if (!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CExample34View), CSize(rc.Width(), rc.Height()/2), pContext))
  15. return FALSE;
  16. return TRUE;
  17. //return CFrameWndEx::OnCreateClient(lpcs, pContext);
  18. }

4. 运行程序,在结果界面中关掉其他面板后效果如下:

如果大家想创建在其中某个窗格中再嵌套分割窗口,那么就需要再定义一个CSplitterWnd对象,以父窗格所在的CSplitterWnd对象为父框架窗口创建分割窗口即可。

如何将子窗口和对话框关联起来?

Class View,右击工程名,Class Wizard,Add Class下拉菜单选择MFC Class...,填写类名CInfoView并选择基类为CFormView,此时会自动生成InfoView.h和InfoView.cpp并自动生成了一个对话框,在MainFrm.cpp文件中包含头文件InfoView.h

最后,将上面代码修改为:

  1. if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CInfoView), CSize(rc.Width(), rc.Height()/2), pContext))
  2. return FALSE;

如此一来,上面的子窗口就和对话框关联起来了,也就是说,上面的子窗口显示的是该对话框。

时间: 2024-10-12 02:56:56

静态分割窗口的相关文章

MFC中使用CSplitterWnd分割窗口后设置视图大小的问题

开发环境:vs2010 在对框架窗口进行分割之后需要根据需求设置每个分割窗口的大小,但是在通过createView(...)设置大小时,往往起不到想要的结果,如下代码并不能将框架的窗口按照预设的大小来进行分割: 1 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 2 { 3 // TODO: 在此添加专用代码和/或调用基类 4 //return CFrameWndEx::OnCreate

VC项目开发之单文档多视图实现-非分割窗口[转]

k_eckel:http://www.mscenter.edu.cn/blog/k_eckel 多视图是VC开发中经常要用到的技术之一,一般地实现单文档多视图有两种方式 1)通过视图分割的技术(使用CSplitterWnd实现),将窗口分割为多个部分,每个部分显示各自显示不同的视图,这种技术实现起来比较简单,并且相关的资料也很多. 2)通过一个文档关联多个视图,窗口显示整个视图. 第二种实现较第一种复杂,这里给出详细的实现方法. Step 1:使用VC 6.0新建一个Project,命名为:Mu

【Qt5开发及实例】3、布局管理之分割窗口QSplitter

首先看看目标效果 代码: #include "mainwindow.h" #include <QApplication> #include <QTextEdit> #include <QSplitter> #include <QTextCodec> int main(int argc, char *argv[]) { QApplication a(argc, argv); QFont font("ZYSong18030"

Vim的分割窗口split命令

显示两个不同的文件:或者同时显示一个文件的两个不同地方:又或者并排比较两个文件.这一切都可以通过分割窗口实现. 打开新窗口最简单的命令如下: :split (水平分割) || :vsplit (垂直分割)这个命令把屏幕分解成两个窗口并把光标置于上面的窗口中. CTRL-W w 命令可以用于在窗口间跳转.如果你在上面的窗口,它会跳转到下面的窗口,如果你在下面的窗口,它会跳转到上面的窗口.(CTRL-W CTRL-W 可以完成相同的功能这是为了避免你有时按第二次的时候从 CTRL 键上缩手晚了.)

【vim】分割窗口与标签页

vim支持窗口分割和标签页,合适地使用这两种特性可以使文字编辑工具更愉快. 1. 窗口分割 vim支持窗口的水平分割和垂直分割.以下是常用的操作指令或快捷键. 命令 说明 vim -o <files> 打开多个文件,并将它们放在水平分割的窗口中 vim -O <files> 打开多个文件,并将它们放在垂直分割的窗口中 :sp[lit] [file] 不加file参数时,新建一个水平窗口,放置当前文件的副本:带file参数时,新建一个水平窗口并把file放在新窗口中. 新窗口将位于当

分割窗口,拖动窗口边框可以改变窗口大小

public class Demo2 { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setText("分割窗口,拖动窗口边框可以改变窗口大小"); shell.setLayout(new FillLayout()); SashForm form = new SashForm(shell, SWT.HOR

分割窗口QSplitter类---布局管理(一)

从今天开始Mayuyu要学习QT了,Mayuyu是一个很爱美的姑娘,所以为了能给设计出美观的图形界面,Mayuyu一定 会努力的! 今天Mayuyu要讲的是布局管理中的分割窗口类QSplitter,分割窗口,顾名思义就是把窗口分割成一个一个小块. 比如要实现一个简单的窗口,如下图: 这个窗体有3部分,那么写出如下代码: #include "widget.h" #include <QApplication> #include <QSplitter> #includ

VC++环境下单文档SDI与OpenGL多视图分割窗口的实现-类似3DMAX的主界面

本文主要讲述如何在VC++环境下实现单文档SDI与OpenGL多视图分割窗口,最终的界面类似3DMAX的主界面.首先给出我实现的效果图: 整个实现过程网络上有很多零散的博文,请各位自行搜索,在基于对话框.单文档或多文档下实现多视图分割窗口的原理是一致的.本文检索了众多相关论文,发现了几篇写的非常细致的论文.在此向相关作者表示感谢.下面给出龚勋的论文原文,大家可以仔细阅读和学习.相信一定能够做出来想要的效果的.但是文中对于全局变量的定义和初始化在VC++2015环境下编译不通过.经过排查,发现这些

分割窗口QSplitter类

概述 分割窗口QSplitter类在应用程序中经常用到,它可以灵活分割窗口的布局,经常用在类似文件资源管理器的窗口设计中 在Qt开发中,QSplitter是比较常用到的,也就是分割窗口.并且窗口分割处也就是QSplitter的handle是可以随意拖动的.这样,每个窗口的大小就可以按照自己的需要进行调整.QSplitter可以容纳其他Widget,具有布局一样的特性,但是又可以动态调整,可以说是动态布局特性,其内部的Widget可以自由伸缩. QSplitter有两种:垂直和水平. enum O