// // Flash 駆動テスト // #include #include CComModule _Module; #include #import "c:\WINDOWS\system32\macromed\flash\Flash.ocx" rename_namespace("Flash") named_guids // Flash な窓クラス class CAxFlashWindow : public CWindowImpl, // ATL ActiveX 窓 public CComPtr // COM インターフェース { public: DECLARE_WND_SUPERCLASS("CAxFlashWindow", CAxWindow::GetWndClassName()); CAxFlashWindow(){}; virtual ~CAxFlashWindow(){ // 消しとかないと多重解放してしまう p = NULL; } // 窓生成 HWND Create(HWND hWndParent, RECT& rcPos, LPCTSTR szWindowName = NULL, DWORD dwStyle = 0, DWORD dwExStyle = 0, UINT nID = 0, LPVOID lpCreateParam = NULL) { //********************************************************** // ATL Active X 初期化 AtlAxWinInit(); //********************************************************** // 窓生成 CWindowImpl:: Create(hWndParent, rcPos, szWindowName, dwStyle, dwExStyle, nID, lpCreateParam); if (m_hWnd) { //********************************************************** // Flash OCX 読み出し LPOLESTR clsid = NULL; StringFromCLSID(Flash::CLSID_ShockwaveFlash, &clsid); CreateControl(clsid); CoTaskMemFree(clsid); // Flash インターフェース取得 Flash::IShockwaveFlash *flash; QueryControl(Flash::IID_IShockwaveFlash, (void**)&flash); //********************************************************** // Flash::IShockwaveFlash CComPtr::p に記録 p = flash; } return m_hWnd; } // 終了メッセージハンドラ LRESULT OnDestroy(UINT, WPARAM, LPARAM, BOOL&){ PostQuitMessage(0); return 0; } // メッセージハンドラの列挙 BEGIN_MSG_MAP(CAxFlashWindow) MESSAGE_HANDLER(WM_DESTROY, OnDestroy) END_MSG_MAP() }; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // COMモジュール初期化 _Module.Init(NULL, hInstance); // 窓生成 CAxFlashWindow flash; flash.Create(NULL, CWindow::rcDefault, NULL, WS_OVERLAPPEDWINDOW|WS_VISIBLE); // メニュー消去 flash->Menu = FALSE; // ファイル指定(同時に再生がはじまる) flash->Movie = L"file://c:/sample.swf"; // メインループ MSG msg; while (GetMessage(&msg, NULL, 0, 0)){ TranslateMessage(&msg); DispatchMessage(&msg); } // COMモジュール終了 _Module.Term(); return msg.wParam; }