王朝网络
分享
 
 
 

Visual C++实现Flash动画播放

王朝vc·作者佚名  2008-06-01
宽屏版  字体: |||超大  

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

引言

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

嵌资源的动态释放

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即可得到临时文件的全路径。下面是实现的主要代码:

//获取应用程序的全路径

char exeFullPath[MAX_PATH];

GetModuleFileName(NULL,exeFullPath,MAX_PATH);

//将其格式化为字符串

m_TempFile.Format("%s",exeFullPath);

//去掉应用程序的全名(15为应用程序文件全名的长度)

exeFullPath[m_TempFile.GetLength()-15]='\0';

//得到应用程序所在路径

m_TempFile.Format("%s",exeFullPath);

//得到临时文件的全路径

m_TempFile+="Temp.swf";

最后将得到的临时文件的全路径m_TempFile作为参数传递给Navigate2()即可在程序运行时把Flash动画作为主页而显示(如下图所示)。

由于临时文件Temp.swf是在程序运行过程中从应用程序的资源中提取出来的,因此在程序退出之前需要将其删除。一般是在消息WM_DESTORY的响应函数里通过DeleteFile()函数来加以实现的。

小结

本文通过对CHtmlView和内嵌资源的动态释放实现了Flash动画在VC程序中的播放,并对资源的动态释放作了较为清楚的描述。通过类似的方法,可以将动态链接库、HTML文件等程序模块作为资源嵌入其中,在使用时再动态释放到临时文件,这样可有效避免文件模块过多时的杂乱以及程序模块丢失导致程序非正常运行等情况的发生。本文所述程序在Windows 98下,由Microsoft Visual C++ 6.0编译通过。Flash动画由 Macromedia Flash 5.0制作,所需浏览器支持为Internet Explorer 6.0。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有