7.4 视图分割
教学录像:光盘\TM\lx\7\视图分割.exe
在文档/视图结构中,视图用来显示文档中的数据,也可对视图进行分割,从而使视图显示不同的信息,并且可以在视图中嵌入控件,进行更多的操作。
7.4.1 简单视图分割
通过CSplitterWnd类可以实现视图分割,当改变分割窗口的大小时,窗口的客户区将自动重新绘制。首先调用CreateStatic方法创建静态分割的窗体。
语法格式如下:
BOOL CreateStatic( CWnd* pParentWnd, int nRows, int nCols, DWORD dwStyle = WS_CHILD | WS_VISIBLE, UINT nID = AFX_IDW_PANE_FIRST );
|
CreateStatic方法中的参数说明如表7.1所示。
表7.1 CreateStatic方法中的参数说明
|
参 数< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
描 述 |
|
pParentWnd |
分割窗体的父窗体对象,一般为框架窗体对象 |
|
nRows |
分割窗体的行数,该值不能超过16 |
|
nCols |
分割窗体的列数,该值不能超过16 |
|
dwStyle |
设置分割后窗体的样式 |
|
nID |
设置被创建对象所使用的资源ID值 |
然后调用CreateView方法创建子视图。
语法格式如下:
virtual BOOL CreateView( int row, int col, CRuntimeClass* pViewClass, SIZE sizeInit, CCreateContext* pContext );
|
CreateView方法中的参数说明如表7.2所示。
表7.2 CreateView方法中的参数说明
|
参 数 |
描 述 |
|
row |
子视图所在行 |
|
col |
子视图所在列 |
|
pViewClass |
新视图的CRuntimeClass对象 |
|
sizeInit |
指定新视图的初始大小 |
|
pContext |
指向CCreateContext结构的指针 |
例7.2 下面通过实例来实现简单视图分割。(实例位置:光盘\TM\sl\7\2)
步骤如下:
(1)创建一个单文档应用程序。
(2)在框架类的头文件中声明CSplitterWnd类对象m_wndSplitter。
(3)重载框架类的OnCreateClient虚方法,在该方法中分割视图窗口。代码如下:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { m_wndSplitter.CreateStatic(this, 2, 2); //分割一个2行2列的窗口 //创建相应的子视图 m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS (CDivisionView),CSize(200,200), pContext); m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS (CDivisionView),CSize(200,200), pContext); m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS (CDivisionView),CSize(200,200), pContext); m_wndSplitter.CreateView(1, 1, RUNTIME_CLASS (CDivisionView),CSize(200,200), pContext); return TRUE; //设置返回值 //return CFrameWnd::OnCreateClient(lpcs, pContext); //不调用基类的方法 } |
实例的运行结果如图7.10所示。
|
| 图7.10 简单视图分割 |
说明:分割的视图可以继承不同的视图类。
【责任编辑:
夏书 TEL:(010)68476606】