Venster bijwerken vergrendelen
Een vensterupdatevergrendeling is een tijdelijke schorsing van tekenen in een venster. Het systeem gebruikt de vergrendeling om te voorkomen dat andere vensters over de rechthoek voor bijhouden tekenen wanneer de gebruiker een venster verplaatst of groter maakt. Toepassingen kunnen de vergrendeling gebruiken om tekenen te voorkomen als ze vergelijkbare verplaatsings- of groottebewerkingen uitvoeren met hun eigen vensters.
Een toepassing maakt gebruik van de LockWindowUpdate- functie om een vensterupdatevergrendeling in te stellen of te wissen, waarbij het venster wordt opgegeven dat moet worden vergrendeld. De vergrendeling is van toepassing op het opgegeven venster en alle onderliggende vensters. Wanneer de vergrendeling is ingesteld, retourneren de GetDC- en BeginPaint-functies een weergaveapparaatcontext met een zichtbaar gebied dat leeg is. Op basis hiervan kan de toepassing blijven tekenen in het venster, maar alle uitvoer wordt geknipt. De vergrendeling blijft bestaan totdat de toepassing deze wist door LockWindowUpdate-aan te roepen, waarbij NULL- voor het venster wordt opgegeven. Hoewel LockWindowUpdate het zichtbare gebied van een venster leeg laat, maakt de functie het opgegeven venster niet onzichtbaar en wordt de WS_VISIBLE stijl-bit niet gewist.
Nadat de vergrendeling is ingesteld, kan de toepassing de functie GetDCEx-, met de DCX_LOCKWINDOWUPDATE-waarde, gebruiken om een weergaveapparaatcontext op te halen om over het vergrendelde venster te tekenen. Hierdoor kan de toepassing een volgrechthoek tekenen bij het verwerken van toetsenbord- of muisberichten. Het systeem gebruikt deze methode wanneer de gebruiker vensters verplaatst en groot maakt. GetDCEx- de context van het weergaveapparaat ophaalt uit de contextcache van het weergaveapparaat, zodat de toepassing de apparaatcontext zo snel mogelijk na het tekenen vrijgeeft.
Terwijl een vensterupdatevergrendeling is ingesteld, maakt het systeem een geaccumuleerde begrenzingsrechthoek voor elk vergrendeld venster. Wanneer de vergrendeling is gewist, gebruikt het systeem deze begrenzingsrechthoek om het updategebied voor het venster en de onderliggende vensters in te stellen, waardoor een uiteindelijk WM_PAINT bericht wordt afgedwongen. Als de samengevoegde begrenzingsrechthoek leeg is (dat wil gezegd, als er geen tekening is opgetreden terwijl de vergrendeling is ingesteld), wordt het updategebied niet ingesteld.