WEB开发网
开发学院软件开发VC MFC程序员WTL指南(8)分隔窗口 阅读

MFC程序员WTL指南(8)分隔窗口

 2008-01-19 20:26:47 来源:WEB开发网   
核心提示:介绍随着使用两个分隔的视图管理文件系统的资源管理器在Windows 95中第一次出现,分隔窗口逐渐成为一种流行的界面元素,MFC程序员WTL指南(8)分隔窗口,MFC也有一个复杂的功能强大的分隔窗口类,但是要掌握它的用法确实有点难,通常传递true给bUpdate参数表示在移动分隔条之后相应的改变两个窗格的大小,Get

介绍

随着使用两个分隔的视图管理文件系统的资源管理器在Windows 95中第一次出现,分隔窗口逐渐成为一种流行的界面元素。MFC也有一个复杂的功能强大的分隔窗口类,但是要掌握它的用法确实有点难,并且它和文档/视图框架联系紧密。在第七章我将介绍WTL的分隔窗口,它比MFC的分隔窗口要简单一些。WTL的分隔窗口没有MFC那么多特性,但是易于使用和扩展。

本章的例子工程是用WTL重写的ClipSpy,如果你对这个程序不太熟悉,现在可以快速浏览一下本章内容,因为我只是复制了ClipSpy的功能而没用深入的解释它是如何工作的,毕竟这篇文章的重点是分隔窗口,不是剪贴板。

WTL 的分隔窗口

头文件atlsplit.h含有所有WTL的分隔窗口类,一共有三个类:CSplitterImpl,CSplitterWindowImpl和CSplitterWindowT,不过你通常只会用到其中的一个。下面将介绍这些类和它们的基本方法。

相关的类

CSplitterImpl是一个有两个参数的模板类,一个是窗口界面类的类名,另一个是布尔型变量表示分隔窗口的方向:true表示垂直方向,false表示水平方向。CSplitterImpl类包含了几乎所有分隔窗口的实现代码,它的许多方法是可重载的,重载这些方法可以自己绘制分隔条的外观或者实现其它的效果。CSplitterWindowImpl类是从CWindowImpl和CSplitterImpl两个类派生出来的,但是它的代码不多,有一个空的WM_ERASEBKGND消息处理函数和一个WM_SIZE处理函数用于重新定位分隔窗口。

最后一个是CSplitterWindowT类,它从CSplitterImpl类派生,它的窗口类名是“WTL_SplitterWindow”。还有两个自定义数据类型通常用来取代上面的三个类:CSplitterWindow用于垂直分隔窗口,CHorSplitterWindow用于水平分隔窗口。

创建分割窗口

由于CSplitterWindow是从CWindowImpl类派生的,所以你可以像创建其他子窗口那样创建分隔窗口。分隔窗口将存在于整个主框架窗口的生命周期,应该在CMainFrame类添加一个CSplitterWindow类型的变量。在CMainFrame::OnCreate()函数内,你可以将分隔窗口作为主窗口的子窗口创建,然后将其设置为主窗口的客户区窗口:

LRESULT CMainFrame::OnCreate ( LPCREATESTRUCT lpcs )
{
// ...
const DWORD dwSplitStyle = WS_CHILD | WS_VISIBLE |
               WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
       dwSplitExStyle = WS_EX_CLIENTEDGE;
   m_wndSplit.Create ( *this, rcDefault, NULL,
             dwSplitStyle, dwSplitExStyle );
   m_hWndClient = m_wndSplit;
}

创建分隔窗口之后,你就可以为每个窗格指定窗口或者做其他必要的初始化工作。

基本方法

bool SetSplitterPos(int xyPos = -1, bool bUpdate = true)
int GetSplitterPos()

可以调用SetSplitterPos()函数设置分隔条的位置,这个位置表示分割条距离分隔窗口的上边界(水平分隔窗口)或左边界(垂直分隔窗口)有多少个象素点。你可以使用默认值-1将分隔条设置到分隔窗口的中间,使两个窗格大小相同,通常传递true给bUpdate参数表示在移动分隔条之后相应的改变两个窗格的大小。GetSplitterPos()返回当前分隔条的位置,这个位置也是相对于分隔窗口的上边界或左边界。

bool SetSinglePaneMode(int nPane = SPLIT_PANE_NONE)
int GetSinglePaneMode()

1 2 3 4 5 6  下一页

Tags:MFC 程序员 WTL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接