网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
应用MFC开发高级应用程序
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
在MDI各个窗口之
间针对同一数据进行不同的可视化就是一件比较麻烦的事情。值得庆幸的是,MFC提 供的文档-视结构大大简化了这一工作。文档-视结构通过将数据从用户对数据的观 察中分离出来,从而方便实现多视,亦即多个视口针对同一数据,如果一个视口中 数据发生改变,那么其它相关视口中的内容也会随之发生改变以反映数据的变化。 SDI和MDI这两种Windows标准应用程序框架并不是总能满足用户的需要,就作者的工
作而言,就特别需要一种被称为单文档多视的应用程序,英文可以缩写为SDMV。通 过SDMV应用我们可以利用文档类来统一管理应用程序的所有数据,同时需要采用 窗口以多种方式来可视化这些的数据,如棒图,趋势图和参数列表,从而方便用户 从不同角度来观察数据。MDI虽然具有多窗口的特点,但是其为多文档,即通常情况 下,一个视口对应一个文档,视口+文档便构成一个子窗口。在各个子窗口之间数据
相互独立,如果要保持数据同步更新就需要采用特殊的技术了,采用这种方式既费 时又费力。通过笔者的实践发现,利用MFC本身提供的多视概念通过适当改造MDI窗 口应用程序就可以实现上述SDMV结构

所谓SDMV应用程序本质上仍然是一个MDI应用程序,只是在程序中我们人为控制使其 只能生成一个文档类,这个文档在第一个视口创建时创建,注意,这里并不需要限 制各个视口的创建先后顺序。此后与MDI窗口固有特性不同的是,所有新创建的子窗 口都不再创建独立文档,而是把该新视口直接连接到已有的文档对象上,这样就使 其成为单文档多视的结构,所有相关数据都存储在文档对象中,一旦文挡中数据发
生改变,通过UpdateAllViews()函数通知所有相关视口,各个视口就可以在 OnUpdate()中相应数据的变化。这种响应机制如下图所示:

图 1 文档-视结构数据更新机制
由于MDI本质上并不是为这种单文档多视机制服务的,因而在实际应用时需要解决一 些问题。

1、窗口标题问题

窗口标题本来不应该成为问题,缺省情况下MDI窗口通过在文档模板中提供的资源ID 所提供的对应字符串来确定窗口标题。但是对于SDMV应用,由于各个视口实质上是 对应于同一个文挡,因此每个视口都具有相同标题,只不过增加了一个数据用于指 示这是第几个视口。如果在各个视口中指明具体的窗口名字,那么由不同的视口启 动创建文档产生的窗口标题就不同,这个名字会影响到后继视口。为了作到不同类 型的视口如棒图视口和曲线视口具有不同的标题,这就需要一定的技术处理。根据 笔者的摸索发现可以采用如下步骤实现:
首先在从标准的MDI子窗口基类CMDIChildWnd派生一个自己的子窗口类,姑且命名为 CMyChild,然后在其成员变量中增加一个CString型变量用以存储当前窗口标题:
CString winTitle;
然后在不同的视口创建过程中通过获取父窗口指针按自己的意愿对上述变量进行赋 值,程序片段如下:
pChild=(CMyChild*)GetParent();
pChild->winTitle="棒图显示窗口";
最后在CMyChild派生类中重载CMDIChildWnd基类中的OnUpdateFrameTitle()函数来 强制实现窗口标题的个性化,这一函数在各种类库手册上和联机帮助中都没有,但 的确有这样一个具有保护属性的函数用来实现窗口标题的更新操作,这可以从MFC类库的源代码中找到该函数的实现。重载后的源代码如下:
void CMyChild::OnUpdateFrameTitle(BOOL bAddToTitle)
{
// update our parent window first
GetMDIFrame()->OnUpdateFrameTitle(bAddToTitle);

if ((GetStyle() & FWS_ADDTOTITLE) == 0)
return; // leave child window alone!

CDocument* pDocument = GetActiveDocument();
if (bAddToTitle && pDocument != NULL)
{
char szOld[256];
GetWindowText(szOld, sizeof(szOld));
char szText[256];

lstrcpy(szText,winTitl

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号