Visual C++实现Flash动画播放

分类: VC.NET   出处:iocblog整理  更新时间:2009-02-05   添加到收藏  

        摘要: 本文通过在vc中将外部swf格式文件内嵌为vc的内部资源,使其在程序运行过程中从资源动态释放到临时文件,从而实现vc对flash动画的播放。
 
  引言

  flash动画由于可以很方便地把用户的想象通过动画显现出来,使原本只属于专业制作人员的动画制作变的异乎寻常的快捷、方便。由于flash制作的动画在层次、内容、表现形式等诸多方面均比较出色,因此在网络上得到迅猛的发展,更有不少厂商用flash在互联网上做起了广告和产品演示,效果丝毫不比视频的差,而体积则要小的多。flash不仅在网络上有广泛的应用,在普通的应用程序中也可以借助flash实现一些vc、delphi等编程语言所难以实现的特效,比如在一些演示版的程序中完全可以将程序运行前的闪屏用flash来制作。本文下面将通过对内嵌资源的动态释放来实现vc对flash动画的播放,并给出了部分实现代码。
(www.iocblog.net 文章来源)
  嵌资源的动态释放

  flash动画在此是作为程序的一个模块,虽然也可以以文件的形式作为一个外部资源来使用,但为了避免因外部模块遗失而造成程序的非正常运行,可将由flash 5.0预先制作好的swf格式的文件以资源的形式打包到应用程序中去,而在程序运行时再将其从资源恢复到文件,使用完毕再通过程序将其从磁盘删除。

  在导入资源时由于swf格式文件并非vc的标准资源,所以在导入时需要在"resource type"栏指定资源类型"swf",特别需要注意的是在此必须要包含引号。加入到资源后可以通过资源视图看到导入的swf资源是以二进制形式保存的,一但加入就不能再通过资源视图对其进行编辑了。

  在使用swf资源前首先要将其动态从应用程序中释放到文件中才可对资源做进一步的使用。可先通过宏makeintresource()将资源标识号idr_swf转换成字符串name,再分别通过findresource()、loadresource()函数查找、装载该资源到内存:

cstring type="swf";
hrsrc res=findresource (null,name,type);
hglobal gl=loadresource (null,res);

  当资源加载到内存后,还要通过对资源内存的锁定来返回指向资源内存的地址的指针,并籍此实现资源从内存到磁盘的保存,至于存盘的操作则由文件函数createfile()、和writefile()来完成:

lpvoid lp=lockresource(gl); //返回指向资源内存的地址的指针。
cstring filename="temp.swf"; //保存的临时文件名
// create_always为不管文件存不存在都产生新文件。
fp= createfile(filename ,generic_write,0,null,create_always,0,null);
dword a;
//sizeofresource 得到资源文件的大小
if (!writefile (fp,lp,sizeofresource (null,res),&a,null))
return false;
closehandle (fp); //关闭句柄
freeresource (gl); //释放内存

  通过上述代码,可将swf资源从应用程序中提取并释放到临时文件temp.swf中,在此后只对此临时文件操作,与程序内嵌资源无关。

  flash动画的播放

  swf格式的flash动画通常主要应用在网页上,也就是说ie浏览器本身可以支持flash动画的播放。这样就不必再单独编写用于播放swf文件的代码,从而大大减少编程的工作量。在vc ++ 6.0中新增了一个从cview派生的、用于处理网页的视类chtmlview,由于该类是以internet explorer为后台支持,因此在创建工程时只需在最后一步指定视类从chtmlview派生就可以使程序不编一行代码而具备ie浏览器的网页显示能力。

  程序刚生成的时候缺省的连接主页是为微软公司的主页,需要对此修改,使程序在执行时立即显示刚才提取出来的flash临时文件temp.swf。显示缺省主页的代码是在视类的初始化函数中进行的:

void cembedmoduleview::oninitialupdate()
{
chtmlview::oninitialupdate();
navigate2(_t("http://www.microsoft.com"),null,null);
}

  显然要将navigate2()函数的第一个参数改成temp.swf的存放路径。刚才在释放资源到文件时并没有指定绝对路径,因此释放出来的资源文件应当和应用程序处于同一目录。但是在此处如果不写明绝对路径是无法显示该临时文件的。获取该临时文件的绝对路径可用如下方法实现:先获取应用程序本身的绝对路径,然后去处应用程序全名(程序名和扩展名)此时得到的是应用程序和临时文件所处文件夹的路径,最后只需在此基础上加上临时文件的文件名temp.swf即可得到临时文件的全路径。下面是实现的主要代码:
 

[1] [2] 下一页


Tag: Flash



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。