Visa enhetskontexter
Ett program hämtar en visnings-DC genom att anropa funktionen BeginPaint, GetDCeller GetDCEx och identifiera det fönster där motsvarande utdata visas. Vanligtvis hämtar ett program endast en visnings-DC när det måste rita i klientområdet. Man kan dock få en fönsterenhetskontext genom att anropa funktionen GetWindowDC. När programmet har ritats klart måste det frigöra domänkontrollanten genom att anropa funktionen EndPaint eller ReleaseDC.
Det finns fem typer av domänkontrollanter för videovisningar:
- Klass
- Gemensam
- Privat
- Fönster
- Förälder
Enhetskontexter för klass
enhetskontexter för klass stöds strikt för kompatibilitet med 16-bitarsversioner av Windows. När du skriver programmet bör du undvika att använda klassens enhetskontext. använd en privat enhetskontext i stället.
Vanliga enhetskontexter
Vanliga enhetskontexter visas domänkontrollanter som underhålls i en särskild cache av systemet. Vanliga enhetskontexter används i program som utför ovanliga ritningsåtgärder. Innan systemet returnerar DC-handtaget initieras den gemensamma enhetskontexten med standardobjekt, attribut och lägen. Alla ritningsåtgärder som utförs av programmet använder dessa standardvärden såvida inte någon av GDI-funktionerna anropas för att välja ett nytt objekt, ändra attributen för ett befintligt objekt eller välja ett nytt läge.
Eftersom det bara finns ett begränsat antal vanliga enhetskontexter bör ett program släppa dem när ritningen är klar. När programmet släpper en gemensam enhetskontext går alla ändringar av standarddata förlorade.
Kontexter för privata enheter
Privata enhetskontexter visar domänkontrollanter som, till skillnad från vanliga enhetskontexter, behåller alla ändringar i standarddata även efter att ett program har släppt dem. Privata enhetskontexter används i program som utför många ritningsåtgärder, till exempel CAD-program (computer-aided design), skrivbordspubliceringsprogram, ritnings- och målningsprogram och så vidare. Privata enhetskontexter ingår inte i systemcachen och behöver därför inte släppas efter användning. Systemet tar automatiskt bort en privat enhetskontext när det sista fönstret i den klassen har förstörts.
Ett program skapar en privat enhetskontext genom att först ange CS_OWNDC fönsterklassformat när det initierar formatmallen medlem i WNDCLASS- struktur och anropar funktionen RegisterClass. (Mer information om fönsterklasser finns i fönsterklasser.)
När du har skapat ett fönster med formatmallen CS_OWNDC kan ett program anropa funktionen GetDC, GetDCExeller BeginPaint en gång för att hämta ett handtag som identifierar en privat enhetskontext. Programmet kan fortsätta att använda det här handtaget (och den associerade domänkontrollanten) tills det tar bort fönstret som skapats med den här klassen. Alla ändringar av grafiska objekt och deras attribut eller grafiska lägen behålls av systemet tills fönstret har tagits bort.
Fönsterenhetskontexter
En fönsterenhetskontext gör att ett program kan rita var som helst i ett fönster, inklusive det icke-tillfälliga området. Fönsterenhetskontexter används vanligtvis av program som bearbetar WM_NCPAINT och WM_NCACTIVATE meddelanden för windows med anpassade icke-tillfälliga områden. Användning av en fönsterenhetskontext rekommenderas inte för något annat ändamål. För mer information; se GetWindowDC.
Överordnade enhetskontexter
En överordnad enhetskontext gör det möjligt för ett program att minimera den tid som krävs för att konfigurera urklippsregionen för ett fönster. Ett program använder vanligtvis överordnade enhetskontexter för att påskynda ritningen för kontrollfönster utan att kräva en privat enhet eller en klassenhetskontext. Systemet använder till exempel överordnade enhetskontexter för push-knapp och redigeringskontroller. Överordnade enhetskontexter är endast avsedda att användas med underordnade fönster, aldrig med popup-fönster på toppnivå eller popup-fönster. För mer information; se överordnade visningsenhetens kontexter.