`
hcmfys
  • 浏览: 356433 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Splitter1

 
阅读更多

1.csplitterwnd

  提供分离窗口的功能,是一个窗口包含多个方格。

  类成员

  CSplitterWnd类成员

  构造 CSplitterWnd 构造一个CSplitterWnd对象

  Create 创建一个动态的分隔器窗口并将它与一个CSplitterWnd对象连接

  CreateStatic 创建一个静态的分隔器窗口并将它与一个CSplitterWnd对象连接

  CreateView 在一个分隔器窗口中创建一个窗格

  操作符 GetRowCount 返回当前窗格行的计数值

  GetColumnCount 返回当前窗格列的计数值

  GetRowInfo 返回指定行的信息

  SetRowInfo 设置指定行的信息

  GetColumnInfo 返回指定列的信息

  SetColumnInfo 设置指定列的信息

  GetPane 返回位于指定行和列处的窗格

  IsChildPane 确定窗口是否是此分隔器窗口的当前子窗格

  IdFromRowCol 返回位于指定行和列处的窗格的子窗口ID

  RecalcLayout 在调整行或列尺寸后调用此函数来重新显示该分隔器窗口

  GetScrollStyle 返回共享滚动条的风格

  SetScrollStyle 为分隔器窗口的共享滚动条指定新的滚动条风格

  可重载 OnDrawSplitter 绘制一个分隔器窗口的图像

  OnInvertTracker 绘制一个分隔器窗口的图像,使它具有与框架窗口相同的大小和形状

  CreateScrollBarCtrl 创建一个共享的滚动条控件

  DeleteView 从分隔器窗口中删除一个视图

  SplitRow 表明一个框架窗口是否是水平分隔的

  SplitColumn 表明一个框架窗口是否是垂直分隔的

  DeleteRow 从分隔器窗口中删除一行

  DeleteColumn 从分隔器窗口中删除一列

  GetActivePane 根据焦点或框架中的活动视来确定活动窗格

  SetActivePane 在框架中设置一个活动窗格

  CanActivateNext 检查Next PanePrevious Pane命令当前是否有效

  ActivateNext 执行Next PanePrevious Pane命令

  DoKeyboardSplit 执行键盘分隔命令,通常是“Window Split”

  DoScroll 执行分隔窗口的同步滚动

  DoScrollBy 将分隔窗口滚动给定的像素数

  2.呀要用到的该类的成员

  BOOL CreateStatic( CWnd* pParentWnd, int nRows, int nCols, DWORD dwStyle =

  WS_CHILD | WS_VISIBLE, UINT nID = AFX_IDW_PANE_FIRST );

  函数有5个参数,意义如下:

  ● pParentWnd:切分窗口的父窗口指针

  ● nRows:水平方向分隔窗口的数目

  ● nCols:垂直方向分隔窗口的数目

  ● dwStyle:切分窗口的风格

  ● nID:子窗口的ID值,默认为系统定义的AFX_IDW_PANE_FIRST

  返回值:如果创建成功,返回非零值(TRUE),否则返回0(FALSE)

  m_wndSplitter1.CreateStatic(this, 2,1); // 切分为21

  6、 使用CreateView产生每个视图窗口

  virtual BOOL CreateView( int row, int col, CRuntimeClass* pViewClass, SIZE sizeInit, CCreateContext* pContext );

  函数有5个参数,意义如下:

  ● row:窗格的行标,从0开始

  ● col:窗格的列标,从0开始

  ● pViewClass:视图的执行期类CRuntimeClass指针,可以用宏RUNTIME_CLASS获得

  ● sizeInit:一个SIZE(或者CSize)类型的数据,指定窗格的初始大小

  ● pContext:一般是由父窗口传递过来,包含窗口的创建信息

  返回值:如果创建成功,返回非零值(TRUE),否则返回0(FALSE)

  实例(摘):

  以单文档SDI应用程序为例,在框架客户区实现三叉切分窗口,且每个窗格使用不同的视图 。

实现步骤:

  1、 利用VC++6.0 AppWizard创建一个单文档SDI应用程序,项目名为Test

  2、 使用New Class对话框添加新的视图类:

  CinfoView 基类为列表视图类ClistView

  CLineView 基类为表单视图类CFormView

  CMyEditView 基类为编辑视图类CEditView

  要点:在添加ClineView之前,需要先创建一个对话模板资源,IDIDD_FORMVIEW

  3、 在框架窗口类CMainFrame中声明一个CsplitterWnd类的成员变量m_wndSplitter1,用于第一次切分。

  4、 使用ClassWizard为框架窗口类添加OnCreateClient函数。

  注意:OnCreateClient函数的调用在OnCreate函数之后,在构造视图对象和产生视图窗口之前。

  5、 在OnCreateClient函数中调用CsplitterWnd::CreateStatic,产生静态切分。该函数的原形如下:

  BOOL CreateStatic( CWnd* pParentWnd, int nRows, int nCols, DWORD dwStyle =

  WS_CHILD | WS_VISIBLE, UINT nID = AFX_IDW_PANE_FIRST );

  函数有5个参数,意义如下:

  ● pParentWnd:切分窗口的父窗口指针

  ● nRows:水平方向分隔窗口的数目

  ● nCols:垂直方向分隔窗口的数目

  ● dwStyle:切分窗口的风格

  ● nID:子窗口的ID值,默认为系统定义的AFX_IDW_PANE_FIRST

  返回值:如果创建成功,返回非零值(TRUE),否则返回0(FALSE)

  m_wndSplitter1.CreateStatic(this, 2,1); // 切分为21

  6、 使用CreateView产生每个视图窗口

  virtual BOOL CreateView( int row, int col, CRuntimeClass* pViewClass, SIZE sizeInit, CCreateContext* pContext );

  函数有5个参数,意义如下:

  ● row:窗格的行标,从0开始

  ● col:窗格的列标,从0开始

  ● pViewClass:视图的执行期类CRuntimeClass指针,可以用宏RUNTIME_CLASS获得

  ● sizeInit:一个SIZE(或者CSize)类型的数据,指定窗格的初始大小

  ● pContext:一般是由父窗口传递过来,包含窗口的创建信息

  返回值:如果创建成功,返回非零值(TRUE),否则返回0(FALSE)

  OnCreateClient函数的全部代码:

  BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)

  {

  // TODO: Add your specialized code here and/or call the base class

  CRect rect;

  GetClientRect(&rect);

  //产生第一次静态切分

  m_wndSplitter1.CreateStatic(this, //父窗口指针

  2, // 切分的行数

  1); // 切分的列数

  //为第一个窗格产生视图

  m_wndSplitter1.CreateView(0,0, // 窗格的行、列序数

  RUNTIME_CLASS(CTestView),//视图类

  CSize(rect.Width(),rect.Height()-rect.Height()/5),//初始化大小

  pContext);//父窗口的创建参数

  //为第二个窗格产生视图

  m_wndSplitter1.CreateView(1,0,

  RUNTIME_CLASS(CMyEditView),

  CSize(rect.Width(),rect.Height()/5),

  pContext);

  return TRUE;//不再调用基类的OnCreateClient函数

  //return CFrameWnd::OnCreateClient(lpcs, pContext);

  }

  在这里需注意3:

  必须为每个静态切分窗格创建视图窗口,不能漏掉一个;

  必须包含相应的类的头文件,在MainFrm.cpp文件的开始包含一下头文件:

  #include "TestView.h"

  #include "MyEditView.h"

  产生静态切分后,就不能调用默认的基类的OnCreateClient函数。

  7、 在视图窗口类CTestView中声明一个CsplitterWnd类的成员变量m_wndSplitter2,用于第二次切分。

  8、 使用ClassWizard为视图窗口类CTestView添加OnCreate函数,在该函数中调用CreateStatic函数和CreateView函数,类似CMainFrame::OnCreateClient函数中的调用

代码如下:

  int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)

  {

  if (CView::OnCreate(lpCreateStruct) == -1)

  return -1;

  // TODO: Add your specialized creation code here

  CRect rect;

  GetClientRect(&rect);

  //获得窗口的创建信息指针

  CCreateContext *pContext = (CCreateContext*) lpCreateStruct->lpCreateParams;

  //产生二次静态切分

  m_wndSplitter2.CreateStatic(this,1, 2);

  //为第一个窗格产生视图

  m_wndSplitter2.CreateView(0,0,// 窗格的行、列序数

  RUNTIME_CLASS(CLineView),//视图类

  CSize(rect.Width()/4,rect.Height()),//初始化大小

  pContext);//父窗口的创建参数

  //为第二个窗格产生视图

  m_wndSplitter2.CreateView(0,1,

  RUNTIME_CLASS(CInfoView),

  CSize(1,1),

  pContext);

  return 0;

  }

  注意:二次切分的父窗口是第一次切分的第一个窗格,其视图类是CTestView

  9、使用ClassWizard为视图窗口类CTestView添加OnSize函数,在该函数中调用子函数

  SwitchView(),子函数的代码如下:

  void CTestView::SwitchView()

  {

  CRect rect;

  GetClientRect(&rect);

  int cx = rect.Width();

  int cy = rect.Height();

  m_wndSplitter2.MoveWindow(-2,-2,cx,cy+3);

  m_wndSplitter2.SetColumnInfo(0, cx/4,0);

  m_wndSplitter2.SetColumnInfo(1, cx-cx/4, 0);

  m_wndSplitter2.RecalcLayout();

  该子函数主要用于设置二次切分后的各列信息,通过CSplitterWnd::SetColumnInfo函数实现,原型为:void SetColumnInfo( int col, int cxIdeal, int cxMin );

  由3 个参数,意义如下:

  ● col:切分窗口的列标识

  ● cxIdeal:列的实际宽度,单位为像素

  ● cxMin:列的最小宽度,单位为像素

下面的代码实现的是左面一列,右面一列两行:

加上类成员变量
CSplitterWnd m_wndSplitter2;

OnCreateClient()里:

if (!m_wndSplitter1.CreateView(0, 0, RUNTIME_CLASS(COutbarView), CSize(100, 300), pContext)
...
if (!m_wndSplitter2.Create(&m_wndSplitter1, 2, 1, CSize(0, 0), pContext, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL, AFX_IDW_PANE_FIRST + 1)
...
if (!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(COutlookStyleUIView), CSize(500, 100), pContext) || !m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(CMyHtmlView), CSize(100, 100), pContext))
...

分享到:
评论

相关推荐

    splitter1[1].33.rar

    标题中的"splitter1[1].33.rar"暗示这是一个分块压缩文件,可能是大文件分割后的一部分。在IT行业中,文件分割常用于处理过大的文件,以便于存储、传输或分发。RAR是一种常见的压缩文件格式,由WinRAR软件创建,支持...

    Delphi7视频教学第二十讲 Splitter使用

    Panel2.Width := ClientWidth - Splitter1.Left - Splitter1.Width; end; ``` 在这个例子中,当Splitter被移动时,它会改变Panel1和Panel2的宽度,以保持它们的总宽度等于表单的宽度减去Splitter的宽度。 Splitter...

    VB中的分栏符用Splitter1.left等语句控制

    VB中的分栏符 用Splitter1.left等语句控制 主要是竖直的分栏符

    c# splitter 隐藏左边窗口

    private void splitter1_SplitterMoved(object sender, SplitterEventArgs e) { panel1.Width = splitter1.SplitDistance; // 或者 // panel2.Width = this.ClientSize.Width - splitter1.SplitDistance; } ``` ...

    C# 中splitter分割调整上下窗体关系

    这个C#小项目是我凌晨两点做梦突然...splitter控件在使用过程一直不起作用和没有达到分割的效果,是有原因的。 splitter不但是实现正常的左右分割窗体,还是实现上下分割窗体。 小项目添加了双击,隐藏下面窗体的功能。

    Allok_Video_Splitter

    至于压缩包内的文件"Allok Video Splitter 1[1].4.4",这是Allok Video Splitter的某个版本安装程序。用户可以通过这个程序在计算机上安装并使用Allok Video Splitter,享受其强大的视频分割功能。 总的来说,Allok...

    一个非常漂亮的Splitter控件

    1. **鼠标事件处理**:包括`OnMouseEnter`, `OnMouseLeave`, `OnMouseDown` 和 `OnMouseUp`等,这些事件用于检测用户是否与Hot Button交互。 2. **视觉效果**:通过调整控件的样式和画布,实现Hot Button的激活和非...

    Winform中Splitter的用法,将窗体分为左中右三部分,实现拖动效果

    panel2.Width = splitter1.Width - (panel1.Width + panel3.Width); // 重新启用Panel控件 panel1.Enabled = true; panel2.Enabled = true; panel3.Enabled = true; } } ``` 这段代码创建了一个窗体,其中...

    AudioSplitter,MP3Splitter,音乐分割器

    1. 文件格式支持:虽然MP3Splitter主要处理MP3格式,但AudioSplitter可能支持更多格式,如WAV、AAC、FLAC等,因此在选择工具时要考虑自己的文件类型。 2. 分割方式:大部分音频分割工具允许用户手动设置分割点,也...

    PyQt5每天必学之QSplitter实现窗口分隔

    在这个例子中,`splitter2`包含一个水平分割(`splitter1`)和一个垂直分割(`bottom`),从而形成一个两行一列的布局,其中第一行由`topleft`和`topright`组成,可以水平调整,而第二行为`bottom`,可以垂直调整。...

    Qt下用QSplitter实现滑动窗口

    1. **创建QSplitter对象**:在代码中,你可以使用`QSplitter *splitter = new QSplitter();`来创建一个新的QSplitter实例。记得将splitter添加到父窗口或者布局中,例如`parentWidget()->layout()->addWidget...

    Boilsoft Video Splitter 7.01.1汉化绿色免安装版

    4. 绿色免安装:作为一款绿色版软件,Boilsoft Video Splitter 7.01.1不需要正式安装,只需解压后即可运行,不写入系统注册表,避免了可能引发的系统冲突,也方便用户在不同设备间转移和使用。 5. 支持多种视频格式...

    C# Splitter窗口分栏控件

    在.NET Framework中,C#开发人员经常使用Splitter控件来创建用户界面,该界面可以动态调整两个或多个区域的大小。Splitter控件在Windows应用程序设计中扮演着重要角色,尤其是在需要用户自定义布局的场景下。本篇将...

    MP3 Splitter & Joiner Pro v5.1+Keygen.rar

    MP3 Splitter & Joiner Pro v5.1 22 March 2012 released Products MP3 Splitter & Joiner MP3 Splitter & Joiner Pro Audio Recorder Platinum Audio Recorder Pro MIDI MP3 Converter MP3 Audio ...

    ps3 分割软件ps3splitter-1-1-5-1

    【ps3splitter-1-1-5-1】是一款专为PlayStation 3(简称PS3)系统设计的文件分割工具。这款软件的主要功能是帮助用户将大型的单个文件分割成更小的部分,以便在PS3的限制下进行传输和存储。在PS3系统中,由于内置...

    jquery splitter 动态分割区域布局,支持动态拖拉,功能强大,简单易用

    1. **动态拖拉**:jQuery Splitter支持实时的拖动操作,用户可以自由调整各个部分的宽度和高度,从而实现灵活的布局变化。 2. **多方向分割**:不仅限于水平分割,也支持垂直分割,甚至可以实现双向(水平和垂直)...

    Boilsoft Video Splitter5.16注册码

    #### 一、Boilsoft Video Splitter 5.16 概述 Boilsoft Video Splitter 是一款功能强大的视频分割软件,能够帮助用户轻松地将大型视频文件分割成多个较小的片段。最新版本 Boilsoft Video Splitter 5.16 支持多种...

    VC代码 simple_splitter (实用代码源)

    VC代码 simple_splitter (实用代码源)VC代码 simple_splitter (实用代码源)VC代码 simple_splitter (实用代码源)VC代码 simple_splitter (实用代码源)VC代码 simple_splitter (实用代码源)VC代码 simple_splitter ...

    File Splitter and Jointer

    File Splitter is a useful and free program that enables you to split a large file into small chunks which are easy to be sent and stored, while File Joiner allows you to join these split parts ...

    MP3分割 工具 MP3SPLITTER

    MP3SPLITTER是一款专为音频爱好者设计的MP3文件分割工具,它的主要功能是帮助用户将大的MP3文件按照需求切割成多个小段。在处理MP3音乐、播客或者有声书时,这样的工具非常实用,尤其当你需要提取特定部分或者想将一...

Global site tag (gtag.js) - Google Analytics