第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 最快):
程序效果图: