DirectShowのフルスクリーン表示について

解決


らんす  URL  2004-12-09 03:07:18  No: 55564

2Dの簡単なゲームを作っています。
プログラム実行時、DirectShowを使ってムービーを再生してからスタート画面を表示させるようにしました。
ムービーの再生は、ビデオ・レンダリング・フィルタが作成するウィンドウを、ゲームウィンドウの子ウィンドウに設定して行っています。

ウィンドウ・モードでは正常にムービーが再生され、再生が停止したらスタート画面(ただのビットマップ画像)が表示されます。
しかし、ウィンドウモードをFALSE(フルスクリーン・モード)にすると、次のような動作をしてしまいます。

1、ゲームプログラムを実行する
2、フルスクリーン・モードになり、ムービーが再生される
3、ムービーが停止すると、フルスクリーン・モードが解除され、ゲームウィンドウが最小化されてしまう

この後、最小化されたウィンドウをクリックすると、フルスクリーン・モードに切り替わり、ゲーム画面が表示されます。

いろいろ試してみたところ、ムービーが終了した後のDirectShow関係の開放処理を行っているのですが、ここで、
put_Owner(NULL)
を実行してしまうと、ウィンドウが最小化されてしまうことが分かりました。

ムービーの再生はゲーム開始時だけではなく、スタート画面で一定時間経過したらデモムービーを流したり、ゲーム中にムービーを流したりといった感じで、複数のムービーファイルを使うことを考えています。
よって、ムービーは再生する際にオブジェクトを宣言し、再生が終わったら全て開放するようにしています。
よって、DirectShow関係のオブジェクトをRelease()してから
put_Visible(OAFALSE)とput_Owner(NULL)を実行しているのですが、フルスクリーンの場合はput_Owner(NULL)を実行してはいけないのでしょうか?
それとも、フルスクリーン・モードを解除させない別の方法があるのでしょうか?

何か情報がありましたら、是非教えてください。
よろしくお願いします。


ボコノン教徒  2004-12-09 20:27:41  No: 55565

> DirectShow関係のオブジェクトをRelease()してから
> put_Visible(OAFALSE)とput_Owner(NULL)を実行しているのですが

順序が逆のような気がするが。
先にput_Owner(NULL)をやっても同じですか?
put_Owner(NULL)のタイミングで最小化するのか、それともDirestShowの
オブジェクトをReleaseしたタイミングで最小化するのか、どっち?


らんす  URL  2004-12-09 22:17:05  No: 55566

返信ありがとうございました。

put_Owner(NULL)を先にやってから、put_Visible(OAFALSE)を実行しても
結果は同じで、最小化されてしまいました。

DirectShowのオブジェクトのReleaseですが、上記2つのメソッド実行後に行っていました。

そして、Releaseを先にやってからput_Visible(OAFALSE)、put_Owner(NULL)としたところ、無事、最小化されなくなりました。
ありがとうございました。

MSSDKのサンプルなどを見ても、Releaseは後になっていたので考え付きませんでした。
まだまだ勉強が足りませんね。ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加