gk 02 graphics2d id 191746 Nieznany

background image

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

background image

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, ywyraż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, ywspół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, y1współrzędne początku kreślonego odcinka.
X2, y2współ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, ywspółrzędne środka łuku,
rdługość promienia łuku,
ang0kąt początkowy łuku (w stopniach),
angką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, y2współrzędne dwóch przeciwległych wierzchołków prostokąta ograniczającego pełną elipsę,
ang0kąt początkowy łuku (w stopniach),
angką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, ywspółrzędne środka łuku.
a, bdługości półosi elipsy, na której oparto łuk.
ang0kąt początkowy łuku (w stopniach).
angką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, Ywskaźniki do tablic (wektorów) zawierających współrzędne kolejnych punktów łamanej,

2

background image

Grażyna Kamińska, Paweł Fritzkowski

Grafika komputerowa

Klasa Graphics2D

nliczba 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, y3współ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, ywspółrzędne środka tworzonej elipsy,
a, bdł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, ywspółrzędne środka rysowanego okręgu,
rdł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, Ywskaźniki do tablic (wektorów) zawierających współrzędne kolejnych wierzchołków wielokąta.
nliczba 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

background image

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

background image

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

background image

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

background image

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 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

background image

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

background image

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

background image

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


Document Outline


Wyszukiwarka

Podobne podstrony:
bns kalisz 02 06 id 90842 Nieznany (2)
na5 pieszak 03 02 10 1 id 43624 Nieznany
24 02 2011 2 id 30494 Nieznany (2)
lab 02 php id 258739 Nieznany
gk 01 wstep id 191745 Nieznany
ei 2005 01 02 s080 id 154144 Nieznany
gk 03 obszar id 191747 Nieznany
N 109 02 WnukLipinski id 311796 Nieznany
Informacja 12 02 2008 id 213373 Nieznany
gk 04 gui id 191748 Nieznany
HYDROSFERA 02 odpowiedzi id 207 Nieznany
312[01] 02 122 id 35063 Nieznany
Zestaw 02 InzB id 587902 Nieznany
24 02 2011 id 30493 Nieznany (2)
Mechana II 03 02 14 id 290476 Nieznany
24 02 2011 W id 30592 Nieznany
bns kalisz 02 05 id 90841 Nieznany (2)
cw 02 teoria id 121357 Nieznany

więcej podobnych podstron