視窗更新鎖定
視窗更新鎖定是在視窗中繪製的暫時暫停。 每當使用者移動或調整視窗大小時,系統會使用鎖定來防止其他視窗繪製追蹤矩形。 如果應用程式使用自己的視窗執行類似的移動或調整大小作業,應用程式可以使用鎖定來防止繪製。
應用程式會使用 LockWindowUpdate 函式來設定或清除視窗更新鎖定,並指定要鎖定的視窗。 鎖定會套用至指定的視窗及其所有子視窗。 設定鎖定時, GetDC 和 BeginPaint 函式會傳回顯示裝置內容,其中包含空白的可見區域。 因此,應用程式可以繼續在視窗中繪製,但會裁剪所有輸出。 鎖定會持續存在,直到應用程式呼叫 LockWindowUpdate來清除鎖定為止,並指定視窗的 Null 。 雖然 LockWindowUpdate 強制視窗的可見區域是空的,但函式不會讓指定的視窗不可見,也不會清除WS_VISIBLE樣式位。
設定鎖定之後,應用程式可以使用 GetDCEx 函式搭配 DCX_LOCKWINDOWUPDATE 值來擷取顯示裝置內容,以在鎖定的視窗上繪製。 這可讓應用程式在處理鍵盤或滑鼠訊息時繪製追蹤矩形。 當使用者移動和調整視窗大小時,系統會使用此方法。 GetDCEx 會從顯示裝置內容快取擷取顯示裝置內容,因此應用程式必須在繪圖之後儘快釋放裝置內容。
設定視窗更新鎖定時,系統會為每個鎖定的視窗建立累積周框。 清除鎖定時,系統會使用此周框來設定視窗及其子視窗的更新區域,強制最終 WM_PAINT 訊息。 如果累積周框是空的 (也就是說,如果在) 設定鎖定時未發生繪圖,則不會設定更新區域。