单文档多视图的实现

本文档介绍了如何实现单文档多视图的程序设计,通过重写CMultiDocTemplate并自定义视图类,创建两个不同的视图窗口,分别展示图形和表格。在打开或新建文档时动态添加视图,并在子框架类中设置自定义标题和图标,实现窗口间的切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个文档可能对应多个视图,最典型的如股市行情数据有图形界面和表格界面两种,实现这种程序使用MDI是最直接也是最让人接受的。这里只对可能出现的问题做一下简要分析。

1,如何显示两个视图

首先需要定义要使用的视图类,以股市软件为例(下同),定义一个图形View和一个表格View,这是必须要做的。MDI使用文档模板来加载文档、框架窗口和视图窗口,默认的创建函数在App类的InitInstance中:

CMultiDocTemplate* pDocTemplate;
 pDocTemplate = new CMultiDocTemplate(
  IDR_MY1TYPE,
  RUNTIME_CLASS(CMy1Doc),
  RUNTIME_CLASS(CChildFrame), // custom MDI child frame
  RUNTIME_CLASS(CMy1View));
 AddDocTemplate(pDocTemplate);

 

这不是我们需要的,所以我们要自己写一个CMultiDocTemplate,当然不是完全重写。例如写一个CMVDocTemplate,继承自CMultiDocTemplate。把它的构造函数写成这样:

CMVDocTemplate::CMVDocTemplate(UINT _nIDResource,
    CRuntimeClass* _pDocClass)
    : CMultiDocTemplate( _nIDResource, _pDocClass, NULL, NULL )
{
}

也就是说不要CChildFrame和CView,只要CDoc,这就是单文档。

然后在App类的InitInstance中将CMultiDocTemplate替换成CMVDocTemplate:

CMVDocTemplate* pDocTemplate;
 pDocTemplate = new CMVDocTemplate(
  IDR_MY1TYPE,
  RUNTIME_CLASS(CMy1Doc));
  //RUNTIME_CLASS(CChildFrame), // custom MDI child frame
  //RUNTIME_CLASS(CListViewView));
 AddDocTemplate(pDocTemplate);

 

不要CFrame和C

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值