窗口更新锁
窗口更新锁 是窗口中绘图的临时挂起。 每当用户移动窗口或调整窗口大小时,系统就会使用锁来防止其他窗口在跟踪矩形上绘制。 如果应用程序使用自己的窗口执行类似的移动或大小调整作,则应用程序可以使用锁来防止绘图。
应用程序使用 LockWindowUpdate 函数来设置或清除窗口更新锁,并指定要锁定的窗口。 锁适用于指定窗口及其所有子窗口。 设置锁后,GetDC,BeginPaint 函数返回显示设备上下文,其中可见区域为空。 考虑到这一点,应用程序可以继续在窗口中绘制,但所有输出都会被剪裁。 该锁一直保留,直到应用程序通过调用 lockWindowUpdate来清除它,并为窗口指定 NULL。 尽管 LockWindowUpdate 强制窗口的可见区域为空,但该函数不会使指定的窗口不可见,并且不会清除WS_VISIBLE样式位。
设置锁定后,应用程序可以使用具有DCX_LOCKWINDOWUPDATE值的 GetDCEx 函数来检索显示设备上下文以在锁定的窗口上绘制。 这样,应用程序就可以在处理键盘或鼠标消息时绘制跟踪矩形。 当用户移动和调整窗口大小时,系统会使用此方法。 GetDCEx 从显示设备上下文缓存中检索显示设备上下文,因此应用程序必须在绘图后尽快释放设备上下文。
设置窗口更新锁时,系统将为每个锁定窗口创建累积边界矩形。 清除锁后,系统使用此边界矩形设置窗口及其子窗口的更新区域,强制最终 WM_PAINT 消息。 如果累积边界矩形为空(也就是说,如果在设置锁时未发生绘图),则不会设置更新区域。