现在的位置: 首页 > 综合 > 正文

MFC如何调用Flash控件

2013年12月05日 ⁄ 综合 ⁄ 共 2287字 ⁄ 字号 评论关闭

新项目中需要在mfc框架中播放swf,因此决定使用flash控件:
第一步:在本机安装flash10
Flash activex控件一般安装在用户系统目录下:C:\WINDOWS\system32\Macromed\Flash\
其中大版本号用数字表示,如9,10,11等,小版本号用小写字母表示,如a, b, c, d, e。如最新稳定版本为:Flash10e.ocx。

第二步:通过regsvr32.exe注册flash控件 Flash10e.ocx
在命令行中输入:regsvr32 C:\WINDOWS\system32\Macromed\Flash\Flash10e.ocx 注册该控件(注册之后就可以在项目中进行控件添加了)
注销控件的命令行为 regsvr32 /u C:\WINDOWS\system32\Macromed\Flash\Flash10e.ocx

第三步:注册完毕后,进入MFC项目,增加flash控件:
就是shockwave flash object控件。“建立对话框应用程序后,在主菜单里选择“工程->添加工程->components and controls”菜单选项,这时会弹出一个components and controls gallery文件选择对话框,里面有两个文件夹,一个是registered activex controls,一个是visual c++ components。选择第一文件夹后会出现一系列系统上已注册过的activex控件。在里面选择shockwave flash object,点击insert将它插入工程。因为在vc中插入工程的控件要通过一个类来操作,所以这时vc会提示你为这个控件指定一个类名,可以使用默认的类名就行了。插入后vc会自动把这个类加入工程里面。”

第四步:生成一个该控件的对象。
将shockwave flash object控件成功插入自己的工程后,在vc对话框编辑器的controls面板上就会多出图标,这个图标就是刚加入的控件的图标了。呵,这样接下来怎么用就再清楚不过了吧。和使用BUTTON、EDIT等其它windows控件一样,把它拉到对话框上,给它关联一个对象,对象的类就是我们刚才插入控件的时候所产生的类。我们可以使用这个类的成员函数来操纵这个对象,来进行flash动画的控制以及和自己的程序进行交互等操作了。这里假设关联的对象名为:m_FlashPlayer。

第五步:使用成员函数LoadMovie和Play来导入并播放动画。
m_FlashPlayer.LoadMovie(0, strMovieUrl);该函数用来将动画导入程序中,strMovieUrl为要播放的flash路径,要用绝对路径。 m_FlashPlayer.Play();调用该函数开始播放动画。在初始化对话框的函数里面加入这两个函数调用即可。
  怎么样,现在运行程序,看到flash嵌入到你的程序里面了吧。还有几个常用的函数可以用来控制动画的播放,如GotoFrame(long FrameNum)可以转到FrameNum侦播放(侦数从0开始),StopPlay()可以停止播放。。。,还有很多,可以自己试试^_^。

上面的说明,已经能在MFC中实现播放flash了,但是实现交互还是不行。
实现与flash交互,有两种方法,1:模拟鼠标点击事件,就是控制鼠标去点击flash(我同学说他睡觉时想到的,而且真的能实现,服了!) 2、是要flash提供接口,这就需要有flash的源码,然后自己修改,增加外部函数接口。以下来自百度知道,照里边做,就可以实现外部接口:
MFC可以直接设置和得到flash中的变量。调用控件的GetVariable方法和SetVariable方法现。
想让flash主动往MFC传内容并且让MFC程序响应,可以在flash中调用fscommand函数,把内容传出去。此时MFC会收到控件的FSCommand事件和内容,就可以用MFC处理了。
想让MFC主动往flash传内容并且让flash响应,用控件的CallFunction方法。
想用这种方法需要先干一些事情:
在FLASH中,要用ExternalInterface.addCallback把能被外部调用的函数注册一下,例如:
import flash.external.ExternalInterface;
ExternalInterface.addCallback("theFunctionToCall", null, theFunctionToCall);
function theFunctionToCall()
{
//...
}
在MFC中,调用CallFunction方法,传入一个比较复杂的字符串,描述了要调用的函数的名称、参数等等,以XML的形式呈现。详情参考FLASH帮助的“外部 API 的 XML 格式”一文。
详情可以参考FLASH帮助里的“使用 ExternalInterface 类”的文章。
//--------------------------------------------------------------------------------

注意,此处CallFunction传递的参数为XML格式,如下:
m_flash.CallFunction(_T("<invoke name=\"FullScreen\" returntype=\"xml\">\<arguments></arguments>\</invoke>"));
FullScreen为flash里边的外部函数接口,此处并无参数,且无返回类型

抱歉!评论已关闭.