窗口更新锁

窗口更新锁是在窗口中绘制的临时挂起。 每当用户移动窗口或调整窗口大小时,系统会使用锁来防止其他窗口在跟踪矩形上绘制。 如果应用程序使用自己的窗口执行类似的移动或大小调整操作,则可以使用锁来阻止绘制。

应用程序使用 LockWindowUpdate 函数来设置或清除窗口更新锁,并指定要锁定的窗口。 锁适用于指定的窗口及其所有子窗口。 设置锁后, GetDCBeginPaint 函数返回显示设备上下文,其中可见区域为空。 鉴于此,应用程序可以继续在窗口中绘制,但会剪切所有输出。 锁将一直保留,直到应用程序通过调用 LockWindowUpdate(指定窗口的 NULL )将其清除。 尽管 LockWindowUpdate 强制窗口的可见区域为空,但函数不会使指定的窗口不可见,也不会清除WS_VISIBLE样式位。

设置锁定后,应用程序可以使用 GetDCEx 函数(具有DCX_LOCKWINDOWUPDATE值)检索显示设备上下文,以在锁定的窗口上绘制。 这允许应用程序在处理键盘或鼠标消息时绘制跟踪矩形。 当用户移动和调整窗口大小时,系统会使用此方法。 GetDCEx 从显示设备上下文缓存中检索显示设备上下文,因此应用程序必须在绘制后尽快释放设备上下文。

设置窗口更新锁时,系统会为每个锁定的窗口创建累积边界矩形。 清除锁后,系统会使用此边界矩形设置窗口及其子窗口的更新区域,从而强制WM_PAINT消息。 如果累积边界矩形为空 (即,如果在) 设置锁时未发生绘制,则不设置更新区域。