Kontexter för minnesenheter
Om du vill att program ska kunna placera utdata i minnet i stället för att skicka dem till en faktisk enhet använder du en särskild enhetskontext för bitmappsåtgärder som kallas minnesenhetskontext. Med en minnes-DC kan systemet behandla en del av minnet som en virtuell enhet. Det är en matris med bitar i minnet som ett program tillfälligt kan använda för att lagra färgdata för bitmappar som skapats på en normal rityta. Eftersom bitmappen är kompatibel med enheten kallas en minnes-DC ibland även för en kompatibel enhetskontext.
Minnes-DC lagrar bitmappsbilder för en viss enhet. Ett program kan skapa en minnes-DC genom att anropa funktionen CreateCompatibleDC.
Den ursprungliga bitmappen i en minnes-DC är helt enkelt en platshållare. Dess dimensioner är en bildpunkt i taget. Innan ett program kan börja rita måste det välja en bitmapp med rätt bredd och höjd i domänkontrollanten genom att anropa funktionen SelectObject. Om du vill skapa en bitmapp med lämpliga dimensioner använder du funktionen CreateBitmap, CreateBitmapIndirecteller CreateCompatibleBitmap. När bitmappen har valts i minnes-DC ersätter systemet enstaka matris med en matris som är tillräckligt stor för att lagra färginformation för den angivna rektangeln med pixlar.
När ett program skickar handtaget som returneras av CreateCompatibleDC till någon av ritningsfunktionerna visas inte de begärda utdata på enhetens rityta. I stället lagrar systemet färginformationen för den resulterande linjen, kurvan, texten eller regionen i matrisen med bitar. Programmet kan kopiera bilden som lagras i minnet tillbaka till en ritningsyta genom att anropa funktionen BitBlt, identifiera minnes-DC som källenhetskontext och ett fönster eller skärm-DC som målenhetskontext.
När du visar en DIB eller en DDB som skapats från en DIB på en palettenhet kan du förbättra hastigheten med vilken bilden ritas genom att ordna den logiska paletten så att den matchar systempalettens layout. Det gör du genom att anropa GetDeviceCaps med värdet NUMRESERVED för att hämta antalet reserverade färger i systemet. Anropa sedan GetSystemPaletteEntries och fyll i de första och sista NUMRESERVED/2-posterna i den logiska paletten med motsvarande systemfärger. Om till exempel NUMRESERVED är 20 fyller du i de första och sista 10 posterna i den logiska paletten med systemfärgerna. Fyll sedan i de återstående 256-NUMRESERVED-färgerna i den logiska paletten (i vårt exempel de återstående 236 färgerna) med färger från DIB och ange flaggan PC_NOCOLLAPSE på var och en av dessa färger.
Mer information om färg och paletter finns i Färger. Mer information om bitmappar och bitmappsåtgärder finns i Bitmappar.