Vanliga enhetskontexter för visning
En gemensam enhetskontext används för ritning i klientområdet i fönstret. Systemet tillhandahåller en gemensam enhetskontext som standard för alla fönster vars fönsterklass inte uttryckligen anger ett visningsenhetskontextformat. Vanliga enhetskontexter används vanligtvis med fönster som kan ritas utan omfattande ändringar i enhetskontextattributen. Vanliga enhetskontexter är praktiska eftersom de inte kräver ytterligare minne eller systemresurser, men de kan vara obekväma om programmet måste konfigurera många attribut innan de används.
Systemet hämtar alla vanliga enhetskontexter från cacheminnet för visningsenhetens kontext. Ett program kan hämta en gemensam enhetskontext direkt efter att fönstret har skapats. Eftersom den gemensamma enhetskontexten kommer från cacheminnet måste programmet alltid släppa enhetskontexten så snart som möjligt efter ritningen. När den gemensamma enhetskontexten har släppts är den inte längre giltig och programmet får inte försöka rita med den. Om du vill rita igen måste programmet hämta en ny gemensam enhetskontext och fortsätta att hämta och släppa en gemensam enhetskontext varje gång den ritar i fönstret. Om programmet hämtar enhetskontextreferensen med hjälp av funktionen GetDC måste den använda funktionen ReleaseDC för att frigöra handtaget. På samma sätt måste programmet för varje BeginPaint--funktion använda motsvarande EndPaint- funktion.
När programmet hämtar enhetskontexten justerar systemet ursprunget så att det överensstämmer med det övre vänstra hörnet i klientområdet. Den anger också urklippsregionen så att utdata till enhetskontexten klipps till klientområdet. Alla utdata som annars skulle visas utanför klientområdet klipps bort. Om programmet hämtar den gemensamma enhetskontexten med hjälp av BeginPaintinnehåller systemet även uppdateringsregionen i urklippsregionen för att ytterligare begränsa utdata.
När ett program släpper en gemensam enhetskontext återställer systemet standardvärdena för attributen i enhetskontexten. Ett program som ändrar attributvärden måste göra det varje gång det hämtar en gemensam enhetskontext. När du släpper enhetskontexten frigörs alla ritade objekt som programmet kan ha valt i den, så programmet behöver inte släppa dessa objekt innan enhetskontexten släpps. I samtliga fall får ett program aldrig anta att den gemensamma enhetskontexten behåller nondefault-val efter att ha släppts.