一
當用戶需要同時對文當的不同部分進行編輯時
切分窗口分為動態切分窗口和靜態切分窗口
動態切分功能多應用在編輯文本類的軟件中
二
以單文檔SDI應用程序為例
實現步驟:
CinfoView 基類為列表視圖類ClistView
CLineView 基類為表單視圖類CFormView
CMyEditView 基類為編輯視圖類CEditView
要點:在添加ClineView之前
注意:OnCreateClient函數的調用在OnCreate函數之後
BOOL CreateStatic( CWnd* pParentWnd
WS_CHILD | WS_VISIBLE
函數有
● pParentWnd:切分窗口的父窗口指針
● nRows:水平方向分隔窗口的數目
● nCols:垂直方向分隔窗口的數目
● dwStyle:切分窗口的風格
● nID:子窗口的ID值
返回值:如果創建成功
m_wndSplitter
virtual BOOL CreateView( int row
函數有
● row:窗格的行標
● col:窗格的列標
● pViewClass:視圖的執行期類CRuntimeClass指針
● sizeInit:一個SIZE(或者CSize)類型的數據
● pContext:一般是由父窗口傳遞過來
返回值:如果創建成功
OnCreateClient函數的全部代碼:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs
{
// TODO: Add your specialized code here and/or call the base class
CRect rect;
GetClientRect(&rect);
//產生第一次靜態切分
m_wndSplitter
//為第一個窗格產生視圖
m_wndSplitter
RUNTIME_CLASS(CTestView)
CSize(rect
pContext);//父窗口的創建參數
//為第二個窗格產生視圖
m_wndSplitter
RUNTIME_CLASS(CMyEditView)
CSize(rect
pContext);
return TRUE;//不再調用基類的OnCreateClient函數
//return CFrameWnd::OnCreateClient(lpcs
}
在這裡需注意
① 必須為每個靜態切分窗格創建視圖窗口
② 必須包含相應的類的頭文件
#include
#include
③產生靜態切分後
代碼如下:
int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) ==
return
// TODO: Add your specialized creation code here
CRect rect;
GetClientRect(&rect);
//獲得窗口的創建信息指針
CCreateContext *pContext = (CCreateContext*) lpCreateStruct
//產生二次靜態切分
m_wndSplitter
//為第一個窗格產生視圖
m_wndSplitter
RUNTIME_CLASS(CLineView)
CSize(rect
pContext);//父窗口的創建參數
//為第二個窗格產生視圖
m_wndSplitter
RUNTIME_CLASS(CInfoView)
CSize(
pContext);
return
}
注意:二次切分的父窗口是第一次切分的第一個窗格
SwitchView()
void CTestView::SwitchView()
{
CRect rect;
GetClientRect(&rect);
int cx = rect
int cy = rect
m_wndSplitter
m_wndSplitter
m_wndSplitter
m_wndSplitter
}
該子函數主要用於設置二次切分後的各列信息
由
● col:切分窗口的列標識
● cxIdeal:列的實際寬度
● cxMin:列的最小寬度
本示例的運行結果如下:
三
切分窗口的形式和每個窗格所使用的視圖類可以根據實際需要來確定
三叉切分的方法並不唯一
From:http://tw.wingwit.com/Article/program/net/201311/13984.html