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 Pane或Previous Pane命令当前是否有效
ActivateNext 执行Next Pane或Previous 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); // 切分为2行1列
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之前,需要先创建一个对话模板资源,ID为IDD_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); // 切分为2行1列
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"暗示这是一个分块压缩文件,可能是大文件分割后的一部分。在IT行业中,文件分割常用于处理过大的文件,以便于存储、传输或分发。RAR是一种常见的压缩文件格式,由WinRAR软件创建,支持...
Panel2.Width := ClientWidth - Splitter1.Left - Splitter1.Width; end; ``` 在这个例子中,当Splitter被移动时,它会改变Panel1和Panel2的宽度,以保持它们的总宽度等于表单的宽度减去Splitter的宽度。 Splitter...
VB中的分栏符 用Splitter1.left等语句控制 主要是竖直的分栏符
private void splitter1_SplitterMoved(object sender, SplitterEventArgs e) { panel1.Width = splitter1.SplitDistance; // 或者 // panel2.Width = this.ClientSize.Width - splitter1.SplitDistance; } ``` ...
这个C#小项目是我凌晨两点做梦突然...splitter控件在使用过程一直不起作用和没有达到分割的效果,是有原因的。 splitter不但是实现正常的左右分割窗体,还是实现上下分割窗体。 小项目添加了双击,隐藏下面窗体的功能。
至于压缩包内的文件"Allok Video Splitter 1[1].4.4",这是Allok Video Splitter的某个版本安装程序。用户可以通过这个程序在计算机上安装并使用Allok Video Splitter,享受其强大的视频分割功能。 总的来说,Allok...
1. **鼠标事件处理**:包括`OnMouseEnter`, `OnMouseLeave`, `OnMouseDown` 和 `OnMouseUp`等,这些事件用于检测用户是否与Hot Button交互。 2. **视觉效果**:通过调整控件的样式和画布,实现Hot Button的激活和非...
panel2.Width = splitter1.Width - (panel1.Width + panel3.Width); // 重新启用Panel控件 panel1.Enabled = true; panel2.Enabled = true; panel3.Enabled = true; } } ``` 这段代码创建了一个窗体,其中...
1. 文件格式支持:虽然MP3Splitter主要处理MP3格式,但AudioSplitter可能支持更多格式,如WAV、AAC、FLAC等,因此在选择工具时要考虑自己的文件类型。 2. 分割方式:大部分音频分割工具允许用户手动设置分割点,也...
在这个例子中,`splitter2`包含一个水平分割(`splitter1`)和一个垂直分割(`bottom`),从而形成一个两行一列的布局,其中第一行由`topleft`和`topright`组成,可以水平调整,而第二行为`bottom`,可以垂直调整。...
1. **创建QSplitter对象**:在代码中,你可以使用`QSplitter *splitter = new QSplitter();`来创建一个新的QSplitter实例。记得将splitter添加到父窗口或者布局中,例如`parentWidget()->layout()->addWidget...
4. 绿色免安装:作为一款绿色版软件,Boilsoft Video Splitter 7.01.1不需要正式安装,只需解压后即可运行,不写入系统注册表,避免了可能引发的系统冲突,也方便用户在不同设备间转移和使用。 5. 支持多种视频格式...
在.NET Framework中,C#开发人员经常使用Splitter控件来创建用户界面,该界面可以动态调整两个或多个区域的大小。Splitter控件在Windows应用程序设计中扮演着重要角色,尤其是在需要用户自定义布局的场景下。本篇将...
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 ...
【ps3splitter-1-1-5-1】是一款专为PlayStation 3(简称PS3)系统设计的文件分割工具。这款软件的主要功能是帮助用户将大型的单个文件分割成更小的部分,以便在PS3的限制下进行传输和存储。在PS3系统中,由于内置...
1. **动态拖拉**:jQuery Splitter支持实时的拖动操作,用户可以自由调整各个部分的宽度和高度,从而实现灵活的布局变化。 2. **多方向分割**:不仅限于水平分割,也支持垂直分割,甚至可以实现双向(水平和垂直)...
#### 一、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 ...
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 ...
MP3SPLITTER是一款专为音频爱好者设计的MP3文件分割工具,它的主要功能是帮助用户将大的MP3文件按照需求切割成多个小段。在处理MP3音乐、播客或者有声书时,这样的工具非常实用,尤其当你需要提取特定部分或者想将一...