使用Flash和CWinForm配合打造界面漂亮的应用程序.docx

上传人:b****2 文档编号:1612390 上传时间:2023-05-01 格式:DOCX 页数:14 大小:24.33KB
下载 相关 举报
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第1页
第1页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第2页
第2页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第3页
第3页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第4页
第4页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第5页
第5页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第6页
第6页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第7页
第7页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第8页
第8页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第9页
第9页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第10页
第10页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第11页
第11页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第12页
第12页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第13页
第13页 / 共14页
使用Flash和CWinForm配合打造界面漂亮的应用程序.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

使用Flash和CWinForm配合打造界面漂亮的应用程序.docx

《使用Flash和CWinForm配合打造界面漂亮的应用程序.docx》由会员分享,可在线阅读,更多相关《使用Flash和CWinForm配合打造界面漂亮的应用程序.docx(14页珍藏版)》请在冰点文库上搜索。

使用Flash和CWinForm配合打造界面漂亮的应用程序.docx

使用Flash和CWinForm配合打造界面漂亮的应用程序

使用Flash和C#WinForm配合打造界面漂亮的应用程序

由于之前一阵公司一个项目提出的需求,自己也想进行这方面的尝试,我对如何使用Flash来做WinForm程序的界面产生了兴趣,于是学习了一些资料,摘要于此。

要在WinForm中使用Flash,通常需要用到ShockwaveFlashObject这个COM组件。

(/fscommand.asp)

(/FlashDBInteract.asp)

具体步骤如下:

首先添加对COM组件ShockwaveFlashObject的引用,将该组件拖到窗体上之后,可以设置如下关键属性:

Movie:

Flash的存放地址

EmbedMovie:

是否嵌入到程序的资源中。

接下来你可以设置其他一些属性,使得Flash的窗口最大化,隐藏掉其宿主程序的C#WinForm窗体。

在Flash的ActionScript中,可以通过FSCommand函数与hostingapp通信,该函数有两个参数,分别是:

command:

命令名称

parameters:

参数

例子:

on(press){

    fscommand("Circule", "Green");

}

在C#中,处理Flash对象的FSCommand事件即可。

如果该事件处理函数的EventArgs为e,则有如下对应关系:

mand->Flash中调用FSCommand时的command参数;

e.args->Flash中调用FSCommand时的arguments参数。

在C#中往Flash传递数值用SetVariable方法:

axShockwaveFlash1.SetVariable("variablename", "valueasstring");

对应的,有一个GetVariable方法可以获得Flash中的变量值。

FSCommand的参数只能传递一个,所以其功能存在一定的局限性。

在你需要传递多个参数的时候,则需要在调用方用字符串拼接各个参数值,然后在被调用方重新解开。

这种办法使得复杂的传值显得很丑陋。

不过,除了FSCommand外,我们还有另一种办法和Flash通信,就是使用FlashPlayer8ExternalAPI.

(/media/flashexternalapi.asp)

使用ExternalAPI,可以实现ActionScript和C#的双向调用。

其好处就在于每次调用时的参数和返回值都通过一个XML文档来传递,这样就比FSCommand功能完善了很多。

当然在C#中,我们也需要声明一下外部函数实现的对应关系。

c#调用ActionScript中的函数

代码片段:

FlashActionScript中声明提供给hostingapplication调用的回调函数:

import ;

functionloadAndPlayVideo(uri:

String):

Void

{

videoPlayer.contentPath=uri;

}

ExternalInterface.addCallback("loadAndPlayVideo", null, loadAndPlayVideo);

/*************************************************************************************************

函数解释

****************************************************************************************

publicstaticaddCallback(methodName:

String,instance:

Object,method:

Function):

Boolean

将ActionScript方法注册为可从容器调用。

成功调用addCallBack()后,容器中的JavaScript或ActiveX代码可以调用在FlashPlayer中注册的函数。

可用性:

ActionScript1.0;FlashPlayer8

参数

methodName:

String-从JavaScript调用ActionScript函数时可使用的名称。

此名称不必与ActionScript方法的实际名称匹配。

instance:

Object-this在该方法中被解析成的对象。

此对象不一定是在其上可找到该方法的对象,您可以指定任何对象(或null)。

method:

Function-要从JavaScript调用的ActionScript方法。

返回

true-如果调用成功,则返回Boolean。

如果调用由于下列原因而失败,则返回false:

实例不可用、遇到了安全限制、没有这种函数对象、发生了递归或类似情况。

返回值为false还可能表示包含环境属于调用代码无权访问的安全沙箱。

您可以在包含环境的HTML中为allowScriptAccessOBJECT标签或EMBED标签设置一个合适的值,以解决此问题。

示例

下面的示例将goToMacromedia()函数注册为可使用名称goHome从容器调用。

importflash.external.*;

varmethodName:

String="goHome";

varinstance:

Object=null;

varmethod:

Function=goToMacromedia;

varwasSuccessful:

Boolean=ExternalInterface.addCallback(methodName,instance,method);

vartxtField:

TextField=this.createTextField("txtField",this.getNextHighestDepth(),0,0,200,50);

txtField.border=true;

txtField.text=wasSuccessful.toString();

functiongoToMacromedia(){

txtField.text="";

getURL("","_self");

}

为了使上一示例能够正常运行,应复制以下代码并将其粘贴到包含HTML页中。

此代码依赖OBJECT标签的id属性和EMBED标签的name属性以获得值externalInterfaceExample。

由于InternetExplorer和Netscape以不同方式引用movie对象,所以函数thisMovie根据浏览器返回相应的语法。

除非服务器上承载HTML页,否则您的浏览器可能会出现安全警告。

注意:

请避免使用访问插件对象的其它方法(如document.getElementById("pluginName")或,因为这些其它方法在所有浏览器上的运行不一致。

详细信息参考Flash8.0的addCallback帮助

****************************************************************************************

*******************************************************************************************************/

C#中调用Flash的情形:

privateAxShockwaveFlashflashPlayer;

publicFLVPlayer()

{

//Errorhandlingremovedforthesakeofcondensingthecode

flashPlayer.LoadMovie(0,Application.StartupPath+"\\player.swf");

}

fileDialog=newOpenFileDialog();

fileDialog.Filter="*.flv|*.flv";

fileDialog.Title="SelectaFlashVideofile...";

fileDialog.Multiselect=false;

fileDialog.RestoreDirectory=true;

if(fileDialog.ShowDialog()==DialogResult.OK)

{

flashPlayer.CallFunction("

"name=\"loadAndPlayVideo\"returntype=\"xml\">

"+fileDialog.FileName+

"");

}

//如果不用传递参数,且返回值是“123456“的字符串的代码如下:

stringstr=flashPlayer.CallFunction("");

MessageBox.Show(str);//显示123456

如果返回值是数值123,那么MessageBox.Show(str);//显示123

/****************************************************************

C#也可以通过

axShockwaveFlash.CallFunction(stringrequest)

axShockwaveFlash.CallFunction(flash中的方法名,参数,[参数,...]);

调用Flash中的方法。

具体实现是通过传递XML实现的,具体XML的形式如同:

//MethodName是要调用的Flash内的函数

11//传递给MethodName函数一个数值类型的参数

ssss//传递给MethodName函数一个字符串类型的参数

...

Sinceversion5,AdobeFlash就有了XMLSocket类,它是一种灵活的机制对于发送和获取数据通过TCP/IP,Thisclasshastheoneminordrawbackofrequiringthatalldatabeconvertedtoanull-terminatedstringfortransport。

InFlash9,AdobeintroducedtheSocketclass,whichallowsforbinaryortextdataofarbitraryformatting.BothoftheseclassesarequitesuitableforourbidirectionalHIDdemonstrationofaUSBknobwithanLED.

***************************************************************************************************/

在ActionScript中调用C#函数:

在flash中通过ExternalInterface.call()调用c#函数ResizePlayer,并触发c#中的FlashCall事件;

ExternalInterface.call("ResizePlayer", 

      , ;

/***********************************

publicstaticfunctioncall(functionName:

String,...arguments):

*

调用由FlashPlayer容器公开的函数,不传递参数或传递多个参数。

如果所需的函数不可用,则调用返回null;否则,将返回由该函数提供的值。

不允许使用递归;递归调用会生成null响应。

如果容器是HTML页,则此方法在

相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2