WTL提供了3个类用来分隔窗口:CSplitterImpl、
CSplitterWindowImpl、CSplitterWindowT。
CSplitterImpl类实现了最主要的分割窗口所需要的函数。
CSplitterWindowImpl继承了
CSplitterImpl类,它实现了一个什么都不做的OnEraseBackground函数,还实现了一个OnSize函数,该函数可以自动调整分割窗口的客户区大小。通常情况下,我们可以直接使用CSplitterWindowImpl类作为我们窗口的父类,如果这两个函数的行为达不到我们的要求,我们可以改写继承自CSplitterImpl类的消息处理函数。
CSplitterWindowT类继承了
CSplitterWindowImpl类,并注册窗口类的名称为—“
WTL_SplitterWindow”,还有就是提供了两个类型定义:
typedef
CSplitterWindowT<true> CSplitterWindow;//
垂直分割
typedef
CSplitterWindowT<false> CHorSplitterWindow;//
水平分割
下面我们使用
CSplitterWindow类型来创建垂直分割窗口,然后左边窗格为TreeView,右边为普通的View.
在框架窗口中定义三个成员变量:
CSplitterWindow m_splitter;
CLeftTreeView m_treeView;
CRightView m_rightView;
在框架窗口的OnCreate函数中,添加如下代码:
/////////////////////
const DWORD dwSplitStyle = WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
const DWORD dwSplitExStyle = WS_EX_CLIENTEDGE;
m_hWndClient=m_splitter.Create(m_hWnd,rcDefault,NULL,dwSplitStyle,dwSplitExStyle);
// Create a treeview based on m_splitter
m_treeView.Create ( m_splitter, rcDefault );
// Create a view based on m_splitter
m_rightView.Create( m_splitter,rcDefault);
// set the left and right view
m_splitter.SetSplitterPanes(m_treeView,m_rightView);
UpdateLayout();
m_splitter.SetSplitterPos(200);
////////////////
关于CSplitterWindow的具体函数的用法,建议参考以下两篇文章:
一切是如此的简单和面向对象。