今回はATLを使ってウィンドウ上にFlashを埋め込んでみます 計算Flashを埋め込んでみました 今回の全ソースコードです #include <tchar.h> #include <windows.h> // ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { if(msg == WM_DESTROY) PostQuitMessage(0); return (DefWindowProc(hWnd, msg, wParam, lParam)); } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { const TCHAR* WC_BASIC = _T("Basic"); // ウィンドウクラス名 /********************************************/ /* ウィンドウクラスの定義と登録 */ /********************************************/ // シンプルウィンドウクラス設定 WNDCLASSEX wcex ={sizeof(WNDCLASSEX), CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, WndProc, 0,0,hInstance, (HICON)LoadImage(NULL,MAKEINTRESOURCE(IDI_APPLICATION),IMAGE_ICON,0,0,LR_DEFAULTSIZE | LR_SHARED), (HCURSOR)LoadImage(NULL,MAKEINTRESOURCE(IDC_ARROW),IMAGE_CURSOR,0,0,LR_DEFAULTSIZE | LR_SHARED), (HBRUSH)GetStockObject(WHITE_BRUSH), NULL, WC_BASIC , NULL}; // シンプルウィンドウクラス登録 RegisterClassEx(&wcex); /********************************************/ /* ウィンドウの作成 */ /********************************************/ HWND hWnd = CreateWindowEx( 0, //拡張ウィンドウスタイル WC_BASIC, //ウィンドウクラス名 _T("タイトル"), //タイトルバーにこの名前が表示されます WS_OVERLAPPEDWINDOW | WS_VISIBLE, //ウィンドウスタイル CW_USEDEFAULT, //X座標 CW_USEDEFAULT, //Y座標 640, //幅 480, //高さ NULL, //親ウィンドウのハンドル、親を作るときはNULL NULL, //メニューハンドルorリソースID hInstance, //インスタンスハンドル NULL); RECT rect; GetClientRect(hWnd,&rect); void* init = GetProcAddress(LoadLibrary(_T("atl")),"AtlAxWinInit"); _asm call init; CreateWindow(_T("AtlAxWin"), _T("C:\\k3.swf"), WS_CHILD | WS_VISIBLE,0,0,rect.right - rect.top,rect.bottom - rect.top,hWnd,NULL,hInstance,NULL); MSG msg={0}; while (GetMessage(&msg,0,0,0)) DispatchMessage(&msg); }; 肝心のフラッシュ埋め込みですが実質3行です void* init = GetProcAddress(LoadLibrary(_T("atl")),"AtlAxWinInit"); _asm call init; CreateWindow(_T("AtlAxWin"), _T("C:\\k3.swf"), WS_CHILD | WS_VISIBLE,0,0,rect.right - rect.top,rect.bottom - rect.top,hWnd,NULL,hInstance,NULL); LoadLibrary関数でATLをロードします void* init = GetProcAddress(LoadLibrary(_T("atl")),"AtlAxWinInit"); そして、AtlAxInit関数の呼び出しを行っています _asm call init; ここで、_asmキーワードというものが出てきます 今回は子ウィンドウとしてFlashの張り付けを行っています CreateWindow(_T("AtlAxWin"), _T("C:\\k3.swf"), WS_CHILD | WS_VISIBLE,0,0,rect.right - rect.top,rect.bottom - rect.top,hWnd,NULL,hInstance,NULL); 第一引数のウィンドウクラス名にはAtlAxWinを指定します C:\\k3.swf もちろん指定のファイルは指定の場所に存在していなければなりません http://k3tec.net/neko_wiki/index.php?plugin=attach&refer=%A3%D7%A3%E9%A3%EE%A3%B3%A3%B2%A3%C1%A3%D0%A3%C9%B9%D6%BA%C211%B2%F3&openfile=k3.swf このようにCOMは、ローカルやインターネット上限らず、モジュールを部品のように使うことができます。 全ソースコードは下から
|