如何用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可找到)," TEMPLATE2".
(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不同.仅当用户点击了"文件"- >"新建"菜单 项时,才会出现"新建"对话框.
- 上一篇:如何更新翻转背景颜色的文本
- 下一篇:显示作为窗口或对话框背景的位图