zoukankan      html  css  js  c++  java
  • [No000070]Flash与C#通信

    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();

    1. 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, string flag)

      {

      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.WriteEndElement();

      xw.WriteEndElement();

       

      xw.Flush();

      xw.Close();

       

      return sb.ToString();

      }

      执行动画开始操作

      private void Btn_Start_Click(object sender, EventArgs e)

      {

      CallFunction("Call", "001");

      }

      执行动画结束操作

      private void Btn_End_Click(object sender, EventArgs e)

      {

      CallFunction("Call", "002");

      }

       

      接收Flash发送过来的数据

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

      {

      XmlDocument xd = new XmlDocument();

      xd.LoadXml(e.request);

      XmlNodeList xl = xd.GetElementsByTagName("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);//控制动画结束

                        break;

                    default :

                        break;

                }

            }

            //像c#窗体发送信息

            public function SendCsharp(e:MouseEvent):void {

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

            }

        }

    }

     

     

  • 相关阅读:
    登录的验证码
    分页效果
    弹出新窗口
    添加软键盘
    左侧菜单
    制作导航
    DEV第三方控件的GalleryControl控件
    div悬浮在屏幕的中间及点击按钮关闭弹出框
    鼠标经过图片时向前突出并放大图片
    UIImageView实现加载网络gif图片
  • 原文地址:https://www.cnblogs.com/Chary/p/No000070.html
Copyright © 2011-2022 走看看