Windows上でオーバーレイグラフィックスを描画するための最良の方法は何ですか?
-
16-09-2019 - |
質問
私は、カスタムウィンドウのさまざまな種類を作成する必要があるWin32アプリケーションで働いています。特に、これらのウィンドウは、しばしば非矩形のある影を持っている、またはほとんど透明です。
私は現在、私は、その後の私の任意のグラフィックスを描画することができます透明のウィンドウを作成するためにWS_EX_LAYERED
とUpdateLayeredWindow
を使用しています。しかし、私は、レイヤードウィンドウを使用して、レイヤード子ウィンドウを持つことができないという点で限定的であることを見つけ、またレイヤードウィンドウが正しく「通常」のWin32コントロールをホストすることができます。
私たちのコードベースは、ほとんどのWin32とGDIを使用して、いくつかの歳ですが、私たちは物事の近代化の過程にいると、それは新しい技術を見てみましょう。
私は、WPFで私のカスタムウィンドウをやって考えられてきましたが、私は「空域」の問題について何を読んで心配です。 WPFは、そのピクセル単位のアルファブレンディングを達成するためにレイヤードウィンドウを使用していますので、それはまた、私が以前に経験した制限を受けるだろうように思えると思われます。
私は、Direct2Dの程度(実際には、何も)あまり知りませんが、それは面白いかもしれませんようにその技術が鳴ります。しかし、私はそれへの参照がオーバーレイウィンドウを行うことができることを見つけることができません。
だから、このすべては私の問題に私をもたらします:Windowsでオーバーレイウィンドウを行うための最高の技術とは何ですか? (最低でもVistaとWin7の、XPを持っていいだろう)。
私はいくつかの、特に優れた技術を無視していますか?任意の提案をいただければ幸いです。
解決
私はのDirect2DとDirectWriteのをお勧めします。唯一の問題は、あなたがVista以降のOSがそれを使用する必要があるということです。
他のヒント
WPFは、WPF(ピクセル単位の透明度を持つウィンドウ)のこの特定の機能を使用すると、非常に簡単に探しているものを行うことができますが、することは、グラフィックスには非常に問題になりがちドライバのバグ(明らかにグラフィックハードウェアメーカーは、層状のDirect3Dをテストするものではありません。ピクセルあたりのアルファ値を有する窓非常によく)。
WPFは、透明性のためにレイヤードウィンドウを使用していますが、それは「通常」のWin32コントロールを使用していない、ウィンドウ内のすべてのWPFコントロールはただ一つのWin32ウィンドウを使用して、彼らに自己を表現、彼らはすべてのサポート透明ます。
あなたはWPFのウィンドウ内のWinFormsコントロールをホストする場合、「空域」の問題にのみ発生します。