システムが画面を再描画したタイミングと、その領域を知るには?

解決


時の探求者  2004-12-14 20:24:18  No: 12309  IP: 192.*.*.*

画面のDCに加算減算をかけることで、ソフトウェアで擬似的に画面の
輝度を変更するプログラムを作っています。
そこで画面が再描画された場合、その領域で再び加減算の処理をして、
常に一定の輝度に保つ処理がどうしても必要になります。

はじめ、システムフックでWM_PAINTメッセージを監視することで可能
だろうと安易に考えていたのですが、これでは更新されたタイミング
わかるものの、その領域まではわかりません。
なにか良い案はないでしょうか。

編集 削除
jok  2004-12-14 22:55:20  No: 12310  IP: 192.*.*.*

> システムフックでWM_PAINTメッセージを監視することで

本来のウィンドウ関数が BeginPaint() を呼ぶ前なら GetUpdateRect() で
更新領域が取れるかも知れませんね。処理は、WM_PAINT メッセージの処理が
元関数で終わった後にしなければなりませんが。

編集 削除
時の探求者  2004-12-14 23:45:49  No: 12311  IP: 192.*.*.*

jokさん、ありがとうございます。
おっしゃるとおりです。BeginPaintが呼ばれるのを
事前に知ることができれば大変助かるんですが…。
まさかGetUpdateRectを全ウィンドウに常に送ると
いう訳にもいかないでしょうし。弱りました。

編集 削除
jok  2004-12-14 23:58:16  No: 12312  IP: 192.*.*.*

あれれー WH_GETMESSAGE フックなら、元関数に渡されるまえにフックできますけど。

編集 削除
時の探求者  2004-12-15 00:37:07  No: 12313  IP: 192.*.*.*

jokさん、ありがとうございます。
実は今回はじめてSフックを使ったもので
WH_GETMESSAGEをよく知りませんでした。
(WH_CALLWNDPROCでやってました)
今調べて「あ!」となった次第です。
お恥ずかしい限りですね。

ともかく、これでできそうです。
ありがとうございました!

編集 削除