避免调用ProcessMessages的需要

时间:2010-04-29 14:35:52

标签: delphi controls component-design

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

有没有办法在控件本身放置一些逻辑,以便在我更改控件的大小时调用DLL中的WndProc,所以我不需要调用ProcessMessages来获取正确的东西?

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:4)

正确的解决方案是在调整大小时调用InvalidateRect。 Windows然后会发布WM_PAINT消息。作为参考,你应该将Petzold从架子上拉下来,阅读他关于绘画的章节。