Operacje na obiektach graficznych
Gdy aplikacja utworzy wyświetlacz lub kontroler domeny drukarki, może rozpocząć rysowanie na skojarzonym urządzeniu lub, w przypadku kontrolera domeny pamięci, może rozpocząć rysowanie na mapie bitowej przechowywanej w pamięci. Jednak przed rozpoczęciem rysowania, a czasami podczas rysowania jest w toku, często konieczne jest zastąpienie domyślnych obiektów nowymi obiektami.
Aplikacja może zbadać atrybuty obiektu domyślnego, wywołując funkcje GetCurrentObject i GetObject. Funkcja GetCurrentObject zwraca uchwyt identyfikujący bieżące pióro, pędzle, paletę, mapę bitową lub czcionkę, a funkcja GetObject inicjuje strukturę zawierającą atrybuty tego obiektu.
Niektóre drukarki zapewniają pióra rezydentne, pędzle i czcionki, których można użyć do zwiększenia szybkości rysowania w aplikacji. Dwie funkcje mogą służyć do wyliczania tych obiektów: EnumObjects i EnumFontFamilies. Jeśli aplikacja musi wyliczyć pióra lub pędzle rezydentne, może wywołać funkcję EnumObjects w celu zbadania odpowiednich atrybutów. Jeśli aplikacja musi wyliczyć czcionki rezydentne, może wywołać funkcję EnumFontFamilies (która może również wyliczać czcionki GDI).
Gdy aplikacja ustali, że domyślny obiekt wymaga zastąpienia, tworzy nowy obiekt, wywołując jedną z następujących funkcji tworzenia.
Obiekt graficzny | Funkcja |
---|---|
Bitmapa | CreateBitmap, CreateBitmapIndirect, createCompatibleBitmap, CreateDiscardableBitmap, CreateDIBitmap |
Pędzel | CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush |
Paleta kolorów | CreatePalette |
Czcionka | CreateFontCreateFontIndirect |
Pióro | CreatePen, CreatePenIndirect, ExtCreatePen |
Region | CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreatePolyPolygonRgn, CreateRectRgn, CreateRectRgnIndirect, CreateRoundRectRgn |
Każda z tych funkcji zwraca uchwyt identyfikujący nowy obiekt. Po pobraniu uchwytu aplikacja musi wywołać funkcję SelectObject, aby zastąpić obiekt domyślny. Jednak aplikacja powinna zapisać uchwyt identyfikujący obiekt domyślny i użyć tego uchwytu, aby zastąpić nowy obiekt, gdy nie jest już potrzebny. Gdy aplikacja zakończy rysunek z nowym obiektem, musi przywrócić obiekt domyślny, wywołując funkcję SelectObject, a następnie usunąć nowy obiekt, wywołując funkcję DeleteObject. Nie można usunąć obiektów powoduje poważne problemy z wydajnością.