透明ウィンドウの話 その2

アプリで透明なウィンドウっていう部分は1つのウリになる部分で、やっぱりWindows 7(Vista)でしか動かないってのはやっぱまずいと思うんですよ、ということでもう少し調べて何か方法はないかと考えてみました。以下にその考えてみた話をメモっておこうと思います。

まず、DWM OFF状態でそもそも目的の動作が出来ない時点でまずいでしょう。Vista,7でBasicテーマであっても背景透過なアプリとして動くべき。この方法を確立しなくてはいけないのかな。

続いて、Windows8でも動作できること。
挙動から完全なるDWM OFFではなさそうなので、これも厄介そう。上記のベーシックモードでも動くような実装で、こちらの方法が動くようであれば問題は一気に解決する。

現在とりあえず実験中。

前者のWindows7,VistaでのDWM OFF時の状態でも動くようにという点で、いろいろと試してみたところ、LayeredWindowならば、実装の仕方によっては正常に動くようです!
変に実装すると全く描画されないようですが・・・・。(その境目を現在調査中)

これがもしそのままWindows8で動くとすれば、問題は解決になるのかなと思います。

DirectXであれ、OpenGLであれ、レンダリング済み画像をバックバッファのロックという方法で取得して、LayeredWindow用のHBITMAP内のビットイメージに再書き込みという方法でいけるのかなと考えてます。

ちなみに GDIサーフェースに直接描くって方法は、ちょっとできないでしょう。
というのもLayeredWindowで要求される仕様が事前乗算済みアルファの形式を求めてるようで。
この処理をどうしても最後に処理してあげないといけないため、描画して終了という形にはならないのかなと思います。

※ バックバッファのロックってパフォーマンスペナルティが大きいので、どこまで実用になるかは未検証です

シェアする

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

フォローする