Po zapoznaniu się ogólnie z grafiką komputerową możemy przejść do poznawania GDI. W tej lekcji zajmiemy się podstawowymi obiektami w GDI, czyli narzędzami którymi będziemy rysować na naszych okienkach.

Obiekty o których mowa w tej lekcji są używane przede wszystkim przez funkcje rysujące, dlatego trzeba je najpierw poznać.

Pióro

Jest to jeden z obiektów GDI. Programiści GDI chcieli, aby rysowanie na oknie było podobne do rysowania w rzeczywistym świecie, stworzyli obiekty z relanego świata, które służą w GDI do tego samego co naprwadę, tak więc obiekt pióro wykorzystuje się do rysowania linni, np. zwykłych linni lub obwodów figur płaksich.

Pióro ma 3 cechy, które możemy określić: kolor, grubość i styl linni.

Chcąc używać jakiegoś obiektu, jak to zwykle jest w WinAPI, musimy zadeklarować uchwyt do niego i stworzyć go funkcją:
HPEN CreatePen(INT fPenStyle,INT nWidth,COLORREF crColor):

...
HPEN pioro=CreatePen(PS_SOLID,
3
,RGB(
255
,
0
,
0
));
...

Jak widać funkcja CreatePen pobiera 3 parametry. Pierwszy to styl pióra, drugi grubość, natomiast trzeci to kolor.

Oto możliwe style pióra:

PS_NULL - brak linni(piórko niewidoczne)
PS_SOLID - linia ciągłą
PS_DASH - linia przerywana
PS_DOT - linia kropkowana
PS_DASHDOT - linia składająca się naprzemian z kreski i kropki
PS_DASHDOTDOT - linia składająca się z kreski i dwóch kropek
PS_INSIDEFRAME - linia ciągła

Jeżeli chodzi o grubość linni, to zastosowanie ma on jedynie przy ciągłej nieprzerywanej linni(PS_SOLID lub PS_INSIDEFRAME), w innym przypadku lepiej podać tu 0. Grubość linni określamy w pikselach.

Przy określaniu koloru używamy makra RGB.

Pracując z obiektami w GDI(jak i innymi), musimy mieć świadomość, że my dysponujemy tylko uchwytem(numerkiem), natomiast sam obiekt jest tworzony w całkiem innym miejscu w pamięci, a nie pamięci naszego programu, dlatego każdy utworzony obiekt musimy przed zamknięciem programu zwolnić. Obiekty GDI zwalniamy funkcją:
BOOL DeleteObject(HGDIOBJ object):

...
DeleteObject(pioro);
...

Pędzel

Kolejnym narzędziem w GDI jest pędzel, służy on do wypełniania wnętrza figur zamkniętych.

Malować pędzlem możemy na 3 sposoby: jednolitym kolorem, deseniem lub bitmapą.

...
HBRUSH jednolity_kolor=CreateSolidBrush(RGB(
33
,
99
,
255
));
...

Pędzel jednolity(wypełnienie jednolitym kolorem) tworzymy funkcją CreateSolidBrush(COLORREF clColor), Jako parametr podajemy zmienną koloru, zwykle używamy tu makra RGB.

...
HBRUSH desen=CreateHatchBrush(HS_CROSS,RGB(
33
,
99
,
255
));
...

Pędzel deseniowy tworzymy funckją CreateHatchBrush, pierwszy parametr to styl, drugi kolor desenia. Oto możliwe style deseniowe:

HS_HORIZONAL - ciąg poziomy
HS_VERTICAL - ciąg pionowy
HS_CROSS - ciąg w siatkę
HS_FDIAGONAL - ciąg ukośny w dół
HS_BDIAGONAL - ciąg ukośny w góre
HS_DIAGCROSS - ciąg w kretkę

...
HBRUSH pedzel_z_bitmapy=CreatePatternBrush(bitmapa);
...

Pędzel z bitmapą tworzymy funkcją CreatePatternBrush, jako parametr podajemy uchwyt do bitmapy(o posługiwaniu się bitmapami będzie za parę lekcji). Pędzel ten wypełnia powierzchnię sąsiadującymi bitmapami.

Oczywiście po zakończeniu pracy z pędzlem musimy go zwolnić funckją DeleteObject().

Z pędzlem spotkałeś się już na początku programowania, otóż w strukture WNDCLASSEX jest uchwyt do pędzla, który wypełni powierzchnię tworzonego okna, od tej pory będziesz potrafił stworzyć własne tło okna.

...
wc.hbrBackground=CreateHatchBrush(HS_DIAGCROSS,RGB(
0
,
150
,
0
));
...

Bitmapy

Kolejnym obiektem w GDI jest bitmapa. Jest to obraz w grafice rastrowej bez żadnej kompersji. Bitmapa może służyć do wielu celów, przede wszystkim można ją wyświetlić na oknie, ale jak to zrobić, będzie dopiero za parę lekcji.

Uchwytem na bitmapę jest HBITMAP.

Czcionki

Czcinkę wykorzystujemy przy pracy z tekstem, o tym także za parę lekcji. Uchwyt na czcionkę to HFONT.

Regiony

Regiony to ostatni obiekt w GDI. Regiony służą do wyznaczania obszarów rysowania, poprzez łączenie ze sobą figur zamknietych. Za parę lekcji dowiemy sie jak z nich korzystać.