2Dの簡単なゲームを作っています。
プログラム実行時、DirectShowを使ってムービーを再生してからスタート画面を表示させるようにしました。
ムービーの再生は、ビデオ・レンダリング・フィルタが作成するウィンドウを、ゲームウィンドウの子ウィンドウに設定して行っています。
ウィンドウ・モードでは正常にムービーが再生され、再生が停止したらスタート画面(ただのビットマップ画像)が表示されます。
しかし、ウィンドウモードをFALSE(フルスクリーン・モード)にすると、次のような動作をしてしまいます。
1、ゲームプログラムを実行する
2、フルスクリーン・モードになり、ムービーが再生される
3、ムービーが停止すると、フルスクリーン・モードが解除され、ゲームウィンドウが最小化されてしまう
この後、最小化されたウィンドウをクリックすると、フルスクリーン・モードに切り替わり、ゲーム画面が表示されます。
いろいろ試してみたところ、ムービーが終了した後のDirectShow関係の開放処理を行っているのですが、ここで、
put_Owner(NULL)
を実行してしまうと、ウィンドウが最小化されてしまうことが分かりました。
ムービーの再生はゲーム開始時だけではなく、スタート画面で一定時間経過したらデモムービーを流したり、ゲーム中にムービーを流したりといった感じで、複数のムービーファイルを使うことを考えています。
よって、ムービーは再生する際にオブジェクトを宣言し、再生が終わったら全て開放するようにしています。
よって、DirectShow関係のオブジェクトをRelease()してから
put_Visible(OAFALSE)とput_Owner(NULL)を実行しているのですが、フルスクリーンの場合はput_Owner(NULL)を実行してはいけないのでしょうか?
それとも、フルスクリーン・モードを解除させない別の方法があるのでしょうか?
何か情報がありましたら、是非教えてください。
よろしくお願いします。
> DirectShow関係のオブジェクトをRelease()してから
> put_Visible(OAFALSE)とput_Owner(NULL)を実行しているのですが
順序が逆のような気がするが。
先にput_Owner(NULL)をやっても同じですか?
put_Owner(NULL)のタイミングで最小化するのか、それともDirestShowの
オブジェクトをReleaseしたタイミングで最小化するのか、どっち?
返信ありがとうございました。
put_Owner(NULL)を先にやってから、put_Visible(OAFALSE)を実行しても
結果は同じで、最小化されてしまいました。
DirectShowのオブジェクトのReleaseですが、上記2つのメソッド実行後に行っていました。
そして、Releaseを先にやってからput_Visible(OAFALSE)、put_Owner(NULL)としたところ、無事、最小化されなくなりました。
ありがとうございました。
MSSDKのサンプルなどを見ても、Releaseは後になっていたので考え付きませんでした。
まだまだ勉強が足りませんね。ありがとうございました。
ツイート | ![]() |