天天看點

使用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,如需轉載請自行聯系原作者

繼續閱讀