開発環境 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