WTL分割窗口

 
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的具体函数的用法,建议参考以下两篇文章:
         一切是如此的简单和面向对象。
 
posted @ 2007-07-18 14:23  反正我信了  阅读(339)  评论(0编辑  收藏  举报