No.1ベストアンサー
- 回答日時:
こんにちは。
IVideoWindowのウィンドウハンドルを取って来て、サブクラス化するのが手っ取り早そうです。
後、「リサイズ等で画面が消えてしまう」と言った類の副次的な問題の対処は以下を参考に。
http://oshiete1.goo.ne.jp/qa4494380.html
//ビデオウィンドウのフックプロシージャ
LRESULT CALLBACK VideoWndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
//GWL_USERDATAの方に以前のWNDPROCを入れておいたので、そっちから取る
WNDPROC wndProcOrig = (WNDPROC)::GetWindowLong(hWnd, GWL_USERDATA);
switch(iMsg)
{
case WM_LBUTTONDOWN:
//ココで何かする
break;
case WM_KEYDOWN:
//ココで何かする
break;
}
//以前のプロシージャへ渡す
return ::CallWindowProc(wndProcOrig, hWnd, iMsg, wParam, lParam);
}
//ビデオウィンドウのフック
static BOOL VideoWndHook(HWND hWnd)
{
//ビデオウィンドウを取る
HWND hWndVideo = ::GetWindow(hWnd, GW_CHILD);
//失敗
if(hWndVideo == NULL)
return FALSE;
//ウィンドウプロシージャのすり替え
const LONG lWndProcOld = ::SetWindowLong(hWndVideo, GWL_WNDPROC, (LONG)VideoWndProc);
//古い方をGWL_USERDATAに代入しておく(後で取り出して使う)
::SetWindowLong(hWndVideo, GWL_USERDATA, lWndProcOld);
return TRUE;
}
//使う時
+-----------------------------------------------------------------------
//DirectShowの初期化をする
//ビデオウィンドウのフックをする(少なくとも、IVideoWindowが出来上がっており、再生する前に)
if(::VideoWndHook(hWnd) == FALSE)
::MessageBox(NULL, NULL, "IVideoWindowのフックに失敗した", IDOK);
//再生をする
pMediaControl->Run();
-----------------------------------------------------------------------+
No.2
- 回答日時:
>なかなかうまくいきません。
ソースコードを載せるとか、なにがどう「うまくいかない」のかを具体的にどうぞ。
GUIなフォームエディタが付いているコンパイラでは、普通、以下のようにします。
キーでの操作は、フォーム上に再生ウィンドゥを載せ、フォームの方にキーボードフォーカスを当てておき、フォームに対するキー入力で処理します。
マウスでの操作の場合は、再生ウィンドゥの上に、透明で透過の「見えないウィンドゥ」を重ねて、その見えないウィンドゥに対して発生するマウスイベントを拾います。
再生ウィンドゥのメッセージループを上書きして処理する手もあるけど、見えないウィンドゥを最前面に置いてラップしちゃう方が簡単。
普通、GUIなフォームエディタが付いているコンパイラでは、メッセージループとかは自分で書かず、ウィンドゥやコントロールをペタッと貼って、プロパティシートでイベント発生時の処理を書き足すだけなので、上記の方法の方が楽です。
フォームエディタなどを使わず、1からゴリゴリと全部書いている場合は、メインプログラムのメッセージループとか、何から何まで全部自分で書けてる筈でしょうから、ANo.1のように、サブクラス化して再生ウィンドゥのメッセージループを上書きしましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 windows11 update の「更新の再開」について初歩的な質問なのですが 1 2022/10/19 00:57
- Windows 8 動画の再生とタイトルの変更方法を教えてください。 3 2022/08/01 14:51
- その他(コンピューター・テクノロジー) ブルースクリーンエラーの発生と解決手順 2 2022/10/09 13:05
- Windows 10 (緊急)windowsのタスクバーやアプリ?が反応しない 3 2023/03/28 05:03
- ノートパソコン Windows 10 動作改善方法 6 2023/04/26 22:30
- 画像編集・動画編集・音楽編集 動画をディスク作成すると画像が乱れる。 4 2022/06/24 07:49
- Windows 10 パソコンの起動時、画面が黒いままのトラブルにつきまして。 4 2022/10/02 18:02
- フリーソフト streemfab(無料版)について 4 2022/12/24 13:13
- 音楽・動画 ノートパソコンで動画再生の設定の変更について*長文ですが何卒宜しくお願い致します。 3 2022/10/18 12:24
- その他(就職・転職・働き方) ビズリーチのプレミアムステージの自動更新を停止を行いたいのですが、停止の処理がうまくできません。 公 1 2022/05/04 10:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SetWindowText関数について
-
vbaから他のアプリを終了
-
デスクトップ上のアイコンの位...
-
VBAでコントロールのハンドルを...
-
メッセージボックスの選択ボタ...
-
メッセージループについて
-
msgboxの表示位置
-
SendMessage で ESC など
-
他のウィンドウのボタンを自動...
-
メッセージハンドラ
-
ウィンドウプロシージャの書き...
-
WM_CLEARなど使えないメッセー...
-
WM_CTLCOLORDLG
-
PCのシャットダウン処理
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
コンボボックス内の文字サイズ変更
-
グラフの交点の求め方(Excel)
-
コントロールの書式設定で、“コ...
-
PCで「使用可能な場合はグラフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaから他のアプリを終了
-
他のウィンドウのボタンを自動...
-
メッセージボックスの選択ボタ...
-
msgboxの表示位置
-
VBAでコントロールのハンドルを...
-
メッセージハンドラ
-
SetWindowText関数について
-
WM_NCLBUTTONUPについて
-
VB.netでFindWindowExやると・...
-
デスクトップ上のアイコンの位...
-
点滅で知らせる方法
-
SendMessage で ESC など
-
チェックボックスのキーダウン...
-
キーボード・フックのアプリを...
-
DEVICECHANGE() の受け取り
-
CloseHandle()
-
マウスフックについて
-
システム例外のメッセージを変...
-
windowsメールスロットについて...
-
マウスの右クリック+Shiftキー...
おすすめ情報