如何用VC6.0的SDI实现两个文档模板

鬼谷子
如何用VC6.0的SDI实现两个文档模板
北京信息工程学院软件工程研究中心
马文晓
---- 当前,用AppWizard新建的支持文档/视的SDI项目,只含有从CWinApp,CFrameWnd,CDocument,CView或CView
的子类派生的4个类,在CWinApp的InitInstance函数中只实现了一个管理文档/普通视的文档模板.
---- 若想实现管理文档/滚动视,及管理文档/两行一列可编辑分隔器这样两个文档模板,只需做:
---- (1) 用AppWizard新建名为T2的支持文档/视的SDI项目,建立的最后一步,选择CScrollView派生视类.
---- 建立完后,此项目的文件名及类名为:
T2App.h,T2App.cpp: 含CT2App类的声明及实现
MainFrame.h,MainFrame.cpp:
含CMainFrame类的声明及实现
T2Doc.h,T2Doc.cpp: 含CT2Doc类的声明及实现
T2View.h,T2View.cpp: 含CT2View类的声明及实现
(2) 用ClassWizard从CFrameWnd生成名为F2的框架类,从CEditView生成名为V的视类.
---- (3) 新建一菜单,其ID值为M2,然后新建一串表条目,其ID,VALUE,CAPTION域分别等于M2,M2的值(在resource.h可
找到),"\n\nTEMPLATE2".
---- (4) 在CWinApp.cpp中,加入#include "F2.h"及#include "V.h".
---- 在InitInstance函数的AddDocTemplate(pDocTemplate)语句后,加入以下 语句,以生成 与M2菜单及串表相关的第
2个文档模板:
pDocTemplate=new CSingleDocTemplate(
M2,
RUNTIME_CLASS(CT2Doc),
RUNTIME_CLASS(F2),
RUNTIME_CLASS(V));
AddDocTemplate(pDocTemplate);
---- (5) 在F2.h中,加入成员变量private:
CSplitterWnd m_splitter;在F2.cpp中,加入 #include "V.h".
---- 重载框架类F2的成员函数F2::OnCreateClient:
CRect rc;
GetClientRect(&rc);
m_splitter.CreateStatic(this,2,1);
//建立两行一列分隔器
m_splitter.CreateView(0,0,pContext- >
m_pNewViewClass,CSize
(rc.Width(),rc.Height()/2),pContext);
m_splitter.CreateView(1,0,RUNTIME_CLASS
(V),CSize(0,0),pContext);
SetActiveView((CView*)m_splitter.GetPane(0,0));
return TRUE;
---- 初启此SDI,或用户点击了"文件"- >"新建"菜单项时,将出现要求选定模板类型的"新建"对话框,选定"T2"将运行滚动视
模板,而点击"TEMPLATE2"将运行两行一列可编辑分隔器模板.
---- 要使滚动视中的水平和垂直滚动条可见,可在CT2View::OnInitialUpdate()中,将sizeTotal.cx,sizeTotal.cy置为大于
600的值.
---- 对支持文档/视的MDI项目,可照搬以上的做法,但要从CMDIChildWnd派生F2框架类.初启此MDI时,不会出现"新建"对
话框,这点与SDI不同.仅当用户点击了"文件"- >"新建"菜单项时,才会出现"新建"对话框.

龙丘居士亦可怜
谈空说有夜不眠
忽闻河东师子吼
拄杖落手心茫然