• Nie Znaleziono Wyników

Regiony i okna

W dokumencie WINDOWS GDI 4 (Stron 53-56)

Mamy jeszcze kilka funkcji związanych z regionami GDI.

Rysowanie z użyciem regionów

Regiony mogą służyć do rysowania za pośrednictwem tych funkcji:

¾ PaintRgn() wypełnia region pędzlem wybranym w kontekście urządzenia

¾ FillRgn() wypełnia region podanym pędzlem

¾ FrameRgn() kreśli obramowanie wokół regionu przy użyciu podanego pędzla

¾ InvertRgn() odwraca kolory (jak InvertRect()) w obszarze regionu

Regiony i okna

Do łączenia regionów i okien służą funkcje:

¾ SetWindowRgn() ustawia nowy region, wyznaczający kształt okna

¾ GetWindowRgn() pobiera region okna

***

Zakańczamy już ten przydługi wstęp do opisu biblioteki Windows GDI. W następnym podrozdziale zajmiemy się już konkretami, czyli rysowaniem prymitywów. Wreszcie więc ujrzymy cokolowiek na naszych ekranach :)

Prymitywy

To, czym się teraz będzię zajmowac, dla wielu programistów (głównie niezbyt zaawansowanych) jest niemal tożsame z całą biblioteką GDI. Jak wiemy, nie jest to prawda, jednak nie da się ukryć, że prymitywy graficzne są jej najważniejszą częścią. To przecież naturalne, że narzędzie graficzne oceniamy przede wszystkim po tym, co

możemy przy jego pomocy rysować. Bogate możliwości wyświetlania kształtów graficznych są więc niezwykle ważne.

Window GDI jest pod tym względem bardzo rozwiniętą biblioteką, mogącą zarówno kreślić zgeometryzowane kształty figur, jak również rastrowe bitmapy czy wreszcie napisy tekstowe. Dla każdego z tych prymitywów istnieje poza tym wiele opcji regulujących ich prezencję.

Niniejszy podrozdział poświęcimy tym strategicznym elementom GDI, jakimi są prymitywy. Omówimy tu osobno figury geometryczne, bitmapy oraz tekst.

Figury geometryczne

Najbardziej wektorowy charakter ze wszystkich prymitywów w Windows GDI zachowują figury geometryczne. Są one całkowicie niewrażliwe na skalowanie czy przesunięcie, zatem mogą być rysowane w dowolnym rozmiarach i w dowolnych miejscu.

W matematyce figury na płaszczyźnie są opisane odpowiednimi równaniami, ale nie musimy ich znać, aby rysować takie kształty. Biblioteka GDI zawiera sporo funkcji wyręczających nas w tym zadaniu - wiele z nich poznamy w tej sekcji.

Zanim jednak to się stanie, musimy sobie powiedzieć co nieco o dwóch ważnych obiektach, które wiążą się z kwestią rysowania figur geometrycznych w Windows GDI.

Tymi obiektami są pióra i pędzle.

Pióro

GDI pozwala na rysowanie linii prostych oraz krzywych. Takie linie mogą mieć określone atrybuty, jak na przykład kolor. Decyduje o nich obiekt kontekstu urządzenia zwany piórem.

Pióro (ang. pen) kontroluje właściwości rysowanych linii: ich grubość, kolor (ewentualnie deseń) oraz styl.

Pióra są w GDI reprezentowane poprzez uchwyty typu HPEN.

Chcąc zatem rysować różne typy linii, musimy odpowiednio zmodyfikować właściwości pióra. Jest ich niewiele, więc w GDI najczęściej będziemy po prostu tworzy nowe, swoje własne pióro i wybierać je dla danego kontekstu urządzenia. Po tym wszystkie linie będą kreślone przy użyciu tego właśnie nowowybranego pióra.

Korzystanie z piór

Typowa kolejność kroków przy korzystaniu z własnego pióra sprowadza się zatem do:

¾ stworzenia pióra

¾ wybrania go w używanym kontekście urządzenia

¾ narysowania figur

¾ odłożenia pióra z kontekstu, czyli wybranie w nim poprzednio ustawionego pióra

¾ usunięcia pióra

Wyjaśnimy sobie tutaj każdy z tych kroków, oczywiście z wyjątkiem samego rysowania figur, gdyż to jest tematem prawie całej pozostałej części sekcji.

Tworzenie pióra

Do utworzenia nowego pióra możemy wykorzystać funkcję CreatePen() i tak też będziemy czynić najczęściej. Oto prototyp tej funkcji:

HPEN CreatePen(int fnPenStyle, int nWidth,

COLORREF crColor);

Umożliwia ona stworzenie pióra kreślącego linie o podanej grubości, kolorze i stylu. Te cechy pióra wyznaczają trzy parametry funkcji:

typ parametr opis

fnPenStyle Ten parametr okresla styl pióra, tj. rysowanych przy jego pomocy linii. Możliwe wartości ujmuje następna tabelka.

int

nWidth

Tutaj podajemy grubość linii pióra w jednostkach logicznych.

Jeżeli chcemy użyć innego stylu pióra niż domyślny jednolity (PS_SOLID, ewentualnie także PS_INSIDEFRAME), to najlepiej podać tu 0, gdyż jeśli szerokość linii przekroczy jedną jednostkę

urządzenia (zwykle piksel), inny styl niż

PS_SOLID/PS_INSIDEFRAME nie będzie mógł być zastosowany i zostanie wybrany PS_SOLID. W przypadku podania zera grubość

linii wyniesie natomiast jeden piksel i wszystko będzie w porzadku, niezależnie od wartości fnPenStyle.

COLORREF crColor W tym parametrze określamy kolor linii rysowanych przez pióro.

Tabela 61. Parametry funkcji CreatePen()

Czym jest styl pióra?… To po prostu pewien sposób na okreslenie ciągłości linii. GDI udostępnia kilka takich styli, przedstawia je poniższa tabelka:

flaga styl linia PS_NULL brak linii

PS_SOLID linia ciągła

PS_DASH linia przerywana (kreski) PS_DOT linia kropkowana PS_DASHDOT kreska-kropka PS_DASHDOTDOT kreska-kropka-kropka PS_INSIDEFRAME linia ciągła

Tabela 62. Style zwykłych piór w Windows GDI

Ostatni styl PS_INSIDEFRAME wygląda jak pierwszy, ale jest między nimi pewna różnica.

Uwidacznia się ona przy obrysowywaniu regionów: PS_INSIDEFRAME generuje ramkę zawierającą się w całości wewnątrz regionu, zaś PS_SOLID - na zewnątrz.

Popatrzmy teraz na przykłady wykorzystania funkcji CreatePen() do tworzenia piór:

// tworzy pióro rysujące grubą czarną kreską

HPEN hpenCzarnyFlamaster = CreatePen(PS_SOLID, 5, 0x0);

// pióro kreślone najcieńszą możliwą, czerwoną linię

HPEN hpenCienkaCzerwonaLinia = CreatePen(PS_SOLID, 0, RGB(255, 0, 0));

// bardzo gruba linia w kolorze zielonym

HPEN hpenPasZieleni = CreatePen(PS_SOLID, 10, RGB(0, 255, 0));

// wykropkowana linia w kolorze magenty

HPEN hpenKarmazynoweKropki = CreatePen(PS_DOT, 0, RGB(255, 0, 255));

// normalna niebieska kreska

HPEN hpenAtrament = CreatePen(PS_SOLID, 1, RGB(0, 0, 255));

Jak widać, utworzenie własnego pióra jest bardzo proste.

Identycznie do CreatePen() działa funkcja CreatePenIndirect(). Zamiast trzech parametrów przyjmuje ona jedną strukturę LOGPEN, zawierają pola odpowiadające tym parametrom. Funkcja ta może być użyteczna, jeżeli np. chcemy zapisać nasze pióra w pliku na dysku.

W dokumencie WINDOWS GDI 4 (Stron 53-56)

Powiązane dokumenty