宋克章
摘要:在使用VC++进行软件开发过程中,为了向用户提供美观实用的界面,提出了VC++内嵌Flash的设计方案;因为VC++拥有强大的数据处理功能,而其程序界面设计不如Flash丰富多彩;该方案能有效避开了相互的不足,发挥两者的优点。通过使用VC++环境提供的ActiveX控件swflash.ocx,来实现VC++程序中内嵌Flash页面。本文详细介绍了使用此种技术的实现方法,特别是在Flash页面动画和VC++程序间数据传送的交互性上,有独到的创新性;并着重介绍了Flash页面动态控制原理及软件算法实现。在数据监控软件项目中实现了该方案,且已在卫星测控数据监控设备中得到实用。VC++内嵌Flash方案很好地体现了设计的目的,能为类似开发提供实用价值。 :Flash动画;VC++;动态性;交互性;
The Realization of VC++ Programming Based Flash Interface
SONG Ke-zhang
In course of project-programming with VC++,in order we introduces a new method which programme with VC++ and Flash.Because the VC++ software has powerful data processing function ,but than Flash, so this method can enhance each otherVC++ with Flash interface by using swflash.ocx of introduce how to realize this method , especially the innovation of the Dynamic principle and Mutuality between VC++ and Flash,and how to control Flash pages. We did realize this project in the data monitoring-and-controling software is using in satellites monitoring devices.The method satisfied ours aim well and give an good example for some project like this.
Key words: Flash Animation; VC++; Dynamic; Mutuality;
引言
Flash使动画制作变的异乎寻常的快捷、方便。参见[1]。由于现形式等诸多方面均比较出色 ,在网络上得到迅猛的发展,在普通的应用程序中也可以借助一些VC++ 6.0编程语言所难以实现的特效。正是基于这种思想,用程序界面中,使程序界面的友好性大为提升。参见[2]。
本文所说的基于Flash页面显示,是VC编程实现的多表单视图页,在每个视图中使用基于画显示的页面;这只是具体的形式,核心的思想就是Flash页面动画和现;理解了这一层,就能创造出其他各种各样风格的界面来。VC++ 6.0在矢量动画制作的佼佼者。二者结合,可以解决诸如界面等各方面的许多设计实现困难,得到意想不到的效果。参见[3]。本文主要就是介绍在VC++ 6.0程序编写和FLASH对这些技术的阐述,使读者更能掌握和理解其精髓。
测控数据监控软件开发
卫星测控数据监控软件随着我国的航天事业的蓬勃发展,也逐渐走出国门,为国际客户服务;这就要求我们的卫星测控数据监控软件不仅功能强大,界面也应美观活泼;所以界面设计变得相当重要。通过查阅资料发现,在有关VC++的程序使用Flash动画的文献都存在很大的局限,些信息,不能接受用户的操作,缺乏交互性。参见[4]。在进行交互性设计中,我们不仅能通过作数据和文件,还可以控制VC++程序的行为,这样就大大增加了我们通过义。在这种设计架构下,VC++的程序提供程序框架和数据的处理,示,两者各有侧重,且之间进行数据交换。图1所示就是实现的软件功能示意图。在进行交互性功能开发中,对可行性进行试验时,由于在Flashprovide good-looking its interface is s strongpoint. We can program ActiveX. This paper detailedly software 制作的动画在层次、内容、表动画页面来内嵌VC++程序的数据传送的交互性实是功能强大的编程语言,动画制作中的几个关键技术;通过FlashVC++的程序使用动画提供数据信息的输入和显
inrerface
beautiful and now the Flash实现VC++ 6.0的Flash动FlashFlash操Flash的意同时VC++
关键词Abstract: to less ’1、 FlashFlash2、动画仅能显示一Flash中提供了定义变量的功能,6.0的Flash控件又提供了SetVariable和GetVariable函数,这样就为交互性功能开发的可行性提供了保障。 较容易实现的功能是数据的显示,即从VC++ 6.0程序到Flash控件的数据传输,在VC++ 6.0程序中使用设置变量函数即可;而反过来确不太容易,不能简单地使用GetVariable函数就能实现。
本文就以多表单视图的一个表单视图类CPage1View为例进行阐述。生成表单视图类class
CPage1View : public CFormView,在表单资源中插入ActiveX控件中的Shockwave Flash Object一项;设置此控件的属性ID为IDC_ PAGE1,并为控件生成相应的类CShockwaveFlash m_swfPage1;在
DoDataExchange函数中设置类和控件的关联DDX_Control(pDX, IDC_PAGE1, m_swfPage1);程序框架和多表单视图生成不是本文讨论的重点,请读者查找相关资料。
图1 结构系统框图
接下来就是在视图类启动时,加载Flash动画。这样我们就建立了为交互性开发的前期工作。在视图类的OnInitialUpdate函数中启动Flash动画,代码如下: m_swfPage1.SetMovie(Flash文件全路径); m_swfPage1.LoadMovie(0, Flash文件全路径); m_swfPage1.Play(); //让Flash动画充满整个表单视图的用户区 CRect clintRect; GetClientRect(&clintRect); if(m_swfPage1.GetSafeHwnd()!=NULL) m_swfPage1.MoveWindow(0,0, clintRect.Width(), clintRect.Height()); SetTimer(1,300,NULL);
在视图类的OnSize函数中也加入类似代码实现Flash画面随窗口调整相应变化。
3、 测控数据监控软件实现
基本的思路确立后,具体的实施可能有多种实现方法。由于VC++程序采用轮询的方法对Flash动画的变量进行查询,而Flash动画本身也可能在帧间循环运行,如图2所示两者之间在数据读写上存在时差,所以要考虑两者之间的读写同步问题。
图2 Flash和VC++的简单逻辑关系
3.1 Flash动画模块
Flash动画开发环境使用Macromedia Flash Professional 8。在进行整个测控数据监控软件开发中,Flash动画和VC++程序同等重要,所以要求Flash动画开发者不仅对Flash开发环境要相当熟悉,还要有一定的界面设计水平。参见[5]。这里我们只对功能实现上进行讨论。
在Flash开发环境中有三种文本模式:静态文本、输入文本及动态文本。静态文本用于固定的标题;动态文本用于显示动态的文本;输入文本可以形成输入框,用于文本输入,也可以显示初始值;后两种文本模式可以为文本设置变量。输入框、复选框和按钮是主要的用户信息输入形式。参见[6]。复选框在Flash中一般是影片剪辑,同样可以定义变量与之相对应,复选框由于点击后变量值一直维持,在VC++程序的定期轮询中,对复选框在VC++程序中对应的变量atoi(m_swfPage1.GetVariable(复选框在Flash中对应的变量))进行判断即可。按钮是一次触发信息,考虑读写同步问题一般不用变量进行表示,只有在确定帧停止时才能使用;通常是改变帧的停留位置实现按钮在Flash动画中的功能。图3所示使用两个图层,在帧控制层中,第一帧对所定义的变量进行初始化,且每帧动作设置为停止;显示层则是我们所看到的界面,有文本框、输入框、复选框及按钮等等。对按钮的动作相应设置为帧间跳转gotoAndStop(按钮对应的帧序号),图应2个按钮,每个按钮分别对应第3和4帧。参见[7]。
图3 Flash动画界面开发环境部分截图
软件模块
此软件模块主要含是基于MFC的表单视图多文档结构。参见[8]。CPage1View的关键在于利用Flash的多帧控制功能,数据的读写接口是Flash中的变量,并控制帧间的跳转。在CPage1View类中关键的函数是OnTimer(),下面就是定时器函数程序简介。图4为其流程图。
void CPage1View::OnTimer(UINT nIDEvent) {
int CurrentFrame=m_swfPage1.CurrentFrame(); if(CurrentFrame>1)
ReadCommonData();//读取公共数据 if(CurrentFrame==2){
OnButton1();//响应按钮1的函数
m_swfPage1.GotoFrame(1);//挪开此帧到转换停留帧 }
if(CurrentFrame==3){ OnButton2();//响应按钮2的函数
m_swfPage1.GotoFrame(1); //挪开此帧到转换停留帧 } }
注意在此CurrentFrame()函数取到的FrameNumber帧计数从0计数,而Flash中的帧计数是从计数,所以要清楚它们之间的这种对应关系。另一方面,语句GotoFrame(1);则是将Flash动画帧设置到第二帧。图3所示的帧控制层的第一帧称为初始化帧,第二帧称为转换停留帧,其他称为按钮对应帧。
下面一段程序可以用在OnTimer函数中,来实现另外一种按钮功能的方法。这种方法用于帧的
对133.2 VC++序号位置不变时,即点击按钮后到定时器响应帧的序号位置不变。否则在Flash帧间循环播放动画时出现紊乱,假设m_FileOpenFlag的初始值为1,按钮的功能使m_FileOpenFlag置成0,这样就造成VC++程序还没读取0值就又变回1。
str=m_swfPage1.GetVariable(\"m_FileOpenFlag\"); if(str==\"0\"){
m_swfPage1.SetVariable(\"m_FileOpenFlag\ .....//相应的处理代码 }
图4 VC++程序定时器函数流程
4、 结束语
本文探讨了基于Flash页面显示的VC++编程在数据监控系统中的应用,及其相关的Flash制作、数据传递交互性和动态性的具体实现,通过实际的应用和测试,成功的实现了通过Flash页面对监视数据的显示和对设备的控制。本文也为类似的软件项目开发提供了一种思路和参考模板。 参考文献
[1] Robert Penner.Programming Macromedia Flash MX . McGraw-Hill/OsborneMedia 2002.10
[2] Chao C. Chien.Professional Software Development with Visual C++ 6.0 & MFC. Delmar Thomson
Learning 2001.12
[3] Russell Chun, H. Paul Robertson.Macromedia Flash 8 Advanced for Windows and Macintosh.
Peachpit Press 2005.12
[4] 马晓辉.在VC中实现Flash动画播放. 河北工程技术高等专科学校学报 2005.6 (2) 48-50 [5] 李康满,刘朝晖.在VC++中使用Flash动画技术. 衡阳师范学院学报 2005.12 Vol.26(6) 86-88 [6] 杨勇.调用Flash美化VC应用程序界面的实现. 电脑知识与技术 2006.8 (23) 168-194
[7] 边国栋,谢矿生,周小燕.利用FLASH MX开发竞赛用计时器软件. 微机发展 2003.1 Vol.13(1) 17-19 [8] 赵剑秋,朱明.用VC实现控制面板应用程序. 计算机技术与发展2006.6 Vol.16(6) 110-112
因篇幅问题不能全部显示,请点此查看更多更全内容