zoukankan      html  css  js  c++  java
  • 使用 Flash 和 C# WinForm 配合打造界面漂亮的应用程序(摘要)

    (木野狐 2006-10-29)

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

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

    flash_cs.jpg

    要在 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

  • 相关阅读:
    Python基础语法 第2节课(数据类型转换、运算符、字符串)
    python基础语法 第5节课 ( if 、 for )
    python基础语法 第4节课 (字典 元组 集合)
    Python基础语法 第3节课 (列表)
    A. Peter and Snow Blower 解析(思維、幾何)
    C. Dima and Salad 解析(思維、DP)
    D. Serval and Rooted Tree (樹狀DP)
    C2. Balanced Removals (Harder) (幾何、思維)
    B. Two Fairs 解析(思維、DFS、組合)
    D. Bash and a Tough Math Puzzle 解析(線段樹、數論)
  • 原文地址:https://www.cnblogs.com/RChen/p/csharp_and_flash.html
Copyright © 2011-2022 走看看