【问题标题】:Avoiding the need to call ProcessMessages避免调用 ProcessMessages
【发布时间】:2010-04-29 14:35:52
【问题描述】:

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

当我更改控件的大小时,有什么方法可以在控件本身中添加一些逻辑,使其调用 DLL 中的 WndProc,这样我就不需要调用 ProcessMessages 来让内容正确呈现?

【问题讨论】:

  • +1 表示希望首先避免使用 ProcessMessages。

标签: delphi controls component-design


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 更重要的是,如果您的系统设置是在调整大小时不重新绘制窗口,那么在调整大小操作完成之前您将无法获得 WM_PAINT。
    猜你喜欢
    • 2011-01-22
    • 2011-08-26
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多