Operace s grafickými objekty
Jakmile aplikace vytvoří řadič domény zobrazení nebo tiskárny, může začít kreslit na přidruženém zařízení nebo v případě řadiče domény paměti může začít kreslit na rastrovém obrázku uloženém v paměti. Před zahájením výkresu a někdy i při probíhajícím kreslení je často nutné nahradit výchozí objekty novými objekty.
Aplikace může zkoumat atributy výchozího objektu voláním GetCurrentObject a GetObject funkce. Funkce GetCurrentObject vrátí popisovač identifikující aktuální pero, štětec, paletu, rastrový obrázek nebo písmo a funkce GetObject inicializuje strukturu obsahující atributy daného objektu.
Některé tiskárny poskytují rezidentní pera, štětce a písma, která lze použít ke zlepšení rychlosti kreslení v aplikaci. K výčtu těchto objektů lze použít dvě funkce: EnumObjects a EnumFontFamilies. Pokud aplikace musí vypsat rezidentní pera nebo štětce, může volat EnumObjects funkce prozkoumat odpovídající atributy. Pokud aplikace musí vytvořit výčet rezidentního písma, může volat funkci EnumFontFamilies (která může také vytvořit výčet písem GDI).
Jakmile aplikace zjistí, že výchozí objekt potřebuje nahradit, vytvoří nový objekt voláním jedné z následujících funkcí pro vytvoření.
Grafický objekt | Funkce |
---|---|
Bitmapa | CreateBitmap, CreateBitmapIndirect, CreateCompatibleBitmap, CreateDiscardableBitmap, CreateDIBitmap |
Kartáč | CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush |
Paleta barev | CreatePalette |
Písmo | CreateFont, CreateFontIndirect |
Pero | CreatePen, CreatePenIndirect, ExtCreatePen |
Oblast | CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreatePolyPolypolygonRgn, CreateRectRgn, CreateRectRgnIndirect, CreateRoundRectRectRgnRgn |
Každá z těchto funkcí vrátí popisovač identifikující nový objekt. Jakmile aplikace načte popisovač, musí zavolat funkci SelectObject nahradit výchozí objekt. Aplikace by ale měla uložit popisovač identifikující výchozí objekt a tento popisovač použít k nahrazení nového objektu, pokud už není potřeba. Jakmile aplikace dokončí výkres s novým objektem, musí obnovit výchozí objekt voláním funkce SelectObject a potom odstranit nový objekt voláním DeleteObject funkce. Při odstraňování objektů dochází k vážným problémům s výkonem.