-1

ユーザーがSDLレンダリングサーフェスをVCLフォームに埋め込むことができるカスタムTGraphicControl子孫を作成しようとしています。これにより、SDLアニメーションをフォームに表示する簡単な方法が提供されます。

どうやらTGraphicControlはPaintメソッドで再描画されているようです。これはどのくらいの頻度で呼び出されますか?何かがコントロールを無効にすることが起こったときだけですか、それともそれを呼び出す他のものがありますか?それはそれ自身の描画を行う何かとどのように相互作用しますか?

4

2 に答える 2

6

ウィンドウ化されていないコントロール (TGraphicControl) の Paint メソッドは、下にあるウィンドウ化されたコントロールが再描画されるときに呼び出されます。これは、ウィンドウ コントロールの WM_PAINT メッセージが処理されるときに発生します。

ウィンドウ化されたコントロールは、その領域全体またはその一部が無効化された場合、または Z オーダーが上位にある別のウィンドウが閉じられているか移動されている場合に再描画され、ウィンドウが公開されて再描画が必要になります。

TGraphicControl を無効にすると、ウィンドウ化された親コントロールの対応する部分が計算され、この部分が無効になります。

TGraphicControl 自体を再描画する必要がある場合は、TGraphicControl またはその親コン​​トロールで Invalidate を呼び出す必要があります。再描画を引き起こす他の方法はありません。

于 2009-02-23T19:22:50.377 に答える
1

質問1:これはどのくらいの頻度で呼び出されますか?

回答Mghieを参照してください:親ウィンドウコントロールがWM_PAINTメッセージを処理するときはいつでも

質問2:それは、何かがコントロールを無効にすることが起こったときだけですか、それともそれを呼び出す他の何かがありますか?

回答Mghieを参照してください:無効にされた場合のみ

質問3:それはそれ自身の描画を行う何かとどのように相互作用しますか?

オーバーライドディレクティブを使用して、TGraphicControlの子孫のPaintメソッドに独自の描画ルーチンを配置する必要があります。Paintメソッドで描画しても、別のWM-PAINTメッセージは送信されません。Paintメソッドを使用している間は、WM-PAINTメッセージループを使用せずにキャンバスに描画できます。かなりの数のWM-PAINTメッセージが飛び交う可能性があるため、描画コードをできるだけ速くします。描画ルーチンに時間がかかると、アプリケーションの動作が遅くなったり、応答しなくなったりします。

于 2009-02-23T23:36:16.040 に答える