2024年6月13日发(作者:)

下面测试于:vs2008

1.选择“工具箱”,单击鼠标右键,在弹出的快捷菜单中选择“选择项”。

2.弹出“选择工具箱项”对话框,选择“COM组件”选项卡。

3.

COM

组件列表,单击

[

浏览

]

按钮,在对话框中选择

"//system32/Macromed/Flash/"。

在工具箱的容器面板里有个

MacroMediaFlashFactoryObject

而且自动添加了引用AxShockwaveFlashObjects,ShockwaveFlashObjects

如果工具箱中已经有了,可以删除重新添加,以便自动添加引用。

在放入窗体中时报错“未能导入ActiveX控件。请确保他已正确注册”.

所以手动添加如下代码:

(1)在中的最下方与其他定义控件语句放一块定义:

kwaveFlashFlashBox;

(2)在在中privatevoidInitializeComponent()方法中添加2条

语句:

ox=kwaveFlash();

(ox);

接下来就可以在

Form[

设计

]

中可视化编程了,以上语句也会自动规格化。

由于之前一阵公司一个项目提出的需求,自己也想进行这方面的尝试,我对如何使

Flash

来做

WinForm

程序的界面产生了兴趣,于是学习了一些资料,摘要于此。

下图是我做的一个demo程序的界面:

要在WinForm中使用Flash,通常需要用到ShockwaveFlashObject这个

COM组件。

(/csharp/)

(/useritems/)

具体步骤如下:

首先添加对COM组件ShockwaveFlashObject的引用,将该组件拖到窗体上之

后,可以设置如下关键属性:

Movie:flash的存放地址

EmbedMovie:

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

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

C#WinForm

窗体。

在Flash的ActionScript中,可以通过FSCommand函数与hostingapp通信,

该函数有两个参数,分别是:

command:

命令名称

parameters:

参数

例子:

on(press){

fscommand("Circule","Green");

}

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

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

d->flash中调用FSCommand时的command参数;

->flash

中调用

FSCommand

时的

arguments

参数。

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

iable("variablename","valueasstring");

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

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

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

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

不过,除了

FSCommand

外,我们还有另一种办法和

flash

通信,就是使用

Flash

Player8ExternalAPI.

(/cs/media/)

使用ExternalAPI,可以实现ActionScript和C#的双向调用。其好处就在于每

次调用时的参数和返回值都通过一个

xml

文档来传递,这样就比

FSCommand

能完善了很多。当然在

C#

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

代码片段:

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

alInterface;

lback("loadAndPlayVideo",null,loadAndPlayVideo);

C#中调用Flash的情形:

nction("

"name=/"loadAndPlayVideo/"returntype=/"xml/">

"+me+

"");

ActionScript

中调用

C#

函数:

("ResizePlayer",

,);

C#

中声明被

Flash

调用的函数:

all+=

new_IShockwaveFlashEvents_FlashCallEventHandler(flashPlayer_FlashCall);

在此,我们可以看到

C#

Flash

进行通信还是相当方便的。

除此之外,我顺便搜索到其他一些和

flash

有关的不错的文章:

hFlashRemoting

/aspnet/

/aspnet/

FlashGUIforyourexeusingminimalisticapproach(C++)

/useritems/

主程序端(C#winform):

vie(0,ath+"/");

nction("

returntype=/"xml/">Helloworld");

flash端:

①添加一个文本框text_txt以显示效果或用trace("call:"+result+"")

②ActionScript代码为,其中result只是参数,而主程序端使用AS的函数时不需要关心参数名,只

有知道有参数个数,或参数位置

functiontest(result:Object):Void{

test_=result;

}

lback("test",this,test);