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

background image

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 (xy). 

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

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.
 żą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,
 żądana wysokość czcionki w jednostkach użytkownika,
 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)
 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)
 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