7

フォームに配置できるように、ハードウェアアクセラレーションによるレンダラーをTWinControlに埋め込むコンポーネントを作成しました。ほとんどの場合はかなりうまく機能しますが、コントロールのサイズを変更しようとすると、メッセージループが実行され、外部DLLでホストされているレンダラーのWndProcが呼び出されるまで、すべてが空白になります。これは、コードでコントロールのサイズを変更した後、Application.ProcessMessagesを明示的に呼び出す必要があることを意味します。これは、悪い習慣と見なされています。

コントロールのサイズを変更したときにDLL内のWndProcを呼び出すようにコントロール自体にロジックを配置する方法はありますか?そのため、正しくレンダリングするためにProcessMessagesを呼び出す必要はありませんか?

4

2 に答える 2

11

代わりに呼び出すことができますTWinControl.Update。これは、SendMessageだけでWM_PAINTイベントになるため、任意のメッセージを処理しません。

于 2010-04-29T14:46:34.547 に答える
4

正しい解決策は、サイズ変更時にInvalidateRectを呼び出すことです。その後、WindowsはWM_PAINTメッセージを投稿します。参考までに、Petzoldを棚から取り出して、絵画に関する彼の章を読む必要があります。

于 2010-11-25T21:25:16.090 に答える