zoukankan      html  css  js  c++  java
  • C# WinForm 与Flash 交互操作

    要在 WinForm 中使用 Flash,通常需要用到 Shockwave Flash Object 这个 COM 组件。
    (http://www.codeproject.com/csharp/fscommand.asp)
    (http://www.codeproject.com/useritems/FlashDBInteract.asp)

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

    Movie: flash 的存放地址
    EmbedMovie: 是否嵌入到程序的资源中。

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

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

    command: 命令名称
    parameters: 参数

    例子:

    on(press){
         fscommand("Circule", "Green");
    }

    在 C# 中,处理 flash 对象的 FSCommand 事件即可。
    如果该事件处理函数的 EventArgs 为 e, 则有如下对应关系:

    e.command -> flash 中调用 FSCommand 时的 command 参数;
    e.args -> flash 中调用 FSCommand 时的 arguments 参数。

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

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

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

    FSCommand 的参数只能传递一个,所以其功能存在一定的局限性。在你需要传递多个参数的时候,则需要在调用方用字符串拼接各个参数值,然后在被调用方重新解开。这种办法使得复杂的传值显得很丑陋。

    不过,除了 FSCommand 外,我们还有另一种办法和 flash 通信,就是使用 Flash Player 8 External API.
    (http://www.codeproject.com/cs/media/flashexternalapi.asp)

    使用 External API,可以实现 ActionScript 和 C# 的双向调用。其好处就在于每次调用时的参数和返回值都通过一个 xml 文档来传递,这样就比 FSCommand 功能完善了很多。当然在 C# 中,我们也需要声明一下外部函数实现的对应关系。

    代码片段:
    Flash ActionScript 中声明提供给 hosting application 调用的回调函数:

    import flash.external.ExternalInterface;
    ExternalInterface.addCallback("loadAndPlayVideo", null, loadAndPlayVideo);

    C# 中调用 Flash 的情形:

         flashPlayer.CallFunction("<invoke" +
              " name=\"loadAndPlayVideo\" returntype=\"xml\">
              <arguments><string>" + fileDialog.FileName +
              "</string></arguments></invoke>");

    在 ActionScript 中调用 C# 函数:

    ExternalInterface.call("ResizePlayer",
          videoPlayer.metadata.width, videoPlayer.metadata.height);

    在 C# 中声明被 Flash 调用的函数:

    flashPlayer.FlashCall +=
      new _IShockwaveFlashEvents_FlashCallEventHandler(flashPlayer_FlashCall);

    在此,我们可以看到 C# 和 Flash 进行通信还是相当方便的。

     

    除此之外,我顺便搜索到**一些和 flash 有关的不错的文章:

    Flash and .NET with FlashRemoting
    http://www.codeproject.com/aspnet/FlashRemoting.asp

    Multiple File Upload With Progress Bar Using Flash and ASP.NET
    http://www.codeproject.com/aspnet/FlashUpload.asp

    Flash GUI for your exe using minimalistic approach (C++)
    http://www.codeproject.com/useritems/FlashGui.asp

     

    收藏于网络:http://www.rupeng.com/forum/thread-2245-1-1.html

     



    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    旋转数组求最小值
    docker
    php爬虫
    docker,docker-compose 安装
    ReactPHP
    Workerman了解一下
    ubantu 运行.sh 脚本的问题
    ubantu 文件权限 Permission denied
    ubantu 文件属性
    mysql命令行中执行sql的几种方式总结
  • 原文地址:https://www.cnblogs.com/08shiyan/p/1990247.html
Copyright © 2011-2022 走看看