第13章多重文件與多重顯示
1. 靜態分裂用到兩個CSplitterWnd成員函數:
1.BOOLCreateStatic( CWnd* pParentWnd, int nRows, in nCols,DWORDdwStyle = WS_CHILD |WS_VISIBLE,UINTnID = AFX_IDW_PANE_FIRST );
2.virtual BOOLCreateView( int row, int col, CRuntimeClass* pViewClass,
SIZEsizeInit,CCreateContext* pContext );
2. 窗口的靜態三叉分裂
3. 同源子窗口
從【Window/New Window】開始。這個菜單項目令Framework爲我們做出目前作
用中的view 窗口的另一份拷貝。如果我們能夠知道Framework 是如何動作,是不是可
以引導它使用另一個view 類別,以不同的方式表現同一份資料:
過程:
■進入AppWizard,製造一個Text 項目,採用各種預設的選項。獲得的主要類
別如下
■ 進入整合環境中的Resource View 窗口,選擇IDR_TEXTTYPE菜單,在
【Window】菜單中加入兩個新命令項:
■再在Resource View 窗口中選擇IDR_MAINFRAME工具欄,增加兩個按鈕,安
排在Help 按鈕之後
■進入ClassWizard,爲兩個UI 對象製作Message Map
■利用ClassWizard 產生一個新類別,準備做爲同源子窗口的第二個View 類別:
■ 修改程序代碼,分別爲兩個view 類別都做出對應的Docment Template:
■ 修改CTextDoc 程序代碼,添加成員變量。Document的數據是10 筆字符串:
■ 定義CMainFrame 的兩個命令處理例程:OnWindowText和OnWindowHex,使選
單命令項目和工具欄按鈕得以發揮效用。函數內容直接拷貝自圖13-5,只要
修改其中第14 行即可。這兩個函數是本節的技術重點。
■ 如果你要兩個view 都有打印預視的能力,必須在CHexView 中改寫下面三個
虛擬函數,至於它們的內容,可以依樣畫葫蘆地從CTextView的同名函數中拷
貝一份過來
virtual BOOLOnPreparePrinting(CPrintInfo* pInfo);
virtual voidOnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual voidOnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
4. 多重文件
A.新的 Document Template
我應該爲此新的文件類型產生一個Document Template,並把它加到系統所維護的DocTemplate串行中。
B.新的 UI 系統
下面就是爲了這新的 NewDoc 文件型態所對應的UI 系統,新添的文件內容(沒有什麼
好工具可以幫忙,一般文字編輯器的 copy/paste 最快):
程序效果圖: