注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 32位开发 > C/C++ 内容正文:VC++实现混合静态分裂视窗的方法

VC++实现混合静态分裂视窗的方法

发布时间:2006-05-05 19:02:22 来源:计算机与信息技术 网友评论 0 条

摘要 本文以MFC(Microsoft Foundation Class Library)的CsplitterWnd类别为基础,通过对单文档视窗的静态分裂原理进行分析,介绍混合静态分裂视窗的实现方法,并深入阐述子视窗的视图动态切换技术。

关键词 静态分裂视窗 动态切换视图 混合分裂视窗

前言

在许多视窗应用软件中,通常要在屏幕上同时显示若干个子视窗,以显示同一个文档的不同部分,或者是在每个视窗中分别显示不同文档的内容。为了实现多视窗界面,可以采用MDI(Multiple Document Interface)的多文档模式进行处理,但是多文档的应用程序设计与维护相对于单文档的应用程序而言比较复杂。而且,如果要在屏幕上同时显示多个子视窗,通常要利用视窗重叠函数进行管理,每个子视窗的位置往往需要用鼠标人为设定,过多的人为干预降低了程序使用的效率。因此,如果能对单文档视窗做适当的分裂,无疑程序使用者将可以得到更易于操作的接口,数据的显示也更加直观和方便。本文通过对单文档视窗的静态分裂原理进行分析,实现上述要求。

二分裂视窗的类型

视窗的分裂可分为两种类型,一是动态分裂,二是静态分裂。动态分裂可以让使用者通过拖曳分裂方块的使用,将视窗分裂。但是,动态分裂最多只可以将视窗分裂为2×2个子视窗,不能进行混合分裂视窗,所有子视窗的属性和父视窗都是一样的,而且子视窗的数据通常来源于同一处。而静态分裂,使用者除了可以调整子视窗的大小和进行混合分裂视窗外,最多可将视窗分裂为16×16个子视窗,每个子视窗可以有各自不同的视图类(CView),各个子视窗显示的数据可以来自于不同的数据源。不论是要创建动态分裂视窗还是静态分裂视窗,都必须要利用MFC的CSplitterWnd类别来完成视窗的分裂。

混合静态分裂视窗的实现

混合分裂视窗是指在子视窗中进行视窗的再分裂。在MFC的框架下,混合分裂视窗必须完成三件工作:

⑴在视窗框架类别中定义CSplitterWnd控件为其属性(数据成员)。

⑵重载视窗框架类别中的OnCreateClient函数(CFrameWnd::OnCreateClient),建立静态分裂子视窗,为静态分裂子视窗填充视图。

⑶建立维持各子视窗同步更新的机制。

首先,利用MFC AppWizard生成一个单文档应用程序,在应用程序的CMainFrame类别中声明CSplitterWnd类别的数据成员。

其次,重载CMainFrame类别中的OnCreateClient(LPCREATESTRUCT,CCreateContext* pContext)函数。在该函数中利用CsplitterWnd类别的构造函数Create Static(CWnd *pParentWnd,int nRows,int nCols,DWORD dwstyle,UINT nID) 创建混合静态分裂子视窗,即在Create Static分裂出的子视窗中利用CsplitterWnd类别的控件再一次分裂视窗。

Create Static函数的参数含义为:

·pParentWnd是准备建立静态分裂视窗的视窗框架控件的指针;

·nRows和nCols是准备建立静态分裂视窗行数(nRows)与列数(nCols)

因此,创建的静态分裂子视窗个数为nRows × nCols个,这两个参数最小不得小于0,最大不可超过16;dwstyle是设定子视窗的形式;nID静态分裂的代号(ID),此代号预设为AFX_IDW_PANE_FIRST,若静态分裂视窗位于另一个分裂视窗内时,不可以使用默认值,可以利用CsplitterWnd类别的成员函数IdFromRowCol(int row,int col)获得。利用CsplitterWnd类别的成员函数Create View (int row,int col,CruntimeClass* pViewClass,SIZE sizeinit,CcreateContext* pContext) 为静态分裂子视窗填充视图,在将视图与子视窗关联时必须先完成子视窗的创建。

Create View函数的参数含义为:

·row和col是指定准备建立View控件的子视窗,其指定的方式是以表示该子视窗所在的行列位置;

·pViewClass是指定用于建立子视窗View控件的View类别,该类别需要被声明为Run-Time类别;

·Sizeini是View控件的起始大小;pContext是一个指向记录应用程序所使用的视窗框架控件、Document控件,以及View控件之变量的指针,此参数在CMainFrame::OnCreateClient函数被调用时传入,再由该函数传递给此函数。

·CsplitterWnd类别的成员函数SetColumnInfo(int col,int cxIdeal,int cxMin)和SetRowInfo(int row,int cyIdeal,cyMin)为设置子视窗的宽度和高度,参数cxIdeal和cxMin是指定子视窗的宽度和最小宽度,cyIdeal和cyMin是指定子视窗的高度和最小高度,在使用这两个函数调整子视窗的大小后还应该使用该类别的成员函数RecalLayout()重新调整视窗框架的布局。如果要设定视窗框架里的活动子视窗,可以通过CsplitterWnd类别的成员函数SetActivePane(int row,int col,CWnd* pWnd=NULL)来完成,该函数指定子视窗的方式有两种,一是指出子视窗所在的行列,二是传入指向该子视窗的控件指针。

最后,将视窗分裂成多个子视窗后,整个视窗程序中将存在多个View控件。当在其中一个View控件执行更新操作时,如何让其它View控件同步更新数据?可以通过文档类别(CDocument)的UpdateAllViews(CView* pSender,LPARAM lHint,CObject* pHint)成员函数的调用,再由该函数分别调用目前存在于视窗程序中各View控件的On Update函数来完成数据的同步更新。

UpdateAllViews函数的参数含义为:

·pSender是指向引发更新操作的View控件指针,如果传入NULL表示所有视图都要执行更新操作;

·lHint是用于传送更新视图时,需要传送的额外信息参数;

·pHint是指向记录更新视图所需额外信息的控件。在调用该函数时,将View控件的指针传入的目的是要告诉该函数该子视图已经完成数据更新,该函数不需要再调用该子视图的On Update进行数据更新。

相关文章
  • VC++实现对远程计算机屏幕的监视
  • VC++实现动画弹出/弹入式窗口
  • 利用VC++实现AVI文件的合成和分解
【评论】【收藏本文】【打印】【关闭】
上一篇文章:Visual C++设计UDP协议通讯示例
下一篇文章:用C++ Builder实现电子邮件群发
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
推荐阅讯
  • 轻轻松松学习C++ 标准模板库STL
  • Windows Sockets:使用带存档的套接字
  • C/C++中命令行参数的原理
  • Visual C++ 入门精解-第三部分
  • Windows Sockets:操作顺序
  • COM组件设计与应用之实现多接口
  • 用Viusal C++实现字符串分割函数
  • 解析Cookie欺骗实现过程及具体应用
  • VC++删除浮动工具条中“关闭”按钮
  • Windows Sockets:带存档的套接字示例
阅读排行
  • 1.Borland 发布C++ Builder 2006 RAD 环境
  • 2.C/C++程序员应聘常见面试题深入剖析
  • 3.Visual C++常用数据类型转换详解
  • 4.C++中的 static 关键字
  • 5.利用VC++实现局域网实时视频传输
  • 6.浅谈C/C++内存泄漏及其检测工具
  • 7.英国投票否决C++/CLI 微软强攻ISO标准受挫
  • 8.VC++下用MSComm控件实现串口通讯
  • 9.伪随机数生成及在VC++中的实现
  • 10.VC++编程实现对波形数据的频谱分析
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载