Grażyna Kamińska, Paweł Fritzkowski
Grafika komputerowa
Klasa Graphics2D
Środki do realizacji grafiki wektorowej dostępne w klasie
Graphics2D
W systemie Windows rysowanie w oknach programów odbywa się za pośrednictwem graficznego interfejsu urządzenia (GDI,
ang. Graphics Device Interface). Z punktu widzenia programisty, GDI to zestaw wielu użytecznych funkcji. Wykonują one bezpo
średnio operacje graficzne w obszarze okna, ale wymagają podania uchwytu tzw. kontekstu urządzenia (ang. device context). Kon
tekst urządzenia jest pewnego rodzaju pośrednikiem między rzeczywistym urządzeniem (np. monitorem) a funkcjami GDI.
W celu dogodnej realizacji grafiki wektorowej stworzono klasę
Graphics2D, a w niej zdefiniowano metody, które nazywać bę
dziemy dalej graficznymi. Choć są one oparte na funkcjach GDI, to listy ich parametrów nie zawierają uchwytu kontekstu urządze
nia. Metody te można podzielić na następujące grupy:
-
funkcje graficzne, które służą do rysowania obiektów i przemieszczania kursora,
-
funkcje służące do określania stylu (atrybutów) obiektów,
-
funkcje, które odgrywają rolę organizacyjną,
-
funkcje służące do wyprowadzania tekstu,
-
funkcje spełniające rolę informacyjną.
Wszystkie metody graficzne zdefiniowane w klasie
Graphics2D są niestatyczne, tzn. wywoływane są na rzecz obiektu klasy
Graphics2D. Utworzenie takiego obiektu wymaga użycia:
-
konstruktora bezparametrowego
Graphics2D gr;
lub
Graphics2D gr= Graphics2D();
a następnie wykorzystania metody
SetWindow w celu przekazania do obiektu (tylko ten jeden raz) uchwytu kontekstu
urządzenia i zakresu obszaru roboczego okna (obiekt klasy
WindowRange):
gr.SetWindow(hdc, &wr);
hdc – uchwyt kontekstu urządzenia,
&wr – adres obiektu klasy WindowRange.
-
konstruktora z parametrami takimi, jak argumenty metody
SetWindow:
Graphics2D gr(hdc, &wr);
lub
Graphics2D gr= Graphics2D(hdc, &wr);
Działanie funkcji graficznych dotyczy zawsze okna, dla którego utworzono obiekt klasy
Graphics2D. Poniższy fragment kodu
przedstawia sposób użycia omawianej klasy:
. . .
// Pobranie uchwytu kontekstu urządzenia na podstawie uchwytu okna
HDC hdc= GetDC(hwnd);
// Utworzenie obiektu klasy Graphics2D dla danego kontekstu i zakresu okna
Graphics2D gr(hdc, &wr);
// wywołanie metody obiektu gr
gr.NazwaMetody(arg1, arg2, ...)
// wywołanie destruktora obiektu gr
gr.~Graphics2D();
ReleaseDC(hwnd, hdc);
. . .
A. Funkcje służące do rysowania obiektów i przemieszczania kursora
Funkcje tej grupy służą do kreślenia obiektów, nazywanych także prymitywami. Należą do niej metody:
DrawPoint
MoveTo
DrawLineTo
DrawLine
DrawArc
DrawArc2
DrawPolyline
1
Grażyna Kamińska, Paweł Fritzkowski
Grafika komputerowa
Klasa Graphics2D
DrawTriangle
DrawRectangle
DrawEllipse
DrawEllipse2
DrawCircle
DrawPolygon
Uwagi
1.
Pojawiający się w opisie funkcji graficznych termin „współrzędne punktu” oznacza współrzędne w aktualnie obowiązującym
układzie, zdefiniowanym za pomocą metody
SetRange obiektu klasy WindowRange.
2.
W przypadku, gdy parametry obiektu zostały tak określone, że w całości bądź w części nie mieści się on w bieżącym obszarze
graficznym, następuje obcięcie obiektu do rozmiaru zdefiniowanego obszaru.
void DrawPoint(float x, float y)
x, y – współrzędne punktu w układzie współrzędnych użytkownika
Metoda rysuje pojedynczy punkt w miejscu określonym przez współrzędne (x, y).
void MoveTo(float x, float y)
x, y – wyrażone w układzie współrzędnych użytkownika współrzędne punktu
Metoda powoduje zmianę położenia kursora, bez żadnego widocznego efektu na ekranie. Po jej wykonaniu kursor zajmuje położenie
(x, y).
void DrawLineTo(float x, float y)
x, y – współrzędne końca kreślonego odcinka
Funkcja kreśli odcinek łączący aktualne położenie kursora z punktem o wskazanych współrzędnych. Po wykreśleniu odcinka kursor
znajduje się w jego punkcie końcowym (x, y).
void DrawLine(float x1, float y1, float x2, float y2)
x1, y1 – współrzędne początku kreślonego odcinka.
X2, y2 – współrzędne końca kreślonego odcinka.
Metoda rysuje odcinek łączący punkty o wskazanych współrzędnych. Po wykreśleniu odcinka kursor znajduje się w jego punkcie
końcowym (x2, y2).
void DrawArc(float x, float y, float r, float ang0, float ang)
x, y – współrzędne środka łuku,
r – długość promienia łuku,
ang0 – kąt początkowy łuku (w stopniach),
ang – kąt rozwarcia łuku (w stopniach)
Metoda kreśli łuk okręgu, mając dane współrzędne środka, promień, kąt początkowy łuku i kąt rozwarcia. Kąt rozwarcia odmierzany
jest w kierunku przeciwnym do ruchu wskazówek zegara.
void DrawArc(float x1, float y1, float x2, float y2, float ang0, float ang)
x1, y1, x2, y2 – współrzędne dwóch przeciwległych wierzchołków prostokąta ograniczającego pełną elipsę,
ang0 – kąt początkowy łuku (w stopniach),
ang – kąt rozwarcia łuku (w stopniach)
Metoda kreśli łuk eliptyczny, przy czym wyobrażalna elipsa ograniczona jest przez prostokąt o podanych wierzchołkach. Końce łuku
wyznaczone są na podstawie kąta początkowego i kąta rozwarcia.
void DrawArc2(float x, float y, float a, float b, float ang0, float ang)
x, y – współrzędne środka łuku.
a, b – długości półosi elipsy, na której oparto łuk.
ang0 – kąt początkowy łuku (w stopniach).
ang – kąt rozwarcia łuku (w stopniach).
Funkcja rysuje łuk eliptyczny, mając dane współrzędne środka, długości półosi pełnej elipsy oraz kąt początkowy i kąt rozwarcia.
void DrawPolyline(float * X, float * Y, int n)
X, Y – wskaźniki do tablic (wektorów) zawierających współrzędne kolejnych punktów łamanej,
2
Grażyna Kamińska, Paweł Fritzkowski
Grafika komputerowa
Klasa Graphics2D
n – liczba punktów łamanej.
Funkcja kreśli łamaną (polilinię), łącząc kolejne punkty o wskazanych współrzędnych, zapamiętanych w tablicach. Metoda nie zamy
ka łamanej.
void DrawTriangle(float x1, float y1, float x2, float y2, float x3, float y3)
x1, y1, x2, y2, x3, y3 – współrzędne kolejnych wierzchołków tworzonego trójkąta.
Funkcja rysuje trójkąt, mając dane współrzędne jego wierzchołków.
void DrawRectangle(float x1, float y1, float x2, float y2)
x1, y1, x2, y2 – współrzędne dwóch przeciwległych wierzchołków prostokąta.
Metoda rysuje prostokąt, mając dane współrzędne jego dwóch przeciwległych wierzchołków.
void DrawEllipse(float x1, float y1, float x2, float y2)
x1, y1, x2, y2 – współrzędne dwóch przeciwległych wierzchołków prostokąta ograniczającego elipsę.
Metoda kreśli elipsę na podstawie współrzędnych dwóch przeciwległych wierzchołków wyobrażalnego prostokąta ograniczającego
elipsę.
void DrawEllipse2(float x, float y, float a, float b)
x, y – współrzędne środka tworzonej elipsy,
a, b – długości półosi elipsy.
Metoda kreśli elipsę na podstawie współrzędnych jej środka oraz długości półosi.
void DrawCircle(float x, float y, float r)
x, y – współrzędne środka rysowanego okręgu,
r – długość promienia okręgu.
Metoda rysuje okrąg o promieniu r oraz środku w punkcie (x, y).
void DrawPolygon(float * X, float * Y, int n)
X, Y – wskaźniki do tablic (wektorów) zawierających współrzędne kolejnych wierzchołków wielokąta.
n – liczba wierzchołków wielokąta.
Funkcja rysuje dowolny nieregularny wielokąt. Wielokąt jest określony przez liczbę wierzchołków oraz współrzędne wierzchołków,
które zadaje się w postaci dwóch tablic jednowymiarowych. Dopuszcza się występowanie punktów przecięcia łamanej będącej brze
giem tworzonego wielokąta.
B. Funkcje służące do określania stylu obiektów
Wygląd rysowanego obiektu można zmieniać poprzez zmianę jego atrybutów (właściwości). Klasa
Graphics2D wykorzystuje
następujące atrybuty:
a) dla punktu: kolor,
b) dla linii: kolor, styl i grubość linii,
c) dla wielokątów, koła i elipsy
- kolor linii,
- styl linii,
- grubość linii,
- kolor wypełnienia,
- styl i wzorzec wypełnienia.
Podczas pracy z kontekstem urządzenia, system korzysta z tzw. obiektów GDI. Są to struktury danych, mogące przechowywać
wartości określonych atrybutów. Do obiektów GDI zalicza się m. in.:
-
pióro (pen), którego właściwości odpowiadają atrybutom linii,
-
pędzel (brush), definiujący właściwości wypełnienia figur.
Korzystając z klasy
Graphics2D, nie musimy posługiwać się tymi obiektami bezpośrednio – metody graficzne robią to za nas.
Atrybuty są ustawiane modalnie to znaczy, że są globalnymi zmiennymi stanu, które zachowują swoje wartości tak długo, dopóki
nie zostaną zmienione. Wprowadzona zmiana wartości danego atrybutu dotyczy tylko tych obiektów, które są rysowane po dokonaniu
tej zmiany. Właściwości tych obiektów, które były wykreślone wcześniej, nie podlegają modyfi
kacjom. Taki sposób ustalania
wartości atrybutów, zwalnia programistę z uciążliwego obowiązku definiowania listy atrybutów dla każdego obiektu. Li
sty parametrów procedur graficznych są dzięki temu krótsze, a proces programowania grafiki przebiega sprawniej.
3
Grażyna Kamińska, Paweł Fritzkowski
Grafika komputerowa
Klasa Graphics2D
Do grupy metod określających atrybuty, czyli styl wyprowadzanych obrazów należą:
SetPen
SetSolidPen
SetWhitePen
SetBlackPen
SetNullPen
SetBrush
SetSolidBrush
SetWhiteBrush
SetBlackBrush
SetNullBrush.
void SetPen(COLORREF col, int style, int width = 1)
col – kolor tworzonego pióra,
style – styl pióra,
width – grubość pióra, domyślna wartość grubości linii wynosi 1.
Metoda tworzy pióro o danych właściwościach i ustawia je jako bieżące.
Kolor podaje się za pomocą makra
RGB (24-bitowy system barw RGB) lub korzystając z predefiniowanych stałych klasy
Graphics2D (np. Graphics2D::cl_BLACK, Graphics2D::cl_RED).
Istnieje możliwość wyboru pomiędzy jednym z sześciu stylów linii, a parametr
style przyjmuje wartości z przedziału od 0 do 5.
Wartość może być wyrażona bezpośrednio w postaci liczby, bądź w postaci symbolicznej nazwy stałej o odpowiedniej wartości.
Tab. 1. Styl pióra
Rodzaj linii
Wartość
Identyfikator
ciągła
0
PS_SOLID
kreskowana
1
PS_DASH
punktowa
2
PS_DOT
kropka-kreska
3
PS_DASHDOT
dwie kropki-kreska
4
PS_DASHDOTDOT
brak linii
5
PS_NULL
Przykładowe wywołanie metody:
gr.SetPen(RGB(255, 0, 0), PS_DASHDOT, 3);
lub
gr.SetPen(Graphics2D::cl_RED, PS_DASHDOT, 3);
void SetSolidPen(COLORREF col, int width = 1)
col – kolor tworzonego pióra,
width – grubość pióra, wartość domyślna to 1
Metoda ustawia pióro, którego styl określa stała
PS_SOLID.
void SetWhitePen()
void SetBlackPen()
Obie funkcje ustalają aktualnie obowiązujące pióro, którego styl określa stała
PS_SOLID. Kolor tworzonych piór to odpowiednio biel
i czerń.
void SetNullPen()
Metoda ustawia pióro przeźroczyste (
PS_NULL).
void SetBrush(COLORREF col, int style, LONG hatch = BS_SOLID)
col – kolor linii pędzla,
style – styl pędzla,
hatch – wzór pędzla, wartością domyślną jest BS_SOLID
Metoda ustala aktualnie obowiązujący pędzel o danych właściwościach.
4
Grażyna Kamińska, Paweł Fritzkowski
Grafika komputerowa
Klasa Graphics2D
Kolor podaje się za pomocą makra
RGB lub korzystając z predefiniowanych stałych klasy Graphics2D. Parametr style określa
styl pędzla i może być równy jednemu z czterech poniższych identyfikatorów.
Tab. 2. Styl pędzla
Styl pędzla
Wartość
Identyfikator
wzór złożony z linii
0
BS_HATCHED
pędzel przeźroczysty
1
BS_NULL
wzór określony przez bitmapę
2
BS_PATTERN
jednokolorowy pełny pędzel
3
BS_SOLID
Parametr
hatch określa wzór pędzla. Jeżeli wybrano BS_HATCHED, przekazujemy do funkcji jeden z identyfikatorów z poniższej
tabeli. Gdy
style = BS_PATTERN, należy podać uchwyt bitmapy, na której podstawie zostanie utworzony pędzel. Natomiast wybór
BS_SOLID lub BS_NULL powoduje, że wartość hatch jest ignorowana.
Tab. 3. Wzór pędzla
Wypełnienie wnętrza
Wartość
Identyfikator
kreskowanie poziome
0
HS_HORIZONTAL
kreskowanie pionowe
1
HS_VERTICAL
kreskowanie ukośne pod kątem -45°
2
HS_FDIAGONAL
kreskowanie ukośne pod kątem 45°
3
HS_BDIAGONAL
kratka
4
HS_CROSS
kratka ukośna
5
HS_DIAGCROSS
Przykładowe wywołanie funkcji:
gr.SetBrush(Graphics2D::cl_RED, BS_HATCHED, HS_CROSS);
void SetSolidBrush(COLORREF col)
col – kolor pędzla.
Funkcja ustawia jednokolorowy pędzel. Kolor podaje się za pomocą makra
RGB lub korzystając z predefiniowanych stałych klasy
Graphics2D.
void SetWhiteBrush()
void SetBlackBrush()
Obie funkcje ustalają aktualnie obowiązujący jednokolorowy pędzel. Kolor tworzonych pędzli to odpowiednio biel i czerń.
void SetNullBrush()
Metoda ustawia przeźroczysty pędzel (
BS_NULL).
Klasa
Graphics2D umożliwia też pobieranie uchwytów tworzonych przez nią obiektów GDI i ponowne ich użycie. Służą do tego
funkcje:
GetPen
GetBrush
SetPen
SetBrush
DeletePen
DeleteBrush
HPEN GetPen()
Metoda zwraca uchwyt aktualnie obowiązującego pióra (obiekt typu
HPEN).
HBRUSH GetBrush()
Metoda zwraca uchwyt aktualnie obowiązującego pędzla (obiekt typu
HBRUSH).
5
Grażyna Kamińska, Paweł Fritzkowski
Grafika komputerowa
Klasa Graphics2D
void SetPen(HPEN hpen)
hpen – uchwyt pióra.
Funkcja ustawia zdefiniowane już pióro jako aktualnie obowiązujące. Przykład użycia funkcji:
gr.SetPen(Graphics2D::cl_GREEN, PS_DASH, 2);
HPEN hpen= gr.GetPen();
gr.DrawLineTo(50, 100);
gr.SetSolidPen(Graphics2D::cl_BLUE);
gr.DrawLineTo(100, 0);
gr.SetPen(hpen);
gr.DrawLineTo(50, 100);
void SetBrush(HBRUSH hbr)
hbr – uchwyt pędzla.
Funkcja ustawia zdefiniowany już pędzel jako aktualnie obowiązujący.
bool DeletePen(HPEN hpen)
hpen – uchwyt pióra.
Funkcja usuwa pióro. Jeżeli jest to bieżące pióro, zostaje ono zastąpione domyślnym piórem czarnym i dopiero usunięte. Funkcja
zwraca
true, jeżeli operacja powiodła się.
bool DeleteBrush(HBRUSH hbr)
hbr – uchwyt pędzla.
Funkcja usuwa pędzel. Jeżeli jest to pędzel bieżący, zastępuje się go domyślnym pędzlem przeźroczystym i dopiero usuwa. Metoda
zwraca
true, jeżeli operacja powiodła się.
Uwaga
Obiekt klasy
Graphics2D samodzielnie usuwa tworzone przez siebie obiekty GDI przy ich zmianie. Mechanizm ten nie zadziała
jedynie po uprzednim użyciu metod
GetPen czy GetBrush. Zatem posługując się bezpośrednio uchwytami piór i pędzli, należy na
końcu skorzystać odpowiednio z funkcji
DeletePen i DeleteBrush.
C. Funkcje organizacyjne
Do tej grupy należą metody:
SetWindow
GetDC
GetWindowRange
Update
FillBackground
SetBackground.
void SetWindow(HDC hdc, WindowRange * wr)
hdc – uchwyt kontekstu urządzenia.
wr – wskaźnik do obiektu zakresu okna.
Metoda pozwala przypisać obiektowi klasy
Graphics2D kontekst urządzenia oraz obiekt zakresu okna.
HDC GetDC()
Funkcja zwraca uchwyt kontekstu urządzenia skojarzonego z obiektem klasy
Graphics2D.
WindowRange* GetWindowRange()
Metoda zwraca wskaźnik do zakresu okna skojarzonego z obiektem klasy
Graphics2D.
void Update()
Metoda uaktualnia macierz transformacji ze współrzędnych okna do współrzędnych użytkownika. Wywołanie tej funkcji jest niezbęd
ne, jeżeli nastąpiła zmiana zakresu współrzędnych użytkownika od czasu utworzenia bieżącego obiektu klasy
Graphics2D.
void FillBackground(COLORREF col = cl_WHITE)
col – żądany kolor tła.
Funkcja czyści aktualny obszar roboczy posługując się jednokolorowym pełnym pędzlem. Kolor biały jest domyślnym kolorem
wypełnienia.
6
Grażyna Kamińska, Paweł Fritzkowski
Grafika komputerowa
Klasa Graphics2D
void SetBackground(COLORREF col = cl_WHITE)
col – żądany kolor tła.
Funkcja ustawia kolor używany do wypełnienia luk w przypadku linii przerywanych oraz do wypełnienia tła tekstu. Kolor biały jest
domyślnym kolorem tła.
D. Funkcje służące do wyprowadzania tekstu
Do tej grupy zaliczyć można funkcje
TextOut,
które wyświetlają tekst w obszarze roboczym oraz metody służące do zmiany czcionki i jej właściwości:
SetFont
SetFontColor
SetTextAlignment.
void TextOut(LPCTSTR text, Range2D * range, UINT format = DT_NOCLIP)
text – wskaźnik do łańcucha znaków, który ma zostać wyświetlony,
range – wskaźnik do obiektu definiującego prostokątny zakres,
format – kombinacja flag definiujących formatowanie tekstu.
Funkcja wyświetla tekst, używając aktualnie obowiązującej czcionki. Tekst jest formatowany względem podanego prostokątnego
obszaru.
Obiekt klasy
Range2D tworzy się za pomocą poniższego konstruktora:
Range2D(float x1, float y1, float x2, float y2),
gdzie
x1, y1, x2, y2 są współrzędnymi dwóch przeciwległych wierzchołków prostokąta w układzie współrzędnych użytkownika.
Argument
format może stanowić kombinację opisanego w tabeli zestawu flag. Domyślna wartość parametru to DT_NOCLIP.
Przykład użycia funkcji:
Range2D r(-10, 0, 60, 20);
gr.TextOut(L“Sample text”, &r, DT_RIGHT | DT_VCENTER);
Tab. 4. Formatowanie tekstu
Identyfikator
Znaczenie
DT_BOTTOM
Wyrównanie tekstu do dolnej krawędzi prostokąta wyświe
tlania (tylko łącznie z flagą
DT_SINGLELINE).
DT_CENTER
Wyśrodkowanie tekstu w poziomie
wewnątrz prostokąta.
DT_EXPANDTABS
Uwzględnienie znaków poziomej tabulacji. Znak tabulacji
odpowiada 8 znakom spacji.
DT_EXTERNALLEADING
Powiększenie odstępu między wierszami o domyślny odstęp
pomiędzy wierszami dla aktualnej czcionki.
DT_LEFT
Wyrównanie tekstu do lewej krawędzi prostokąta.
DT_RIGHT
Wyrównanie tekstu do prawej krawędzi prostokąta.
DT_NOCLIP
Wyświetlany tekst nie jest obcinany przez prostokąt wyświe
tlania.
DT_SINGLELINE
Uwzględnienie tylko pierwszej linii tekstu.
DT_TOP
Wyrównanie tekstu do górnej krawędzi prostokąta. Działa
wyłącznie dla pojedynczego wiersza tekstu.
DT_VCENTER
Wypośrodkowanie tekstu w pionie. Działa wyłącznie dla po
jedynczego wiersza tekstu.
DT_WORDBREAK
Łamanie wierszy, jeżeli jakieś słowa wychodzą poza kra
wędź prostokąta.
7
Grażyna Kamińska, Paweł Fritzkowski
Grafika komputerowa
Klasa Graphics2D
void TextOut(float x, float y, LPCTSTR text)
x, y – współrzędne punktu, w którym rozpocznie się wyświetlanie tekstu,
text – wskaźnik do łańcucha znaków, który ma zostać wyświetlony.
Funkcja wyświetla tekst, używając aktualnie obowiązującej czcionki. Pozycja tekstu względem podanego punktu zależy od ustawień
dokonanych poprzez metodę
SetTextAlignment.
void TextOut(float x, float y, LPCTSTR text, int align = TA_LEFT)
x, y – współrzędne punktu, w którym rozpocznie się wyświetlanie tekstu.
text – wskaźnik do łańcucha znaków, który ma zostać wyświetlony.
align – flaga określająca sposób wyrównania tekstu w poziomie.
Funkcja wyświetla tekst, używając aktualnie obowiązującej czcionki. Pozycja tekstu względem podanego punktu zależy od wartości
parametru
align (TA_LEFT, TA_CENTER lub TA_RIGHT). Domyślnie tekst jest wyrównywany do lewej.
void SetFont(LPCTSTR name, float h, int style = fs_NORMAL)
name – wskaźnik do łańcucha określającego nazwę kroju pisma.
h – żądana wysokość czcionki w jednostkach użytkownika.
style – flaga określająca styl czcionki.
Metoda zmienia aktualnie obowiązującą czcionkę. Parametr
name określa nazwę czcionki, np. „Arial” czy „Times New Roman”.
Wysokość czcionki
h przeliczana jest z jednostek użytkownika na piksele. Argument style może być kombinacją flag z poniższej
tabeli. Podobnie jak zestaw kolorów, flagi te zdefiniowano w klasie
Graphics2D (np. Graphics2D::fs_BOLD). Kombinacja stałej
fs_NORMAL z jakąkolwiek inną nie daje żadnego efektu.
Tab. 5. Styl czcionki
Identyfikator
Znaczenie
fs_NORMAL
Styl normalny - brak dodatkowych
atrybutów czcionki
fs_BOLD
Pogrubienie
fs_ITALIC
Kursywa
fs_UNDERLINE
Podkreślenie
fs_STRIKE_OUT
Przekreślenie
Przykładowe wywołanie funkcji:
gr.SetFont(L”Arial Narrow”, 10, Graphics2D::fs_ITALIC + Graphics2D::fs_BOLD);
void SetFont(LPCTSTR name, float h, int style, COLORREF col)
name – wskaźnik do łańcucha określającego nazwę kroju pisma.
h – żądana wysokość czcionki w jednostkach użytkownika.
style – flaga określająca styl czcionki.
col – żądany kolor tekstu.
Funkcja zmienia aktualnie obowiązującą czcionkę. Argumenty
name, h oraz style mają takie znaczenie, jak wyżej. Dodatkowo
należy określić kolor tekstu – używając makra
RGB lub stałych klasy Graphics2D.
void SetFont(LPCTSTR name, float h, float w, int style, float angle,
DWORD charset = DEFAULT_CHARSET,
DWORD pitchAndFamily = DEFAULT_PITCH | FF_DONTCARE)
name – wskaźnik do łańcucha określającego nazwę kroju pisma,
h – żądana wysokość czcionki w jednostkach użytkownika,
w – szerokość znaków czcionki w jednostkach użytkownika,
style – flaga określająca styl czcionki,
angle – kąt obrotu tekstu (w stopniach),
charset – zestaw znaków, jaki ma być użyty dla czcionki,
pitchAndFamily – rodzina czcionki i szerokość znaków.
Funkcja zmienia aktualnie obowiązującą czcionkę. Argumenty
name, h oraz style mają takie znaczenie, jak poprzednio.
Analogicznie do wysokości
h, szerokość w podaje się w jednostkach użytkownika. Wartość 0 oznacza domyślną szerokość znaków.
Parametr
angle oznacza kąt nachylenia tekstu względem poziomu.
Przykładowe wartości argumentu
charset podano w tabeli poniżej.
8
Grażyna Kamińska, Paweł Fritzkowski
Grafika komputerowa
Klasa Graphics2D
Tab. 6. Zestawy znaków
Identyfikator
Wartość
ANSI_CHARSET
0
DEFAULT_CHARSET
1
SYMBOL_CHARSET
2
OEM_CHARSET
255
EASTEUROPE_CHARSET
238
MAC_CHARSET
77
Ostatni parametr składa się z dwóch części połączonych za pomocą operatora sumy logicznej – domyślnie:
DEFAULT_PITCH | FF_DONTCARE.
Pierwsza część określa, czy znaki czcionki mają mieć stałą szerokość.
Tab. 7. Szerokość znaków
Identyfikator
Znaczenie
DEFAULT_PITCH
Ustawienie domyślne
FIXED_PITCH
Stała szerokość znaków
VARIABLE_PITCH
Zmienna szerokość znaków
Natomiast druga część dotyczy rodziny, do której należy czcionka (tab. 8).
Tab. 8. Rodziny czcionek
Identyfikator
Znaczenie
FF_DONTCARE
Ustawienie domyślne
FF_ROMAN
Zmienna szerokość znaków, zaokrąglone ogonki
FF_SWISS
Zmienna szerokość znaków, brak zaokrąglenia
FF_MODERN
Stała szerokość znaków
FF_SCRIPT
Symulowane pismo ręczne
FF_DECORATIVE
Styl ozdobny
Argument
pitchAndFamily jest brany pod uwagę, gdy parametr name ma wartość zero – wtedy system dopasowuje czcionkę do
wymogów określonych przez
pitchAndFamily.
void SetFontColor(COLORREF col)
col – kolor tekstu.
Metoda zmienia aktualnie obowiązujący kolor czcionki. Kolor podaje się używając makra
RGB lub stałych klasy Graphics2D.
void SetTextAlignment(UINT align)
align – kombinacja flag określająca wyrównanie tekstu.
Funkcja zmienia sposób poziomego i pionowego justowania tekstu. Wartość argumentu ustala się, wykorzystując opisane niżej
identyfikatory. Wybrany może być wyłącznie jeden z nich dla zdefiniowania wyrównania poziomego i jeden dla pionowego.
Tab. 9. Wyrównanie tekstu
Identyfikator
Położenie punktu odniesienia
TA_BASELINE
Linia bazowa tekstu
TA_BOTTOM
Dolna krawędź prostokąta ograniczającego
TA_TOP
Górna krawędź prostokąta ograniczającego
TA_CENTER
Wyrównany w poziomie ze środkiem prostokąta ograniczającego
TA_LEFT
Lewa krawędź prostokąta ograniczającego
TA_RIGHT
Prawa krawędź prostokąta ograniczającego
9
Grażyna Kamińska, Paweł Fritzkowski
Grafika komputerowa
Klasa Graphics2D
Tak jak w przypadku piór i pędzli, możliwe jest pobranie uchwytu czcionki i ponowne jej użycie. Służą do tego funkcje:
GetFont
SetFont
DeleteFont.
HFONT GetFont()
Metoda zwraca uchwyt aktualnie obowiązującej czcionki.
void SetFont(HFONT hf)
hf – uchwyt czcionki.
Funkcja ustawia zdefiniowaną czcionkę jako aktualnie obowiązującą.
bool DeleteFont(HFONT hf)
hf – uchwyt czcionki.
Funkcja usuwa czcionkę. Jeżeli jest to czcionka bieżąca, zastępuje się ją domyślną czcionką systemową, a następnie usuwa. Metodę
należy wywołać tylko w przypadku wcześniejszego użycia funkcji
GetFont. Funkcja zwraca true, jeżeli operacja powiodła się.
E. Funkcje informacyjne
Metody zaliczane do tej grupy dostarczają informacji, które można wykorzystać w dalszych etapach procesu rysowania. W tym sen
sie niektóre z omówionych już metod można nazwać informacyjnymi, np.
GetPen, GetBrush, GetFont. Poniżej wyjaśniono działa
nie kilku innych funkcji:
GetPenColor
GetBrushColor
GetFontColor
XfromPixels
YfromPixels
XtoPixels
YtoPixels
FromPixels
ToPixels
COLORREF GetPenColor()
COLORREF GetBrushColor()
COLORREF GetFontColor()
Funkcje zwracają kolor aktualnie obowiązujących: pióra, pędzla oraz czcionki.
float XfromPixels(int xp)
xp – pozioma współrzędna pikselowa punktu w układzie okna.
Funkcja zwraca współrzędną użytkownika odpowiadającą danej współrzędnej pikselowej.
float YfromPixels(int yp)
yp – pionowa współrzędna pikselowa punktu w układzie okna.
Funkcja zwraca współrzędną użytkownika odpowiadającą danej współrzędnej pikselowej.
int XtoPixels(float x)
x – pozioma współrzędna punktu w obowiązującym układzie użytkownika.
Funkcja zwraca współrzędną pikselową odpowiadającą danej współrzędnej użytkownika.
int YtoPixels(float y)
y – pionowa współrzędna punktu w obowiązującym układzie użytkownika.
Funkcja zwraca współrzędną pikselową odpowiadającą danej współrzędnej użytkownika.
void FromPixels(int xp, int yp, float * x, float * y)
xp, yp – współrzędne pikselowe w układzie okna,
x, y – wskaźniki do zmiennych określających współrzędne punktu w układzie użytkownika.
Funkcja przelicza podane współrzędne pikselowe na współrzędne w układzie użytkownika.
void ToPixels (float x, float y, int * xp, int * yp)
x, y – współrzędne punktu w układzie użytkownika.
xp, yp – wskaźniki do zmiennych całkowitych określających współrzędne pikselowe w układzie okna.
Funkcja przelicza podane współrzędne w układzie użytkownika na współrzędne pikselowe.
10