我想立即在HWND
上绘制图像(到函数返回时,该图像将被绘制)。因此,我正在考虑使用UpdateWindow()
进行此操作,正如我已阅读的,UpdateWindow()
将通过直接调用窗口过程而不是通过在消息队列中放置WM_PAINT消息来发送WM_PAINT消息。
但是有一种我不确定的想法,UpdateWindow()
文档说:
如果更新区域为空,则不发送消息。
“空”是什么意思?这是否意味着已通过验证?如果是这样,我应该在呼叫InvalidateRect()
之前先呼叫UpdateWindow()
吗?
最佳答案
如文档所述,如果没有标记为无效的更新区域,则UpdateWindow
不执行任何操作。如果首先调用InvalidateRect
,则更新区域将不会为空,并且UpdateWindow
将按预期触发WM_PAINT
。
如果要强制立即完成重画,最简单的方法是使用RedrawWindow
函数。这使您可以同时将区域标记为无效,并强制重画在命令返回之前进行。例如,这将强制重绘整个客户区:
RedrawWindow(hWnd, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW);