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

解決


時の探求者  2004-12-15 05:24:18  No: 12309  IP: [192.*.*.*]

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

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

編集    削除
jok  2004-12-15 07:55:20  No: 12310  IP: [192.*.*.*]

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

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

編集    削除
時の探求者  2004-12-15 08:45:49  No: 12311  IP: [192.*.*.*]

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

編集    削除
jok  2004-12-15 08:58:16  No: 12312  IP: [192.*.*.*]

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

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

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

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

編集    削除