2012-02-18 17 views
1

GDI +を使用して画面(画面全体、他のすべてのウィンドウの上)に描画しようとしています。
私はHDCを画面に取得するためにGetDCにNULLを渡してから、それを使ってGraphicsオブジェクトを作成し、DrawRectangleを使用して画面に長方形を描画しました。
すべて動作します...例外...四角形の内部は更新されません。GDI +(またはGDI)をInspectに似た画面で描画する

コマンドプロンプトに描画してコマンドプロンプトを移動すると、四角形の内側が黒くなります。 私は長方形の下に何が見えると思うのですか?

ここで、

Pen BluePen(Color(255, 0, 255, 0), 2); 
Graphics graphics(screenDC); 
graphics.DrawRectangle(&BluePen, myRect); 

非常にシンプル。..描画をやっているコードですので、私は画面がないときに更新するように四角形の内部を取得するためにしなければならない何かがあるのでしょうか?または、それを真に透明にする。

================= EDIT =================

まあ、私はあきらめていましたWindows SDKに付属のInspectツールがこれを完全に行うことに気付きました。

私はハイライト矩形に似たものを再作成したいと思います。ウィンドウ(Firefoxなど)を選択してInspectにフォーカスを移すと、完全に更新された状態で自由に移動できます。 ちらつきもありません。

だから...誰がこれを行う方法をInspectが管理しているのですか?

大丈夫です。また... GDIの代わりに、GDI +のウィンドウで

+0

長方形は、現在のペンと現在のBRUSHを使用します。 – BitBank

+2

ウィンドウにのみ描画できます。ウィンドウの背景と同じ透明キーを持つレイヤードウィンドウ(WS_EX_LAYERED)が必要です(UpdateLayeredWindow()を参照)。 –

+0

@HansPassantありがとう、これは私が必要としていたものです。 – Josh

答えて

3

スクリーン回答(や窓を...)の表面(複数可)サンドボックスのように、...揮発性です。ウィンドウの「重なり合った」と覆われていないサーフェスの再塗装は、適切なイベント管理によって行われる錯覚です。

他のものが上に描画されるまで、すべてが描画されます。 サーフェスを「Uncovering」すると、そのサーフェスを表すウィンドウがWM_PAINTメッセージを受信します。そのメッセージに反応するのは、そのウィンドウの手順に従います。すべてのメッセージは、その下にあるはずです。

デスクトップウィンドウに送信されたWM_PAINTメッセージを何とか傍受しない限り、デスクトップには再描画が必要であることを知る機会がほとんどなく、したがってペイントコードは呼び出されず、再描画も行われません。または、デスクトップウィンドウのコードを更新するだけで、ペイントを認識できない場合もあります。

関連する問題