天天看点

使用CSplitterWnd实现拆分窗口(多视图显示)

静态拆分窗口的行列数在拆分窗口被创建时就设置好了,用户不能更改。但是用户可以缩放各行各列。一个静态拆分窗口最多可以包含16行16列。

要找一个使用了静态拆分窗口的应用程序,只要看一下windows管理器即可。

选择静态或动态拆分的一个准则是是否希望用户能够交互地修改拆分窗口的行列配置。另一个决定因素是计划在拆分窗口中使用的视图种类。

在静态拆分窗口中很容易使用两个以上不同种类的视图,因为您可以在每个窗格中指定所用的视图类型。但是在动态拆分窗口中,MFC管理着视图,

除非从 CsplitterWnd派生一个新类并修改拆分窗口的默认操作性能,否则拆分窗口中的所有视图使用的都是相同的视图类。

静态拆分窗口是用CsplitterWnd::CreateStatic而不是CsplitterWnd::Create创建,并且由于MFC不会自动创建静态拆分窗口中显示的视图,

所以您要亲自在CreateStatic返回之后创建视图。CsplitterWnd为此提供了名为 CreateView的函数。

你应按如下步骤创建一个CSplitterWnd对象:

       1. 在父框架中嵌入一个CSplitterWnd成员变量。

  2. 重载父框架的CFrameWnd::OnCreateClient成员函数。

  3. 从重载的OnCreateClient函数中调用类CSplitterWnd的Create或CreateStatic成员函数,并调用CreateView来创建视图。

使用静态拆分窗口的一个优点是由于您自己给窗格添加视图,所以可以控制放入视图的种类。

使用CSplitterWnd实现拆分窗口(多视图显示)

在MFC程序中,各个视类之间进行数据交互是通过Doc类来完成的,由CDocument类来处理文档,

而由CView类来显示。即将数据存储到CDocument类中,而用到数据的时候再从该类中读取。

有关该类的其他成员函数,可以参考MSDN。

其他信息

锁定切分条

当用户创建好分割窗口后,有时并不希望通过拖动切分条来调节窗口的大小。这时就必须锁定切分条。锁定切分条的最简单的

方法莫过于不让CSplitterWnd来处理WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_SETCURSOR消息,而是将这些消

息交给CWnd窗口进行处理,从而屏蔽掉这些消息。拿WM_LBUTTONDOWN处理过程来说。修改为如下: 

其余的处理方法类似。 

切分条的定制 

由Window自己生成的切分条总是固定的,没有任何的变化,我们在使用一些软件比如ACDSee的时候却能发现它们的切分条

却是和自动生成的切分条不一样的。那么如何定制自己的切分条呢?通过重载CSplitterWnd的虚方法OnDrawSplitter和

OnInvertTracker可以达到这样的目的。下面的代码生成的效果是分割窗口的边界颜色为红色,分割条的颜色为绿色.代码如下:

同样我们只要继承CSplitterWnd中的其余的一些虚拟方法就可以生成具有自己个性的分割窗口了。

本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2010/03/07/1680222.html,如需转载请自行联系原作者

继续阅读