VC与Flash之间基于字符串的双向消息互传

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:o70078
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:文章给出VC和Flash之间一种基于自定义字符串的双向消息互传机制,并应用该机制用VC和Flash联合实现进度条的效果。
  关键词:Shockwave Flash Object控件;VC;通讯;双向消息互传; ActionScript
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31634-01
  Messages Exchanging Between VC and Flash
  LIU Dong1,HUANG Yong2
  (1.Institute of Educational Software of Guangzhou University,Guangzhou 510006,China;2.Institute of Educational Software of Guangzhou University,Guangzhou 510006,China)
  Abstract:This paper introduces a mechanism of messages exchanging based on user-defined strings between VC and Flash. As an application of the mechanism, author gives a progress bar example.
  Key words:Shockwave Flash Object control;VC;Communication;Messages Exchanging;ActionScript
  
  1 问题的提出
  
  Flash动画以其独特的优势(制作简单,易学易用,表现力较强,生成的文件小等)目前已经广泛应用于网络以及各种媒体,我们现在随处可以见到很多制作精美的动画,我们知道在程序设计和软件开发中要想实现类似的效果是相当困难的,需要很多图形图像方面的知识和技巧,把Flash制作的动画整合在应用软件中显然是一个不错的想法,在VC(其他编程语言也一样)中可以使用shockwave flash object控件来达到目的。但有时我们不仅仅是在程序中播放动画,还需要做一些交互,比如:我们想知道动画播放的进度、使用者在动画中单击了哪个按钮等等,本文在VC和Flash之间消息互传方面进行了一些研究,探索出一种基于字符串的双向消息互传机制,并给出一个应用范例。
  
  2 消息双向互传的实现原理
  
  要想实现双向的消息互传,需要满足如下条件:1.有一个发送方和接收方都能理解的消息定义;2.双方均有接收和发送消息的能力; 3.必须定时(及时)查询消息的到来。第一个条件比较容易满足,可以自定义一些字符串作为消息。下面分别从VC和Flash的角度解释该机制的实现原理。
  2.1 VC中消息的接收、发送和查询
  在VC中插入shockwave flash object控件之后,可以让它像普通的windows控件一样来接收并处理消息。这个控件有一个消息:FSCommand,为它添加消息处理函数如OnFSCommandShockwaveflash1(LPCTSTR command, LPCTSTR args)。此函数有两个参数,均为字符串,对应于Flash的ActionScript中fscommand()命令中的两个参数。可以只用其中的一个,也可两个都用,根据实际情况来定,VC会为这个控件设置一个定时器,一旦Flash动画有消息发送过来VC会及时收到,这样就实现了消息的接收。还有另外一种方式就是:利用Shockwave Flash Object控件提供的一个方法GetVariable(),可以得到Flash ActionScript中变量的值。因此我们可以通过设置一个定时器不断调用GetVariable()来查询变量的值,这样也可以实现消息的接收,但这种方法比较麻烦,所以我们这里采用前者。
  Shockwave Flash Object控件提供另外一个方法SetVariable(),可以随时设置Flash ActionScript中的变量的值,有两个参数,均为字符串。这样就等于是发送消息给Flash了。
  2.2 Flash中消息的接收、发送和查询
  在Flash中发送消息也很方便,使用函数fscommand(command:String, parameters:String),该函数可以使swf文件与Flash Player 或承载 Flash Player 的程序(如 Web 浏览器、可承载ActiveX控件的程序等)进行通讯。
  Flash接收消息就略微麻烦一点,需要定义一个String类型的变量用于接收VC对其值的设置,同时还要使用SetInterval()函数定义一个定时器,不断地查询该变量的值以便Flash及时做出响应。
  
  3 应用消息互传机制实现进度条
  
  理解了消息互传机制的原理之后,我们应用该机制实现一个进度条实例。基本想法是:用Flash制作一个进度条,在VC中设置进度条的百分比使得进度条的长度发生变化;当进度为100%时Flash动画发送“success”消息通知VC,VC弹出消息框作出响应。
  3.1Flash方面的制作与编程
  Flash方面的制作包括三层,最下面一层是一个影片剪辑起个名字叫progress_mc,这个影片根据需要可简单也可复杂,这里只要知道有一个外框,还有一个进度条Inside_mc;第二层是百分比文字提示,有一个动态文本框,起个变量名txt_per;第三层用作action层,程序如下:
  stop();
  var perLoaded:String="0";
  progress_mc.Inside_mc._xscale = 0; //让初始进度为0
  function setPercent() //用于执行进度条的变化
  {if(Number(perLoaded)>100)
  {//如果进度超过100,就向VC发送消息
  fscommand("progress","success");
  }
  else
  {//设置进度条的长度和文本框的文字提示
  progress_mc.Inside_mc._xscale = Number(perLoaded);
  txt_per = perLoaded+"%";
  }
  }
  //设置每0.1秒查询一次perLoaded值的变化
  var perID:Number = setInterval(setPercent,100);
  制作完毕后保存并发布为progress.swf。
  3.2VC方面的制作与编程
  在VC中建立一个基于对话框的应用程序,插入一个Flash控件、两个按钮(开始和停止)。为Flash控件添加一个成员变量CShockwaveFlash类型的m_ctrlFlash和一个整型变量percent,在构造函数中将percent初始化为0.
  在对话框的初始化函数BOOL CFlashProgressDlg::OnInitDialog()中添加代码如下:
  char dir[MAX_PATH];
  char ch = '\\';
  char DirName[MAX_PATH];
  char * location;
  unsigned intLength;
  ::GetModuleFileName(NULL,dir,MAX_PATH);
  location = strrchr(dir,ch);
  Length = location - dir;
  strncpy(DirName,dir,Length);
  DirName[Length] = '\0';
  strcat(DirName,"\\progress.swf");//得到progress.swf的完整路径
  m_ctrlFlash.LoadMovie(0,DirName);
  GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(FALSE);
  GetDlgItem(IDC_BUTTON_START)->EnableWindow(TRUE);
  为Flash控件添加一个消息处理函数如下:
  void CFlashProgressDlg::OnFSCommandShockwaveflash1(LPCTSTR command, LPCTSTR args)
  {if(strcmp(command,"progress")==0)
  { //如果收到Flash的消息,说明下载成功,弹出对话框
  if(strcmp(args,"success") == 0)
  {this->MessageBox("下载完成!");
  KillTimer(1);
  GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(FALSE);
  GetDlgItem(IDC_BUTTON_START)->EnableWindow(FALSE);
  }}}
  添加定时器函数如下:
  void CFlashProgressDlg::OnTimer(UINT nIDEvent)
  {CString strPercent;
  strPercent.Format("%d",percent++);
  m_ctrlFlash.SetVariable("perLoaded",strPercent);
  CDialog::OnTimer(nIDEvent);}
  为开始和停止按钮添加消息处理函数如下:
  void CFlashProgressDlg::OnButtonPause()
  {KillTimer(1);
  GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(FALSE);
  GetDlgItem(IDC_BUTTON_START)->EnableWindow(TRUE);}
  void CFlashProgressDlg::OnButtonStart()
  {SetTimer(1,100,NULL);
  if(percent>100)percent = 0;
  GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(TRUE);
  GetDlgItem(IDC_BUTTON_START)->EnableWindow(FALSE);}
  以上程序在VC6.0和Flash 8.0下调试通过。本文中所涉及的所有源程序均可通过链接http://lyld3618.go1.icpcn.com/download/flashprogress.rar下载。
  
  4 结束语
  
  根据以上提供的原理和方法,我们就建立了一种VC和Flash之间双向消息互传机制,需要说明的是这种机制是基于自定义字符串的,可根据实际需要和复杂程度定义多种消息,消息的种类越多,相应的比较判断就越复杂。通过这种方法,就可以把Flash动画应用于我们的程序中,让程序更生动直观也更加精美。
  
  参考文献:
  [1]David J.Kruglinski.等.Visual C++6.0技术内幕[M].北京:北京希望电子出版社,2002.
  [2]Flash8.0 帮助文件.
其他文献
摘要:在中学数学教学内容中,应用一元二次方程求根公式计算一元二次方程的根和应用高斯主元素消去法计算线性方程组的解是一部分具有机械计算性的程式化的单元,这使得很适合用C语言编写其计算程序。按照结构化思路设计编写C程序的二个实例。  关键词:C语言;结构化;计算程序  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31611-03  Compiling two Ge
期刊
摘要:本文提出了一种新的基于相容近似空间的Rough集理论在不完全信息系统中进行知识提取。  关键词:Rough集;相容近似空间;不完备信息系统  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31652-01  The Application of a New Rough Set Approach to Non-complete Information Sys
期刊
摘要:本文首先介绍了JAVA类装载机制的功能、体系结构以及规则,然后以Tomcat服务器为例,分析了J2EE应用服务器的特点,并对其类装载器进行了简单的分析。  关键词:类装载器,J2EE应用服务器  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31609-02  Brief Research on JAVA Class Loader of J2EE Appl
期刊
摘要:介绍了TMS320C54x系列DSP的存储结构,详细讨论了存储器和存储空间的映射关系,分析了存储空间的配置方法,并结合实例给出了C5410型DSP的存储器映射关系和链接配置文件。  关键词:DSP;存储器;存储空间;映射;链接配置文件  中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)18-31604-03  Study on the Memory Mapping
期刊
摘要:目前,单信道MAC协议在网络负载较重时的冲突和退避,造成信道带宽浪费而使得协议效率不高。本文主要针对UWB应用在无线个域网络中的特定场景,提出了一种新的应用于分布式网络的私有多信道UWB MAC协议,既可以解决隐藏终端和暴露终端问题,又可以有效地分配信道资源,提高网络性能。  关键词:私有多信道;接入策略; MAC; UWB  中图分类号:TP393 文献标识码:A文章编号:1009-304
期刊
摘要:本文在阐述MPLS VPN技术基本原理的基础上,简单介绍了MPLS VPN模型和技术的优势,最后给出利用ATM组网和用户多方式接入的方案。  关键词:ATM;MPLS;VPN;多协议标签交换  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31594-01  The Virtual Network Technology on MPLS  XU Li, ZH
期刊
摘要:剖析了开源入侵检测工具Snort的体系结构及其工作配置模式,为中小型网络配置入侵检测系统提供了可行的解决方案。  关键词:入侵检测系统;通用入侵检测框架;Snort  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31585-02  Research and Analysis the System Framework of Snort  YU Kun, W
期刊
摘要:在分布式计算环境下,Web服务发现和服务匹配技术直接关系到全球网络信息资源获取和信息的有效利用。传统的Web服务匹配和发现过程是基于UDDI并在语法级实现的。因而服务匹配模型没有涉及到语义,鉴于语义在智能匹配系统中所起的作用,本文从语义匹配的角度着重分析服务匹配系统中存在的数据语义、功能语义和服务质量语义。  关键词:语义描述;UDDI;匹配模型;本体  中图分类号:TP393文献标识码:A
期刊
摘要:为说明数字视频监控所具有的模拟监控无法比拟的优点,本文较为详细的介绍了在S3C44B0X芯片上,基于嵌入式uClinux操作系统构建嵌入式Web服务器的网络视频监控系统的软件开发过程,并介绍了数字视频监控系统的硬件组成,阐明了嵌入式Web服务器的机制与机理,并结合具体的实践给出了一些相应的实现方法,以供业内同行参考使用。  关键词:嵌入式Web服务器;CGI;数字视频监控;设计  中图分类号
期刊
摘要:采用可视化设计工具C++Builder开发基于C/S架构的自动组卷系统,既要利用C++ Builder强大方便的数据库开发功能,又要利用Word强大的数据处理能力。本文在C++Builder基于OLE技术对Word 2000的调用方面进行了一些有益的探索,可以较为便捷地实现试题库系统试题的导入和导出。  关键词:OLE;试题库;自动组卷系统;C++ builder;Word 2000  中图
期刊