開発環境 |
Microsoft Visual C++ 2010 Express (SP1) |
実行環境 |
Microsoft Windows XP Home Edition (SP3) |
プロジェクトの種類 |
Win32 プロジェクト |
プロジェクト名 |
wmpdlg |
アプリケーションの種類 |
Windows アプリケーション |
追加のオプション |
空のプロジェクト |
参考
wmpdlg.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
#define IDD_DIALOG 100
#define IDC_LABEL1 1000
#define IDC_BUTTON1 1001
#define IDC_OCX1 1002
wmpdlg.rc
// リソーススクリプト
#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
最終更新:2012年09月22日 15:30