Dela via


Enhetskontexter för klassvisning

Genom att använda en enhetskontextkan ett program använda en enhetskontext för en enda visning för varje fönster som tillhör en angiven klass. Klassenhetskontexter används ofta med kontrollfönster som ritas med samma attributvärden. Precis som privata enhetskontexter minimerar klassenhetskontexter den tid som krävs för att förbereda en enhetskontext för ritning.

Systemet tillhandahåller en klassenhetskontext för ett fönster om det tillhör en fönsterklass som har CS_CLASSDC formatmall. Systemet skapar enhetskontexten när du skapar det första fönstret som tillhör klassen och använder sedan samma enhetskontext för alla senare skapade fönster i klassen. Inledningsvis har klassenhetskontexten samma standardvärden för attribut som en gemensam enhetskontext, men programmet kan ändra dessa när som helst. Systemet bevarar alla ändringar, förutom urklippsregionen och enhetens ursprung, tills det sista fönstret i klassen har förstörts. En ändring som görs för ett fönster gäller för alla fönster i den klassen.

Ett program kan hämta handtaget till klassens enhetskontext med hjälp av funktionen GetDC när som helst efter att det första fönstret har skapats. Programmet kan behålla och använda handtaget utan att släppa det eftersom klassenhetskontexten inte ingår i cacheminnet för visningsenhetens kontext. Om programmet skapar ett nytt fönster i samma fönsterklass måste programmet hämta klassens enhetskontext igen. Om du hämtar enhetskontexten anges rätt enhetsursprung och urklippsregion för det nya fönstret. När programmet hämtar klassenhetskontexten för ett nytt fönster i klassen kan enhetskontexten inte längre användas för att rita i det ursprungliga fönstret utan att hämta den igen för det fönstret. I allmänhet måste ett program, varje gång det måste ritas i ett fönster, uttryckligen hämta klassenhetskontexten för fönstret.

Program som använder klassenhetskontexter bör alltid anropa BeginPaint- vid bearbetning av ett WM_PAINT meddelande. Funktionen anger rätt enhetsursprung och urklippsregion för fönstret och innehåller uppdateringsregionen. Programmet bör också anropa EndPaint för att återställa caret om BeginPaint gömt den. EndPaint har ingen annan effekt på en klassenhetskontext.

Systemet skickar klassenhetskontexten när WM_ERASEBKGND skickas till programmet, vilket gör att de aktuella attributvärdena kan påverka alla ritningar som utförs av programmet eller systemet när det här meddelandet bearbetas. Eftersom ett fönster har en privat enhetskontext kan ett program använda GetDCEx- för att tvinga systemet att returnera en gemensam enhetskontext för fönstret som har en klassenhetskontext.

Användning av klassenhetskontexter rekommenderas inte.