服务热线:
您当前的位置:首页 > 世纪星月刊 > 第10期 (2010年10月)

【技术前沿】让你的报告多一种表现形式

2011/10/13 10:30:47

 

作者:研发部 孙辉

 

简介

 

  在实际应用中经常会遇到这种情况,针对一组数据需要使用多种表现方式,比如表格、图表,这样在一个报告中既有表格的清晰,也有图表的直观。那么在MFC中是如何实现呢?MFC采用的是一种称为文档视图结构来管理数据,文档类专门负责数据的存储、读取等操作,视图类负责数据的展示以及与用户的交互。

  MFC做了大量的前期工作,使得程序员建立一个文档视图框架非常容易,可以把更多的精力集中到真正的业务上。不过想实现单文档多视图还需要做一些前期的工作,下面介绍几种实现方式:

 

1 使用Splitter实现视图拆分

 

  这是开发人员非常熟悉的一种单文档多视图实现方式。MFC提供CSplitterwnd类作为拆分窗口的工具,开发人员只需要简单的几行代码就能实现拆分。

  如果在运行时,还需要切换某个视图,CSplitterwnd类也提供实现方法,调用delete方法删除原有的视图,再调用Creatview方法生成新的视图。这种方法的优点是实现简单,缺点是比较耗费资源,每次切换视图都要销毁原有视图,再创建新视图,响应速度较慢,对于视图比较复杂的应用,这个缺点尤其明显。

  另外,由于在切换视图时删除原有视图,生成新的视图,当切换回原视图时,界面上的所有内容都是初始化的状态,这可能并不是您想要的,比如一个视图上有一个编辑框控件,在上面写上一些内容后没有处理,切换到其他视图,当切换回来就发现,写好的内容都已不见。这种情况可以考虑把原有视图隐藏,而不删除,从网上可以找到类似的例子。

 

2 多文档结构的实现方式

 

  多文档程序可以打开多个文档,对应不同的数据类型,文档之间可以对照,word就是多文档程序的成功典范。要在多文档框架下实现单文档多视图,就需要对文档模板有所了解,文档模板实现对多个文档的管理,多文档结构通过它来实现,因此需要修改这个模板类来适应单文档多视图的需要。

  首先是从CMultiDocTemplate继承一个自己的类:

 

 

  这个类与父类不同的地方就在于不要CChildFrame和CView,只要CDoc,这样就成了单文档。然后自己建立符合要求的CFrame和CView,那怎么加入新的CFrame和CView呢?原来,CMultiDocTemplate有两个成员,一个是m_pFrameClass,一个是m_pViewClass,也就是文档模板构造函数中的另两个参数,加入窗口和视图类的时候改变这两个成员即可。

  再有是什么时候加,需要在打开文档或新建文档的时候加,CMultiDocTemplate有一个OpenDocumentFile函数,在这个函数里调用CreateNewFrame,正是这个过程生成子窗口,所以我们要重写OnOpenDocumentFile函数,在这个函数中创建两个视图。代码摘录如下:

 

 

结论


  单文档实现方式简单易懂,但不够灵活,扩展性差。多文档方式功能强大,易于扩展,需要对程序有深入的了解。可以根据实际情况,选择合适的实现方式。

 

 


企业邮箱  |  法律公告  |  隐私保护  |  联系我们  |