Blokada aktualizacji okna
Blokada aktualizacji okna jest tymczasowym zawieszeniem rysunku w oknie. System używa blokady, aby zapobiec rysowaniu innych okien na prostokątze śledzenia za każdym razem, gdy użytkownik przenosi lub zmienia rozmiar okna. Aplikacje mogą używać blokady, aby uniemożliwić rysowanie, jeśli przeprowadzają podobne operacje przenoszenia lub określania rozmiaru przy użyciu własnych okien.
Aplikacja używa funkcji LockWindowUpdate, aby ustawić lub wyczyścić blokadę aktualizacji okna, określając okno do zablokowania. Blokada ma zastosowanie do określonego okna i wszystkich okien podrzędnych. Po ustawieniu blokady funkcje GetDC i BeginPaint zwracają kontekst urządzenia wyświetlania z widocznym regionem, który jest pusty. Biorąc pod uwagę to, aplikacja może nadal rysować w oknie, ale wszystkie dane wyjściowe są obcięte. Blokada będzie się powtarzać, dopóki aplikacja nie wyczyści jej, wywołując LockWindowUpdate, określając null dla okna. Mimo że LockWindowUpdate wymusza, aby widoczny region okna był pusty, funkcja nie sprawia, że określone okno jest niewidoczne i nie czyści bit stylu WS_VISIBLE.
Po ustawieniu blokady aplikacja może użyć funkcji GetDCEx z wartością DCX_LOCKWINDOWUPDATE, aby pobrać kontekst urządzenia wyświetlania w celu narysowania przez zablokowane okno. Dzięki temu aplikacja może narysować prostokąt śledzenia podczas przetwarzania komunikatów za pomocą klawiatury lub myszy. System używa tej metody, gdy użytkownik przenosi okna i rozmiary. GetDCEx pobiera kontekst urządzenia wyświetlania z pamięci podręcznej kontekstu urządzenia wyświetlania, więc aplikacja musi jak najszybciej zwolnić kontekst urządzenia po rysunku.
Gdy blokada aktualizacji okna jest ustawiona, system tworzy skumulowany prostokąt ograniczenia dla każdego zablokowanego okna. Po wyczyszczeniu blokady system używa tego prostokąta ograniczenia, aby ustawić region aktualizacji dla okna i jego okien podrzędnych, wymuszając ostateczne WM_PAINT komunikat. Jeśli skumulowany prostokąt ograniczenia jest pusty (oznacza to, że jeśli nie wystąpił rysunek podczas ustawiania blokady), region aktualizacji nie jest ustawiony.