在 VC++ 6.0 時代,利用 ActiveX 控件 Shockwave Flash Object 將 Flash 動畫嵌入 MFC 應用程式,並實現雙向互動,是豐富桌面軟體視覺效果的常用手段。本文詳細記錄從控件註冊、專案配置、動畫播放到 ActionScript 與 C++ 互通的完整流程。
swflash.ocx (Flash 5.0 之前) 或 flash.ocx (5.0 及以上),位於系統目錄。PlayFlash (MFC Dialog-based)。CShockwaveFlash 派生類並加入專案。m_FlashPlayer (類型為生成的包裝類)。OnInitDialog 中呼叫:m_FlashPlayer.LoadMovie(0, _T("C:\\Path\\To\\movie.swf")); // 絕對路徑
m_FlashPlayer.Play();
常用播放控制函數:GotoFrame、StopPlay、Rewind、SetZoom 等,均可直接透過包裝類呼叫。
FSCommandFlash 內部使用 ActionScript 的 FSCommand(command, args) 向容器發送通知。參數皆為字串,開發者自行約定協議。例如:
// Flash 按鈕腳本
on (release) { fscommand("btn", "enter"); }
on (release) { fscommand("btn", "exit"); }
IDC_SHOCKWAVEFLASH1)。FSCommand,點擊 Add Function,生成 OnFSCommandShockwaveflash1(LPCTSTR command, LPCTSTR args)。void CPlayFlashDlg::OnFSCommandShockwaveflash1(LPCTSTR command, LPCTSTR args)
{
if (_tcscmp(command, _T("btn")) == 0) {
if (_tcscmp(args, _T("enter")) == 0) AfxMessageBox(_T("歡迎進入系統!"));
else if (_tcscmp(args, _T("exit")) == 0) { AfxMessageBox(_T("您選擇了退出!")); OnCancel(); }
}
}
包裝類提供兩個強大函數實現資料交換:
CString GetVariable(LPCTSTR name):讀取 Flash 內部變數值。void SetVariable(LPCTSTR name, LPCTSTR value):設定 Flash 內部變數值。範例:m_FlashPlayer.SetVariable(_T("score"), _T("100")); 即可動態更新動畫顯示的分數。
雖然 Flash 已成歷史,但「ActiveX 容器 + 腳本橋接」的架構思想仍具參考價值:標準化介面、雙向通訊協議、資料綁定機制,均可移植至現代 WebView2 + JavaScript 互通方案中。