加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flash与C#通信

发布时间:2020-12-15 17:51:01 所属栏目:百科 来源:网络整理
导读:1.? ? ? ? ? ? ?注册控件 首先要插入Flash就必须使用Flash控件,在工具栏右键选择“选择项…”,然后在“COM组件”面板下点击“浏览”按钮,在本机电脑C:WINDOWSsystem32MacromedFlash目录里选择Flash10x.ocx(也有可能是Flash10v.ocx或flash10p.ocx)

1.???????注册控件

首先要插入Flash就必须使用Flash控件,在工具栏右键选择“选择项…”,然后在“COM组件”面板下点击“浏览”按钮,在本机电脑C:WINDOWSsystem32MacromedFlash目录里选择Flash10x.ocx(也有可能是Flash10v.ocx或flash10p.ocx),然后点击确定就可以了。在CMD里面输入如下:
regsvr32 C:WINDOWSsystem32MacromedFlashFlash10x.ocx
系统会提示注册成功。

2.???????控件属性

打开VS,然后工具栏中选择的Flash控件Shockwave Flash Object拖到窗体中,
注意到该控件主要有几个属性:
Name属性,这个是所有对象都会有的。
Menu属性,这个是Flash菜单项,默认值为true,也就是右键的时候会出现完整的Flash菜单,如果设置为False,则只出现最简单的菜单(设置与关于)。
Move属性,这个属性是用来指定要播放的Flash文件的。
Playing属性,指定是否装在影片之后马上播放。
Quality属性,设置影片的质量。
Scale Mode属性,设置影片的缩放模式。
Visible属性,设置影片控件的可视与否。

3.???????隐藏Flash控件右键菜单

这个方法主要用到继承和重写等面向对象的核心内容。
首先声明一个类,让它去继承AxShockwaveFlashObjects.AxShockwaveFlash,该类是实例化Flash控件生成的类。该类中包含各种Flash的事件和属性,在这里我们只对右键菜单的事件感兴趣,因此我们去重写该事件。
类的代码如下:

public class FlashRightKey : AxShockwaveFlashObjects.AxShockwaveFlash
????{
????????//定义一个公共类FlashRightKey(类名自己定义)来继承AxShockwaveFlashObjects.AxShockwaveFlash(在实例化Shockwave Flash Object控件后生成)类

????????protected override void WndProc(ref Message m) //重载WndProc方法(此方法即消息处理机制)
????????{
????????????if (m.Msg == 0X0204) //0×0204即鼠标右键的16进制编码
????????????????return; //返回并不输出
????????????else
????????????????base.WndProc(ref m); //如果不是右键的话则返回正常的信息
????????}
}

类写好了,我们要在Flash控件里面使用它,必须在实例化Flash控件的时候用如下代码(写在Flash.Designer.cs文件相应的地方):

private FlashRightKey RollFlash;

this.RollFalsh = new Namespace.FlashRightKey();

4.???????C#与Flash控件通信

通信数据采用XML格式。

C#代码:

????绑定Flash控件

private void FlashTest_Load(object sender,EventArgs e)

{

Flash.Movie = Application.StartupPath + @"Test.swf";

}

调用flash提供的外部接口

private void CallFunction(string funName,string flag)

Flash.CallFunction(EncodeXML(funName,flag));

}??

将数据转换成XML格式

private string EncodeXML(string funName,240)"> StringBuilder sb = new StringBuilder();

XmlTextWriter xw = new XmlTextWriter(new StringWriter(sb));

?

xw.WriteStartElement("invoke");

xw.WriteAttributeString("name",funName);

xw.WriteAttributeString("returntype","xml");

xw.WriteStartElement("arguments");

xw.WriteStartElement("string");

xw.WriteString(flag);

xw.WriteEndElement();

xw.Flush();

xw.Close();

return sb.ToString();

}?

执行动画开始操作

private void Btn_Start_Click(object sender,240)"> CallFunction("Call","001");

}

?执行动画结束操作

private void Btn_End_Click(object sender,"002");

???????

接收Flash发送过来的数据

private void Flash_FlashCall(object sender,AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)

XmlDocument xd = new XmlDocument();

xd.LoadXml(e.request);

XmlNodeList xl = xd.getElementsByTagName_r("arguments");

MessageBox.Show(xl[0].FirstChild.InnerText);

Flash代码:

???package {

?????????import flash.display.*;

?????????import flash.text.*;

?????????import flash.events.MouseEvent;

?????????import flash.external.ExternalInterface;

?????????public class Test extends flash.display.MovieClip {

???????????????????public function Test() {

????????????????????????????ExternalInterface.addCallback("Call",Call);//外部接口,供C#调用

????????????????????????????btn.addEventListener(MouseEvent.CLICK,SendCsharp);

???????????????????}

???????????????????//供C#窗体调用的方法

???????????????????private function Call(flag:String):void {

????????????????????????????switch (flag) {

?????????????????????????????????????case '001' :

???????????????????????????????????????????????df.gotoAndPlay(2);//控制动画开始

???????????????????????????????????????????????break;

?????????????????????????????????????case '002' :

???????????????????????????????????????????????df.gotoAndStop(1);//控制动画结束

?????????????????????????????????????default :

????????????????????????????}

???????????????????//像c#窗体发送信息

???????????????????public function SendCsharp(e:MouseEvent):void {

????????????????????????????ExternalInterface.call("Send","Hello World!");//外部接口,向C#传递数据

?????????}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读