【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

ちょと古い話で恐縮ですが、DirectshowのマルチメディアストリーミングでDirectDrawを使ってレンダリングしたいと思っています。
こまっているのはSetCooperativeLevelで描画させたいウィンドウのハンドルとDDSCL_NORMALを指定しても、そのあと取得できるプライマリサーフェスがデスクトップ全体になってしまいます。
(とうぜんレンダリングするとデスクトップに描画されます)
なんとか、ハンドルを指定してウィンドウに描画させたいのですが、WebなどでDirectDrawのWindowモードで立ち上げるサンプルとかご存じないでしょうか?

A 回答 (3件)

DirectShowのサンプルの中で「ちょうど」というのは見つからなかったのですが、DirectDrawでSetCooperativeLevel()を使っている例として、Samples\C++\Common\ddutil.cppがありました。



この中にCreateFullScreenDisplay()とCreateWindowedDisplay()という関数があります。関数名からして前者がフルスクリーン表示用の初期化、後者がウィンドウ内表示用の初期化と思われます。「ウィンドウは用意するがデスクトップ全体をプライマリサーフェスにする」なんていう関数を用意しても使い道がないので、おそらくウィンドウの中だけプライマリサーフェスになるのではないかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。バージョンのせいか、私の環境にはddutil.cppがありませんでした。
古い本のDirectx5のサンプルが手に入りましたので試したところ、Windowモードのプライマリーサーフェスはデスクトップ全体だとわかりました。その後GetClientRectをしてその領域にBltするみたいです。
なんか思っていたのと違いますが、疑問はとけました。
長々とお付き合いありがとうございました。

お礼日時:2005/07/29 14:00

うーーーん、去年仕事でDirectDrawについて調べまくったとき、その手のサンプルがあったと思ったのですが・・・ちょっと探してみますね。



※メディアプレーヤー等で動画を再生するときは、(アクセラレーションをオフにしていなければ)明らかにウィンドウ内にある再生領域がDirectDrawサーフェスになってますよね。
    • good
    • 0

DirectShow+DiretDrawサーフェースは組み合わせたことがないので確かなことは言えないのですが、SetCooperativeLevel()の問題だけだとすれば、DirectX9のサンプル(Samplesフォルダ以下)のソースをSetCooperativeLevelで検索すると、いくつか使用しているものがあります。



明らかにフルスクリーンというのもあれば、ウィンドウモードなのではないかと思うものもあるので、ひとまずヒットしたものを片っ端からビルドして実行してみてはいかがでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
grepで調べてみましたがSetCooperativeLevelを使ってるのはIDirectSound8とIDirectInputDevice8のメソッドみたいです。
DirectshowでDirectDrawで描画するサンプルもあるのですが排他モードなんです。
やっぱDirectDrawは使うなってことなんでしょうか…
知りたいのはWindowモードでのプライマリサーフェスがウィンドウのクライアント領域になるかどうかということです。
考えてみるとプライマリサーフェスがデスクトップ全体ということは当たり前のことなのかもしれないと思ってきました。

お礼日時:2005/07/28 16:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!