|開発環境|Microsoft Visual C++ 2010 Express (SP1)| |実行環境|Microsoft Windows XP Home Edition (SP3)| |プロジェクトの種類|Win32 プロジェクト| |プロジェクト名|wmpdlg| |アプリケーションの種類|Windows アプリケーション| |追加のオプション|空のプロジェクト| 参考 -[[IEコンポーネントのクラス(VC++ 2005) - 無職日記~無限回廊編~>http://d.hatena.ne.jp/iamjack/20070225/1172417507]] -[[IEコンポーネントの使い方>http://www.nitoyon.com/vc/tips/ie_component.htm]] wmpdlg.cpp #highlight(cpp){{ /* Windows Media Player HKEY_CLASSES_ROOT\CLSID\{6BF52A52-394A-11d3-B153-00C04F79FAA6} InprocServer32 C:\WINDOWS\system32\wmp.dll ThreadingModel:Apartment ProgID:WMPlayer.OCX.7 */ #include <Windows.h> #include "resource.h" #import "wmp.dll" high_method_prefix("M") named_guids no_namespace // 関数型定義 typedef BOOL (WINAPI *ATLAXWININIT)(); typedef HRESULT (WINAPI *ATLAXGETCONTROL)(HWND, IUnknown **); // 関数プロトタイプ宣言 INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); // 外部変数 ATLAXGETCONTROL AtlAxGetControl; //============================================================================== int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HMODULE hMod; HRESULT hr; BOOL b; int i; hMod = LoadLibrary(TEXT("atl100.dll")); if (hMod == NULL) return 0; hr = CoInitialize(NULL); if (FAILED(hr)) return 0; ATLAXWININIT AtlAxWinInit = (ATLAXWININIT)GetProcAddress(hMod, "AtlAxWinInit"); if (AtlAxWinInit == NULL) return 0; AtlAxGetControl = (ATLAXGETCONTROL)GetProcAddress(hMod, "AtlAxGetControl"); if (AtlAxGetControl == NULL) return 0; b = AtlAxWinInit(); if (b == FALSE) return 0; i = DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DialogProc); // b = AtlAxWinTerm(); // 必要があれば呼ぶ CoUninitialize(); b = FreeLibrary(hMod); return 0; } //------------------------------------------------------------------------------ INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { static IWMPPlayer4 *player; HWND hWnd; HRESULT hr; INT_PTR iResult = TRUE; switch (uMsg) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_BUTTON1: { TCHAR strFile[MAX_PATH] = {0}; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof ofn); ofn.lStructSize = sizeof ofn; ofn.hwndOwner = hDlg; ofn.Flags = OFN_FILEMUSTEXIST; ofn.lpstrFile = strFile; ofn.nMaxFile = sizeof strFile; BOOL b = GetOpenFileName(&ofn); if (b == FALSE) break; hWnd = GetDlgItem(hDlg, IDC_LABEL1); SetWindowText(hWnd, strFile); hr = player->put_URL(strFile); } break; } break; case WM_INITDIALOG: { IUnknown *pUnk; hWnd = GetDlgItem(hDlg, IDC_OCX1); hr = AtlAxGetControl(hWnd, &pUnk); pUnk->QueryInterface(IID_PPV_ARGS(&player)); } break; case WM_CLOSE: EndDialog(hDlg, IDOK); break; default: iResult = FALSE; } return iResult; } }} resource.h #highlight(cpp){{ #define IDD_DIALOG 100 #define IDC_LABEL1 1000 #define IDC_BUTTON1 1001 #define IDC_OCX1 1002 }} wmpdlg.rc #highlight(cpp){{ // リソーススクリプト #include <windows.h> #include "resource.h" IDD_DIALOG DIALOGEX 100, 100, 320, 240 STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX EXSTYLE WS_EX_APPWINDOW CAPTION "wmpdlg" FONT 9, "MS Pゴシック" BEGIN LTEXT "label1",IDC_LABEL1,4,4,204,8 PUSHBUTTON "選択",IDC_BUTTON1,4,16,56,16 CONTROL "{6BF52A52-394A-11D3-B153-00C04F79FAA6}",IDC_OCX1,"AtlAxWin100", WS_TABSTOP,4,36,312,200 END }}