7

我创建了一个组件,它在 TWinControl 中嵌入了一个硬件加速的渲染器,因此您可以将它放置在表单上。它在大多数情况下工作得很好,但是如果我尝试调整控件的大小,一切都会变成空白,直到消息循环运行并为渲染器调用 WndProc,渲染器托管在外部 DLL 中。这意味着我需要在代码中调整控件大小后显式调用 Application.ProcessMessages,我知道这被认为是不好的做法。

当我更改控件的大小时,有没有办法在控件本身中放置一些逻辑以使其调用 DLL 中的 WndProc,这样我就不需要调用 ProcessMessages 来获取正确呈现的内容?

4

2 回答 2

11

您可以TWinControl.Update改为调用,这应该只是 SendMessage 一个 WM_PAINT 事件,因此您不会处理任意消息。

于 2010-04-29T14:46:34.547 回答
4

The correct solution is to call InvalidateRect when you resize. Windows will then post you a WM_PAINT message. For reference you should pull Petzold off the shelf and read his chapter on painting.

于 2010-11-25T21:25:16.090 回答