Åtgärder på grafiska objekt
När ett program har skapat en bildskärm eller skrivar-DC kan det börja rita på den associerade enheten, eller, om det gäller minnes-DC, kan det börja rita på bitmappen som lagras i minnet. Men innan ritningen börjar, och ibland när ritningen pågår, är det ofta nödvändigt att ersätta standardobjekten med nya objekt.
Ett program kan undersöka ett standardobjekts attribut genom att anropa funktionerna GetCurrentObject och GetObject. Funktionen GetCurrentObject returnerar ett handtag som identifierar aktuell penna, pensel, palett, bitmapp eller teckensnitt, och funktionen GetObject initierar en struktur som innehåller objektets attribut.
Vissa skrivare tillhandahåller pennor, penslar och teckensnitt som kan användas för att förbättra ritningshastigheten i ett program. Två funktioner kan användas för att räkna upp dessa objekt: EnumObjects och EnumFontFamilies. Om programmet måste räkna upp bosatta pennor eller penslar kan det anropa funktionen EnumObjects för att undersöka motsvarande attribut. Om programmet måste räkna upp residenta teckensnitt kan det anropa funktionen EnumFontFamilies (som också kan räkna upp GDI-teckensnitt).
När ett program har fastställt att ett standardobjekt behöver ersättas skapar det ett nytt objekt genom att anropa någon av följande skapandefunktioner.
Grafiskt objekt | Funktion |
---|---|
Bitmapp | CreateBitmap, CreateBitmapIndirect, CreateCompatibleBitmap, CreateDiscardableBitmap, CreateDIBitmap |
Borste | CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush |
Färgpalett | CreatePalette |
Teckensnitt | CreateFont, CreateFontIndirect |
Penna | CreatePen, CreatePenIndirect, ExtCreatePen |
Region | CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreatePolyPolygonRgn, CreateRectRgn, CreateRectRgnIndirect, CreateRoundRectRgn |
Var och en av dessa funktioner returnerar ett handtag som identifierar ett nytt objekt. När ett program hämtar ett handtag måste det anropa funktionen SelectObject för att ersätta standardobjektet. Programmet bör dock spara referensen som identifierar standardobjektet och använda det här handtaget för att ersätta det nya objektet när det inte längre behövs. När programmet har ritat klart med det nya objektet måste det återställa standardobjektet genom att anropa funktionen SelectObject och sedan ta bort det nya objektet genom att anropa funktionen DeleteObject. Om objekt inte tas bort orsakas allvarliga prestandaproblem.