为什么我们需要在ShowWindow之后调用UpdateWindow?

时间:2012-06-20 11:22:47

标签: windows winapi

ShowWindow(g_hWnd, 1);
UpdateWindow(g_hWnd);

我想知道为什么我们需要在UpdateWindow之后致电ShowWindow

4 个答案:

答案 0 :(得分:8)

完全没有必要,没有它,你的窗户会画得很好。

如果您的程序在创建窗口之后但在进入消息循环之前执行了大量操作,您将看到一个小的好处。用户需要注意一些事情。启动画面是更典型的方法。

答案 1 :(得分:5)

ShowWindow不会重新绘制窗口。对UpdateWindow的调用会向窗口发送WM_PAINT消息,从而重新绘制它。

答案 2 :(得分:5)

通常,仅当消息队列为空时,系统才会发送WM_PAINT。在正常情况下这是足够好的,它实际上优化了很多不必要的重绘。队列中的消息通常会改变应用程序状态,这通常会导致部分窗口无效,从而导致另一个绘制(因此用户看到新的应用程序状态)。因此重绘只是在处理完所有这些消息之后才发生,并且系统认为新窗口内容将在一段时间内有效(直到另一条消息进入队列)。

但是,如果您需要立即强制WM_PAINT并绕过上述逻辑,则可以通过调用WM_PAINT强制发送UpdateWindow()(如果存在无效区域)。

答案 3 :(得分:0)

ShowWindow导致WM_PAINT消息,而任何使窗口先前隐藏的部分可见的消息。 UpdateWindow会立即发送任何未完成的绘制消息,直到绘制处理完成直到返回。如果没有调用UpdateWindow,则直到您的程序进入消息循环之前,都不会收到该消息。这样可以避免响应用户的任何可能的延迟。