使用Flash和C# WinForm配合打造界面漂亮的應(yīng)用程序(摘要)作者:不詳 文章來源:互聯(lián)網(wǎng) 點(diǎn)擊數(shù):986
更新時(shí)間:2007-08-20 13:27:28
責(zé)任編輯: 天之驕子
由于之前一陣公司一個(gè)項(xiàng)目提出的需求,自己也想進(jìn)行這方面的嘗試,我對如何使用 Flash 來做 WinForm 程序的界面產(chǎn)生了興趣,于是學(xué)習(xí)了一些資料,摘要于此。 要在 WinForm 中使用 Flash,通常需要用到 Shockwave Flash Object 這個(gè) COM 組件。 具體步驟如下: Movie: Flash 的存放地址 接下來你可以設(shè)置其他一些屬性,使得 Flash 的窗口最大化,隱藏掉其宿主程序的 C# WinForm 窗體。 在 Flash 的 ActionScript 中,可以通過 FSCommand 函數(shù)與 hosting app 通信,該函數(shù)有兩個(gè)參數(shù),分別是: command: 命令名稱 例子: on(press){
fscommand("Circule", "Green"); } 在 C# 中,處理 Flash 對象的 FSCommand 事件即可。 e.command -> Flash 中調(diào)用 FSCommand 時(shí)的 command 參數(shù); 在 C# 中往 Flash 傳遞數(shù)值用 SetVariable 方法: axShockwaveFlash1.SetVariable("variablename", "valueasstring");
對應(yīng)的,有一個(gè) GetVariable 方法可以獲得 Flash 中的變量值。 FSCommand 的參數(shù)只能傳遞一個(gè),所以其功能存在一定的局限性。在你需要傳遞多個(gè)參數(shù)的時(shí)候,則需要在調(diào)用方用字符串拼接各個(gè)參數(shù)值,然后在被調(diào)用方重新解開。這種辦法使得復(fù)雜的傳值顯得很丑陋。 不過,除了 FSCommand 外,我們還有另一種辦法和 Flash 通信,就是使用 Flash Player 8 External API. 使 用 External API,可以實(shí)現(xiàn) ActionScript 和 C# 的雙向調(diào)用。其好處就在于每次調(diào)用時(shí)的參數(shù)和返回值都通過一個(gè) XML 文檔來傳遞,這樣就比 FSCommand 功能完善了很多。當(dāng)然在 C# 中,我們也需要聲明一下外部函數(shù)實(shí)現(xiàn)的對應(yīng)關(guān)系。 代碼片段: import Flash.external.ExternalInterface;
ExternalInterface.addCallback("loadAndPlayVideo", null, loadAndPlayVideo); C# 中調(diào)用 Flash 的情形: FlashPlayer.CallFunction("<invoke" +
" name=\"loadAndPlayVideo\" returntype=\"XML\"> <arguments><string>" + fileDialog.FileName + "</string></arguments></invoke>"); 在 ActionScript 中調(diào)用 C# 函數(shù): ExternalInterface.call("ResizePlayer",
videoPlayer.metadata.width, videoPlayer.metadata.height); 在 C# 中聲明被 Flash 調(diào)用的函數(shù): FlashPlayer.FlashCall +=
new _IShockwaveFlashEvents_FlashCallEventHandler(FlashPlayer_FlashCall); 在此,我們可以看到 C# 和 Flash 進(jìn)行通信還是相當(dāng)方便的。 除此之外,我順便搜索到其他一些和 Flash 有關(guān)的不錯(cuò)的文章: Flash and .NET with FlashRemoting Multiple File Upload With Progress Bar Using Flash and ASP.NET Flash GUI for your exe using minimalistic approach (C++) |
|