您好,欢迎访问三七文档
MFC与AS3交互1.准备工作第一步:下载并安装AdobeFlashPlayer。从官方网站()上下载最新的FlashPlayer,并安装。对于Windows32位系统,其默认安装目录为:C:\WINDOWS\system32\Macromed\Flash\对于64位系统默认安装目录为:C:\Windows\SysWOW64\Macromed\Flash。备注:Flash控件的大版本号用数字表示,如9,10,11等;小版本号用小写字母表示,如a,b,c,d,e。比如,我安装的版本为:Flash10l.ocx。第二步:通过regsvr32.exe注册flash控件Flash10l.ocx。从开始菜单中打开运行对话框,并输入:regsvr32C:\Windows\SysWOW64\Macromed\Flash\Flash10l.ocx注册控件之后就可以在项目中进行控件添加了。如果注册成功,有如下提示:注销控件的命令行为:regsvr32/uC:\Windows\SysWOW64\Macromed\Flash\Flash10l.ocx新建MFC项目,添加Flash控件2.建立基于对话框的MFC程序打开VisualStudio2010,新建项目,选择“MFC应用程序”,并将其命名为MFCFlash。在接下来的选型设置中,选择应用程序类型为“基于对话框”,其他可按默认设置。项目建成后,程序默认添加了MFCFlash和MFCFlashDlg的头文件和实现文件,截图如下:3.添加ShockwaveFlashObject类在解决方案管理器中选中项目后在菜单中点“项目”→“添加类”→“ActiveX控件中的MFC类”,打开“从ActiveX控件添加类向导”对话框。选择从“文件”添加类,找到Flash控件的安装位置,即可添加ShockwaveFlash控件,接口选择“IShockwaveFlash”,以生成CShockwaveFlash类(类名称可以修改)。插入后,VC会自动把这个类加入工程中。4.添加ShockwaveFlashObject控件选择主对话框——IDD_MFCFLASH_DIALOG,在其上点右键,选择“插入ActiveX控件”,从弹出的列表中选择“ShockwaveFlashObject”并单击“确定”。在Flash控件上点右键,然后选择“添加变量”,设定“变量名”为m_FlashPlayer。可再次在Flash控件上点右键,然后选择“属性”,将其ID改为IDC_SHOCKWAVEFLASH。5.使用成员函数LoadMovie和Play来导入并播放动画在MFCFlashDlg.cpp文件中,找到CMFCFlashDlg::OnInitDialog()函数,在“returnTRUE”之前添加代码:CStringstr=_T(E:\\VS\\Flash\\media\\test.swf);m_FlashPlayer.LoadMovie(0,str);m_FlashPlayer.Play();其中m_FlashPlayer.LoadMovie(0,str)用来将动画导入程序中,str为要播放的flash路径,要用绝对路径(注意路径用双斜杠“\\”隔开);m_FlashPlayer.Play()开始播放动画。相对路径转绝对路径:wchar_tszPath[MAX_PATH];memset(szPath,0,sizeof(CHAR)*MAX_PATH);GetCurrentDirectory(MAX_PATH,szPath);StrCat(szPath,_T(\\风扇.swf));现在运行程序,就可以看到flash嵌入到程序里面了。6.实现MFC与Flash的通信1.1.Flash通过FSCommand消息调用MFC第一步:添加消息处理函数。在Flash控件上点右键,然后选择“添加事件处理程序”,在类列表选择“CMFCFlashDlg”,消息类型选择“FSCommand”,则函数处理程序名称自动为“FSCommandShockwaveflash”。它的形式大概是这样子的:voidCMFCFlashDlg::OnFSCommandShockwaveflash(LPCTSTRcommand,LPCTSTRargs);函数有两个参数,就是flash的ActionScript中FSCommand语句中的两个参数。其实并不一定两个参数都用到,flash脚本中可以就使用一个参数,这样这边的函数就只要对第一个参数进行处理就行了。第二步:编写消息处理代码。在刚添加的FSCommand消息处理函数中,对两个参数进行处理。其实就是做字符串比较的操作,根据是什么字符串来判断用户进行了什么操作。voidCPlayFlashDlg::OnFSCommandShockwaveflash1(LPCTSTRcommand,LPCTSTRargs){//TODO:Addyourcontrolnotificationhandlercodehereif(0==strcmp(command,”bt”)){if(0==strcmp(args,”enter”)){MessageBox(“欢迎进入系统!”);}}elseif(0==strcmp(command,”quit”)){MessageBox(“您选择了退出!”);CDialog::OnCancel();}}这只是最简单的处理形式,当然你可以在flash中发送复杂的字符串。1.2.MFC通过CallFunction函数调用Flash第一步:在Flash中注册外部回调函数。在FLASH中,要用ExternalInterface.addCallback把能被外部调用的函数注册,例如:ExternalInterface.addCallback(setAlt,setAlt);functionsetAlt(para:String=3150){alt.text=para;//alt为swf文件中的一个动态文本}第二步:MFC中使用CallFunction函数传入参数。要想让MFC主动往flash传内容并且让flash响应,需用控件的CallFunction方法。在MFC中,调用CallFunction方法,传入一个比较复杂的字符串,描述了要调用的函数的名称、参数等等,以XML的形式呈现。详情参考FLASH帮助的“外部API的XML格式”一文。此处CallFunction传递的参数为XML格式如下:CStringtemp=_T(invokename=\setAlt\returntype=\xml\\argumentsstring3500FT/string/arguments\/invoke);m_FlashPlayer.CallFunction(temp);注意,arguments必须是完整的一行。再次运行程序,可以发现ALT的值已经由3280FT变成了3500FT。shockwaveflashobject控件的相应类是CShockwaveFlash类,该类的常用函数:Play()播放动画;StopPlay()停止动画;IsPlaying()判断动画是否正在播放,返回true或false。GotoFrame(frame_number)跳转到某帧(frame_number+1);TotalFrames()获取动画总帧数;CurrentFrame()回传当前动画所在帧数-1;Rewind()使动画返回第一帧。SetZoomRect(left,top,right,buttom)放大指定区域;Zoom(percent)改变动画大小;Pan(x_position,y_position,unit)使动画在x,y方向上平移。PercentLoaded()返回动画被载入的百分比(0-100);LoadMovie(level_number,path)加载动画。TGotoFrame(movie_clip,frame_number)跳转到movie_clip的指定帧数;TGotoLabel(muvie_clip,label_name)跳转到movie_clip的指定标签;TCurrentFrame(movie_clip)回传movie_clip当前帧-1;TCurrentLabel(movie_clip)回传movie_clip当前标签。TPlay(movie_clip)播放movie_clip;TStopPlay(movie_clip)停止movie_clip的播放。GetVariable(variable_name)获取变量;SetVariable(variable_name,value)变量赋值。TCallFrame(movie_clip,frame_number)call指定帧上的action;TCallLabel(movie_clip,label)call指定标签上的action;TGetProperty(movie_clip,property)获取movie_clip的指定属性。TSetProperty(movie_clip,property,number)设置movie_clip的指定属性。7.FLASH控件的属性和方法1.3.属性语法:AlignModeAsLong说明:对齐方式(与SAlign属性联动).当控件的长宽比例与影片不一致且WMode不为ExactFit时,影片在控件中显示的位置可用该属性调整.属性值与相应的对齐方式:1:左对齐2:右对齐4:顶对齐8:底对齐注意:也可以组合各种对齐方式,就是将这四个基本值组合相加.比如同时左对齐和顶对齐,属性值则设为5.语法:BackgroundColorAsLong说明:影片的背景色.默认的影片背景色为-1.如果影片设置了底色或有图片当作背景,那么看不出来该属性值的改变会有什么影响。注意:颜色值使用RGB格式的颜色值语法:BaseAsString说明:指定用于解决影片中所有相对路径的声明的基地址.当影片与其需要的其他文件不在同一目录中的时候该属性特别有用.如不特别指定,Base的值默认为.,也就是当前影片所在的路径.语法:BGColorAsString说明:影片的背景色.与BackgroundColor不同的是,BGColor是一个六位的十六进制数,每两位分别代表红绿蓝颜色值.如:FFEEAA表示R值为FF,G值为EE,B值为AA.语法:DeviceFontAsBoolean说明:决定是否使用影片内嵌的字体,默认值为False.将该属性值设为True则强制播放器不使用影片中内嵌的字体而使用本地系统字体.语法:EmbedMovieAsBoolean说明:影片是否被存贮到控件所在的容器中.当你已载入一个影片后将该属性设为True,播放影片时就不必再去读取SWF文件了.这样可以使SWF文件镶进程序中,不必再读取文件.但将该属性设为True后,控件的Movie属性就不再接受新的值了.要想播放另一个影片(给Movie属性赋新值),必须先将该属性(EmbedMovie)设为False.语法:FrameNumAsLong说明:影片当前帧的编号(从0开始计数).设置该属性值将使影片停在由FrameNum指定的帧处.注意:不仅可以从中获得当前帧,还可以设置当前帧,即跳转到某帧语法:LoopAsBoolean说明:控制影片是否循环播放.设为True就是循环播放,设为False则只播放一次.语法:MenuAsBoolean说明:是否显示菜单.设为True显示所有菜单,设为False菜单被屏蔽,但仍有一项AboutMacromediaFlashPlayer...,点击后会打开Macromedia的网站.如果你实在不喜欢这个菜单,应该在程序中通过拦截鼠标消息的方法来达到目的.语法:MovieAsString说明:要播放的影片路径(URL).设置该属性为一个SWF文件的URL,当该属性被设置后,控件将自动载入文
本文标题:MFC与AS3交互
链接地址:https://www.777doc.com/doc-2888478 .html