即使HWND已经过验证,UpdateWindow()也会发送WM_PAINT消息吗?

时间:2015-06-24 22:58:23

标签: c winapi

我想立即在HWND上绘制图像(当函数返回时,图像就会被绘制)。所以我正在考虑使用UpdateWindow()来做,正如我所读到的,UpdateWindow()将通过直接调用Window Procedure发送WM_PAINT消息,而不是通过在消息队列中放置WM_PAINT消息。 / p>

但有人认为我不确定,UpdateWindow()文件说明如下:

  

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

什么"空"手段?这是否意味着验证?如果是,我应该在致电InvalidateRect()之前致电UpdateWindow()吗?

1 个答案:

答案 0 :(得分:1)

如果没有标记为无效的更新区域,则UpdateWindow不执行任何操作,正如文档所述。如果您先拨打InvalidateRect,则更新区域不会为空,UpdateWindow会按预期触发WM_PAINT

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

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