【问题标题】:Will UpdateWindow() send a WM_PAINT message even if the HWND is validated?即使 HWND 被验证,UpdateWindow() 是否会发送 WM_PAINT 消息?
【发布时间】:2015-06-25 07:03:51
【问题描述】:

我想立即在HWND 上绘制图像(当函数返回时,图像已经绘制好了)。所以我正在考虑使用UpdateWindow() 来做到这一点,正如我所读到的,UpdateWindow() 将通过直接调用窗口过程来发送 WM_PAINT 消息,而不是通过将 WM_PAINT 消息放入消息队列中。

但是有一个我不确定的想法,UpdateWindow() 文档说如下:

如果更新区域为空,则不发送消息。

“空”是什么意思?是经过验证的意思吗?如果是这样,我应该在拨打UpdateWindow()之前先拨打InvalidateRect()吗?

【问题讨论】:

    标签: c winapi


    【解决方案1】:

    如文档所述,如果没有标记为无效的更新区域,则 UpdateWindow 什么也不做。如果您先调用InvalidateRect,则更新区域不会为空,UpdateWindow 将按预期触发WM_PAINT

    如果您想强制重绘立即完成,最简单的方法是使用RedrawWindow 函数。这使您可以同时将区域标记为无效,并在命令返回之前强制进行重绘。例如,这将强制重绘整个客户区:

    RedrawWindow(hWnd, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多