掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DirectShowのフルスクリーン表示について(未解決でした) (ID:55601)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
すいません、先ほど「解決」したと思って書き込みをしましたが、 解決していませんでしたので、改めてスレを立てました。 DirectShow関係のオブジェクトとして以下の4つを作成しています。 IGraphBuilder* g_pGraph = NULL; IMediaControl* g_pMediaControl = NULL; IMediaEvent* g_pEvent = NULL; IVideoWindow* g_pVidWin = NULL; で、再生終了後の開放処理を次のような関数を作成しました。 #define RELEASE(x) if(x!=NULL){x->Release();x=NULL;} void ReleaseDShow(void) { RELEASE(g_pVidWin); RELEASE(g_pMediaControl); RELEASE(g_pEvent); RELEASE(g_pGraph); if ( g_pVidWin != NULL ) { g_pVidWin->put_Visible(OAFALSE); g_pVidWin->put_Owner(NULL); } } これで正常に動いたと思ったので、先ほどのレスに「解決」として返信しましたが、よく考えたら、g_pVidWinをRelease後、NULLを代入しているので、その下のif文には引っかかりませんよね。 ということは、put_Visible()もput_Owner()も実行されないわけです。 結果、最小化が引き起こされるput_Owner(NULL)を実行していないので、見た目は正常にムービーが再生されていました。 put_Owner(NULL)を実行しなくても、見た目は正常に再生できるんですが、put_Owner(NULL)を実行していないことが処理として正しいのか? と考えると気持ち悪いです。 現在はとりあえずの案として、次のように関数を修正して使っています。 void ReleaseDShow(void) { if ( g_pVidWin != NULL ) { g_pVidWin->put_Visible(OAFALSE); //g_pVidWin->put_Owner(NULL); } RELEASE(g_pVidWin); RELEASE(g_pMediaControl); RELEASE(g_pEvent); RELEASE(g_pGraph); } out_Owner(NULL)を実行しない状態で使い続けることに問題はありますでしょうか? よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.