4

さまざまなカスタムウィンドウタイプを作成する必要があるWin32アプリケーションを使用しています。特に、これらのウィンドウは、多くの場合、長方形ではないか、影があるか、ほとんどが透明です。

現在、WS_EX_LAYEREDwithを使用しUpdateLayeredWindowて、任意のグラフィックを描画できる透明なウィンドウを作成しています。ただし、階層化されたウィンドウには制限があり、階層化された子ウィンドウを作成することも、階層化されたウィンドウで「通常の」Win32コントロールを適切にホストすることもできません。

私たちのコードベースは数年前のもので、主にWin32とGDIを使用していますが、現在、最新のテクノロジーを検討しています。

WPFでカスタムウィンドウ処理を行うことを検討しましたが、「空域」の問題について読んだ内容が気になります。WPFは、レイヤードウィンドウを使用してピクセルごとのアルファブレンディングを実現しているようです。そのため、以前に経験した制限にも悩まされているようです。

Direct2Dについては(実際には何も)よくわかりませんが、そのテクノロジーは興味深いかもしれません。ただし、オーバーレイウィンドウを実行できることへの参照は見つかりません。

だから、これはすべて私の問題に私をもたらします:Windowsの下でオーバーレイウィンドウを実行するための最良の技術は何ですか?(少なくともVistaとWin7、XPがあればいいのですが)

私はいくつかの、特に優れた技術を無視していますか?任意の提案をいただければ幸いです。

4

2 に答える 2

4

WPFは探していることを非常に簡単に実行できますが、WPFのこの特定の機能(ピクセルごとの透明度のあるウィンドウ)は、グラフィックスドライバーのバグのために非常に問題になる傾向があります(グラフィックハードウェアメーカーは、レイヤードDirect3Dウィンドウをピクセルアルファ値は非常によく)。

WPFは透明性のために階層化されたウィンドウを使用しますが、「通常の」win32コントロールを使用しません。ウィンドウ内のすべてのwpfコントロールは、1つのwin32ウィンドウのみを使用して自己レンダリングします。これらはすべて透明性をサポートします。

「空域」の問題は、WPFウィンドウ内でWinFormsコントロールをホストしている場合にのみ発生します。

于 2009-11-05T08:53:09.820 に答える
2

Direct2DとDirectWriteをお勧めします。これは、GDIや.Netスペースで行われるものと比較して、途方もなく高速な高品質のレンダリングが得られるためです。唯一の問題は、Vista以降のOSが必要なことです。

于 2009-11-13T08:19:01.467 に答える