ATL 3.0 を使ってビデオ コントロールをホストする方法
このトピックは Windows XP にのみ適用。
ここでは、ATL 3.0 を使ってビデオ コントロールをホストする方法について説明する。アプリケーションは複合コントロールの内部にビデオ コントロールをホストする。複合コントロールは ActiveX オブジェクトの 1 つのタイプであり、他のコントロールを包含する。アプリケーションを作成するには、以下の手順を実行する必要がある。
- ATL AppWizard でフレームワークを作成する。
- ATL CComCompositeControl クラスを使って複合コントロールを追加する。
- ビデオ コントロールを複合コントロールに追加する。
- 複合コントロールを表示するためのコードを追加する。
これらの手順について以下に詳しく説明する。
フレームワークを作成する
ATL COM AppWizard を使って新しいプロジェクトを作成する。サーバー タイプとして [Executable (EXE)] を選択する。ヘッダー ファイル Msvidctl.h をインクルードし、Strmiids.lib ライブラリにリンクする。
複合コントロールを追加する
ATL Object Wizard を使って複合コントロールを作成する。この例では、デフォルトの属性をそのまま使用してかまわない。コントロールに名前を付ける (たとえば MyComposite)。
ビデオ コントロールを追加する
次のように、Dialog Editor を使ってビデオ コントロールを複合コントロールに追加する。
- ダイアログ ボックスを右クリックする。
- [ActiveX コントロールの挿入] を選択する。
- [MS TV Video Control] を選択する。Msvidctl.dll がシステムに登録されている場合は、選択したコントロールがリストに表示される。
さらに、ダイアログ プロパティの [表示] をオンにする。そうしないと、コントロールは表示されない。
複合コントロールを表示する
ATL Object Wizard によって汎用 WinMain 関数が作成される。この関数の内側の、複合コントロールを作成して表示するメッセージ ループの前にコードを追加する。次のコード例では、追加する必要があるコードを太字で示している。
extern "C" int WINAPI _tWinMain(HINSTANCE hInstance,
HINSTANCE /*hPrevInstance*/, LPTSTR lpCmdLine, int /*nShowCmd*/)
{
/* ... */
//ウィンドウを作成して複合コントロールを表示する。
AtlAxWinInit();
HWND hWnd = ::CreateWindow(TEXT("AtlAxWin"),
Text("Your Control's ProgID Here"),
// 例: TEXT("MyTVApp.MyComposite")
NULL,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL,
::GetModuleHandle(NULL), NULL);
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
/* ... */
}
また、WM_CLOSE メッセージのメッセージ ハンドラを追加する。その中で、ウィンドウを破棄して終了メッセージを送信する。
LRESULT MyComposite::OnClose(
UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
DestroyWindow();
PostQuitMessage(0);
return 0;
}
これで、次のようにコントロール クラス内からビデオ コントロールへのポインタを取得できる。
CComPtr<IMSVidCtl> pVidControl;
hr = GetDlgControl(IDC_MSVIDCTL1, __uuidof(IMSVidCtl),
reinterpret_cast<void **>(&pVidControl));