ShowWindow(g_hWnd, 1);
UpdateWindow(g_hWnd);
我想知道为什么我们需要调用UpdateWindow
以下ShowWindow
?
这是完全没有必要的,没有它,你的窗户会很好地涂漆。
如果您的程序在创建窗口之后但在进入消息循环之前执行大量操作,您会从中看到一点点好处。用户有东西要看。闪屏是更典型的方法。
ShowWindow
不重绘窗口。调用UpdateWindow
将WM_PAINT
消息发送到窗口并重新绘制它。
通常,系统WM_PAINT
仅在消息队列为空时发送。在正常情况下,这已经足够了,它实际上优化了很多不必要的重绘。队列中的消息通常会改变应用程序状态,这通常会导致窗口的一部分无效,从而导致另一次绘画(因此用户看到新的应用程序状态)。因此,重绘只是在处理完所有此类消息并且系统认为新窗口内容将有效一段时间后才发生(直到另一条消息进入队列)。
但是,如果您需要WM_PAINT
立即强制并绕过上述逻辑,您可以WM_PAINT
通过调用强制发送(如果存在无效区域)UpdateWindow()
。
ShowWindow 会导致 WM_PAINT 消息,而任何使先前隐藏的窗口部分可见的消息。UpdateWindow 会立即传递任何未完成的绘制消息,等待绘制处理完成直到返回。如果没有对 UpdateWindow 的调用,则在您的程序进入消息循环之前不会收到消息。这避免了响应用户的任何可能的延迟。