首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 嵌入 Flash 動畫並實現雙向互動

     編輯:VC 教學

前言

Flash 動畫以其豐富的視覺效果與互動性,曾是網頁與桌面應用打造酷炫介面的首選。在 VC++ 6.0 中,透過 Shockwave Flash Object ActiveX 控制項,不僅能嵌入播放 .swf 動畫,更能利用 FSCommand 機制與 SetVariable/GetVariable 實現 C++ 與 ActionScript 的雙向通訊。本文完整記錄嵌入流程、播放控制與互動實作細節。

一、嵌入 Flash 控制項

  1. 確認系統已安裝 Flash Player(會自動註冊 Flash.ocx 或 swflash.ocx)。
  2. 建立 MFC 對話方塊專案 PlayFlash。
  3. 選單 Project → Add To Project → Components and Controls → Registered ActiveX Controls,選取 Shockwave Flash Object 插入,接受預設類別名稱(如 CShockwaveFlash)。
  4. 在對話方塊編輯器工具箱找到該控制項圖示,拖曳至對話方塊,利用 ClassWizard 關聯變數 m_FlashPlayer。

二、載入與播放動畫

在 OnInitDialog() 中初始化:

BOOL CPlayFlashDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    // 使用絕對路徑
    CString strPath = _T("D:\\Demo\\animation.swf");
    m_FlashPlayer.LoadMovie(0, strPath); // 第 0 層
    m_FlashPlayer.Play();
    return TRUE;
}

常用播放控制函數:

  • StopPlay():停止
  • GotoFrame(long frameNum):跳至指定幀(從 0 起算)
  • Rewind():倒帶至第一幀
  • SetZoom(ZoomMode):設定縮放模式

三、C++ 接收 Flash 發送的 FSCommand

1. Flash 端 ActionScript(AS2 範例)

// 按鈕元件動作
on (release) {
    fscommand("btn", "enter");  // 命令: "btn", 參數: "enter"
}
on (release) {
    fscommand("quit", "");      // 僅命令,無參數
}

2. VC++ 端訊息映射

在 ClassWizard 的 Message Maps 分頁,選擇控制項 ID(如 IDC_SHOCKWAVEFLASH1),新增 FSCommand 通知處理函數:

void CPlayFlashDlg::OnFSCommandShockwaveflash1(LPCTSTR command, LPCTSTR args)
{
    if (_tcscmp(command, _T("btn")) == 0)
    {
        if (_tcscmp(args, _T("enter")) == 0)
            AfxMessageBox(_T("歡迎進入系統!"));
    }
    else if (_tcscmp(command, _T("quit")) == 0)
    {
        AfxMessageBox(_T("您選擇了退出!"));
        OnCancel();
    }
}

四、雙向變數交換:SetVariable / GetVariable

Flash 動畫中定義變數 userName,C++ 可動態讀寫:

// C++ 寫入變數給 Flash
m_FlashPlayer.SetVariable(_T("userName"), _T("張三"));

// C++ 讀取 Flash 變數
CString user = m_FlashPlayer.GetVariable(_T("userName"));
AfxMessageBox(_T("Flash 中的 userName: ") + user);

Flash 端對應 ActionScript:

// 讀取 C++ 設定的值
trace("userName = " + userName);
// 修改值讓 C++ 讀取
userName = "李四";

五、常見問題與技巧

  • 路徑必須為絕對路徑,相對路徑在發布時易失效。
  • LoadMovie 的第一個參數為層級,主動畫通常用 0;若需疊加多個 SWF,可用 1、2…
  • 若 FSCommand 無反應,檢查 Flash 發佈設定的 Script 版本(AS2/AS3 差異大),且控制項需設 AllowScriptAccess="always"。
  • VC++ 6.0 若找不到控制項,請至 Adobe 官網下載 Flash Player ActiveX 版安裝。

六、結語

Shockwave Flash Object 為 VC++ 應用注入了豐富的動態視覺與互動能力。掌握 LoadMovie/Play 控制播放、FSCommand 接收事件、SetVariable/GetVariable 同步資料三大核心,即可打造媲美網頁級的桌面互動介面。雖然 Flash 已走入歷史,但此架構思想(宿主容器與插件雙向通訊)在現代 WebView2、CEF 嵌入技術中依然適用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved