Funkcja zwracajca zmieniajca warto warto MM_TEXT SetMapMode GetMapMode. (0, 0) SetWindowOrgEx OffsetWindowOrgEx

Podobne dokumenty
Sposoby przekazywania parametrów w metodach.

Interfejs graficzny w systemie Windows (GDI - Graphics Device Interface)

Formaty plików graficznych - wprowadzenie

geometry a w przypadku istnienia notki na marginesie: 1 z 5

Podstawowe obiekty AutoCAD-a

Graficzny składnik Windows Pośredniczy między aplikacją, a sterownikiem urządzenia Logiczne obiekty tworzone przez aplikację są urzeczywistniane w

obsług dowolnego typu formularzy (np. formularzy ankietowych), pobieranie wzorców formularzy z serwera centralnego,

Jeden obraz jest wart tysiąca słów... Tomasz Dzieniak Toruń, 21 grudnia 2011 r.

Program do konwersji obrazu na cig zero-jedynkowy

Do obsługi plików BMP należy stworzyć klasę przechowującą zawartość obrazu i udostępniającą następujące metody:

Wesoła szkoła i przyjaciele, kl. 2 Plan wynikowy zaj komputerowych

Reprezentacje danych multimedialnych - grafika. 1. Terminologia 2. Obrazy czarno-białe 3. Obrazy kolorowe 4. Paleta 5.

Klonowanie MAC adresu oraz TTL

5. Kliknij czarny trójkt umieszczony w prawym dolnym rogu ikony narzdzia Wypełnienie i - z rozsuwanej palety - wybierz pozycj Wypełnienie jednolite.

Rys1 Rys 2 1. metoda analityczna. Rys 3 Oznaczamy prdy i spadki napi jak na powyszym rysunku. Moemy zapisa: (dla wzłów A i B)

Instrukcja obsługi programu DIALux 2.6

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD

Zastosowanie programu Microsoft Excel do analizy wyników nauczania

Instrukcja obsługi programu Pilot PS 5rc

stopie szaro ci piksela ( x, y)

mgr inż. Tomasz Jaworski Klasy graficzne GDI 1. Interfejs urządzeń graficznych (GDI) 2. Kontekst urządzenia

Wprowadzanie i zmiany faktur z zakupu, wydruk rejestru zakupu

Kurs WWW. Paweł Rajba.

Zadania do wykonaj przed przyst!pieniem do pracy:

Planowanie adresacji IP dla przedsibiorstwa.

Podstawy Informatyki Wykład V

zdefiniowanie kilku grup dyskusyjnych, z których chcemy odbiera informacje, dodawanie, usuwanie lub edycj wczeniej zdefiniowanych grup dyskusyjnych,

rysunek. Standardowym Przybornika Elips.

System midzybankowej informacji gospodarczej Dokumenty Zastrzeone MIG DZ ver Aplikacja WWW ver. 2.1 Instrukcja Obsługi

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

1. Przypisy, indeks i spisy.

Instrukcja obsługi programu CalcuLuX 4.0

Szybkie tworzenie grafiki w GcIde

1. Opis okna podstawowego programu TPrezenter.

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).

Poniszy rysunek przedstawia obraz ukoczonej powierzchni wykorzystywanej w wiczeniu.

Rysowanie punktów na powierzchni graficznej

ECDL/ICDL Przetwarzanie tekstów Moduł B3 Sylabus - wersja 5.0

Arc Funkcja rysujca łuk elipsy wpisanej w prostokt o danych wierzchołkach i danych kocach łuku

Windows w szeciu krokach - plan wykładu. 3. Podstawowe aplikacje i typowe działania. 3. Podstawowe aplikacje i typowe działania.

GRAFIKA RASTROWA. WYKŁAD 1 Wprowadzenie do grafiki rastrowej. Jacek Wiślicki Katedra Informatyki Stosowanej

Formaty obrazów rastrowych biblioteki PBM

Cechy systemu Windows

Jarosław Kuchta Podstawy Programowania Obiektowego. Podstawy grafiki obiektowej

Autorzy: Kraków, stycze 2007 Łukasz Dziewanowski Filip Haftek (studenci AGH III roku kierunku Automatyka i Robotyka)

INSTRUKCJA OBSŁUGI PROGRAMU C-STATION

Rasteryzacja (ang. rasterization or scan-conversion) Grafika rastrowa. Rysowanie linii (1) Rysowanie piksela

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

CYKL ZAJ POZNAJEMY POWER POINT

Stawiajc krzyyk w odpowiedniej wartoci mona zapisa dowolnego binarnego reprezentanta liczby dziesitnej x x x x x

Maskowanie i selekcja

KATEGORIA OBSZAR WIEDZY

Rasteryzacja (ang. rasterization or scan-conversion) Grafika rastrowa. Rysowanie linii (1) Rysowanie piksela. Rysowanie linii: Kod programu

Poradnik korzystania z serwisu UNET: Dostp do poczty elektronicznej ze strony WWW

Dodawanie grafiki i obiektów

4CMSystem. Podrcznik uytkownika. Strona projektu: Realizacja projektu:

Jak dodać własny szablon ramki w programie dibudka i dilustro

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

SZYBKI START AUTOCAD 2000

Obsługa programu Paint. mgr Katarzyna Paliwoda

This is a very early and incomplete version.

Opis Edytora postaci Logomocji

Grafika rastrowa (bitmapa)-

Instrukcja obsługi programu MechKonstruktor

Wymagania edukacyjne na ocenę z informatyki klasa 3

ECDL/ICDL Przetwarzanie tekstów Moduł B3 Sylabus - wersja 6.0

Cykl lekcji informatyki w klasie IV szkoły podstawowej. Wstęp

1. Umieść kursor w miejscu, w którym ma być wprowadzony ozdobny napis. 2. Na karcie Wstawianie w grupie Tekst kliknij przycisk WordArt.

Przed instalacj naley sprawdzi wersj posiadanych sterowników urzdzenia. Powinna by nie starsza ni:

Program SMS4 Monitor

Photoshop. Tworzenie tekstu

Przewodnik po soczewkach

Aby załoy nowy projekt wybieramy klikamy na napisie, nastpnie wybieramy Opcje Nowy projekt. Podajemy nazw projektu i zatwierdzamy klawiszem OK.

Opera Wykorzystanie certyfikatów niekwalifikowanych w oprogramowaniu Opera wersja 1.1 UNIZETO TECHNOLOGIES SA

Instrukcja obsługi dodatku InsERT GT Smart Documents

Bazy danych. Plan wykładu. Pierwsza posta normalna. Druga posta normalna. Wykład 7: Sprowadzanie do postaci normalnych. DDL, DML

Komputerowa Ksiga Podatkowa Wersja 11.4 ZAKOCZENIE ROKU

Wstawianie nowej strony

Lekcja 12 - POMOCNICY

Przenoszenie, kopiowanie formuł

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego

Grafika komputerowa. Dla DSI II

Twoja instrukcja użytkownika HP PAVILION DV6-1215SA

ROZSZERZANIE MOŻLIWOŚCI...

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.3

Sylabus Moduł 2: Przetwarzanie tekstów

CorelDRAW. wprowadzenie

3. Instalator rozpocznie proces instalacji

Zaznaczanie komórek. Zaznaczenie pojedynczej komórki polega na kliknięciu na niej LPM

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.3

ELEMENT SYSTEMU BIBI.NET. Instrukcja Obsługi

Proces tworzenia programu:

8. Dynamiczne generowanie grafiki, cz. 2

Program Sprzeda wersja 2011 Korekty rabatowe

Przycisk pracy. Przycisk stopu/kasowanie

Wektor o pocztku i kocu odpowiednio w punktach. Prosta zawierajca punkty p i q: pq Półprosta zaczynajca si w punkcie p i zawierajca punkt q:.

Kolory elementów. Kolory elementów

Laboratorium Ergonomii Politechniki Wrocławskiej (

Jeżeli pole Krawędź będzie zaznaczone uzyskamy obramowanie w całej wstawianej tabeli

Transkrypt:

5. Grafika 1/20 Graphics Device Interface (GDI interfejs urzdzenia graficznego) jest podsystemem Windows odpowiedzialnym za wywietlanie grafiki (włcznie z napisami) na ekranie i wydrukach. Kolory w Windows s pamitane w 32 bitowych liczbach całkowitych bez znaku (unsigned long) Opisujcy je typ danych ma nazw COLORREF. Warto tego typu zwraca makro RGB, które pobiera trzy argumenty reprezentujce barw czerwon, zielon i niebiesk: COLORREF RGB(BYTE byred, BYTE bygreen, BYTE byblue); Makrodefinicje: GetRValue, GetGValue, GetBValue pozwalaj obliczy z wartoci koloru RGB warto odpowiednich barw podstawowych (0-255). Przy omawianiu komunikatów poznalimy dwa podstawowe sposoby pobrania uchwytu kontekstu urzdzenia. Gdy program otrzymuje HDC, Windows tworzy kontekst urzdzenia przyjmujc wartoci domylne dla kadego jego atrybutu. W programie kad z tych wartoci mona odczyta lub zmieni.

5. Grafika 2/20 Atrybut DC Tryb odwzorowania (mapping mode) Punkt pocztkowy okna (window origin) Punkt pocztkowy widoku (viewport origin) Rozcigło okna (window extents) Rozcigło widoku (viewport extents) Warto domylna Funkcja Funkcja zwracajca zmieniajca warto warto MM_TEXT SetMapMode GetMapMode (0, 0) SetWindowOrgEx OffsetWindowOrgEx GetWindowOrgEx (0, 0) SetViewportOrgEx GetViewportOrgEx OffsetViewportOrgEx (1, 1) SetWindowExtEx SetMapMode ScaleWindowExtEx (1, 1) SetViewportExtEx SetMapMode GetWindowExtEx GetViewportExtEx ScaleViewportExtEx Pióro (pen) BLACK_PEN SelectObject SelectObject Pdzel (brush) WHITE_BRUSH SelectObject SelectObject Czcionka (font) SYSTEM_FONT SelectObject SelectObject Mapa bitowa (bitmap) Bieca pozycja pióra Tryb malowania tła (background mode) Kolor tła (background color) Kolor napisów (text color) Tryb krelenia (drawing mode) Tryb rozcigania mapy bitowej (stretching mode) Tryb wypełniania wieloktów (polygon fill mode) Odstp midzy znakami Punkt pocztkowy pdzla (Brush Origin) Region obcinania (clipping region) Brak SelectObject SelectObject (0, 0) MoveToEx LineTo PolylineTo PolyBezierTo GetCurrentPositionEx OPAQUE SetBkMode GetBkMode Biały SetBkColor GetBkColor Czarny SetTextColor GetTextColor R2_COPYPEN SetROP2 GetROP2 BLACKONWHIT E SetStretchBltMode GetStretchBltMode ALTERNATE SetPolyFillMode GetPolyFillMode 0 SetTextCharacterExtr GetTextCharacterExtr a a (0, 0) SetBrushOrgEx GetBrushOrgEx Brak SelectObject SelectClipRgn IntersectClipRgn OffsetClipRgn ExcludeClipRect SelectClipPath GetClipBox

5. Grafika 3/20 W momencie gdy zwalniamy DC funkcjami EndPaint, ReleaseDC wszelkie zmiany atrybutów DC s tracone. Moemy je zapamita okrelajc w stylach klasy: CS_OWNDC kade okno danej klasy bdzie miało swój własny DC. Kontekst ten bdzie istnie dopóki nie usuniemy okna, a jego atrybuty pozostan stałe, dopóki si ich jawnie nie zmieni. lub: CS_CLASSDC dana klasa ma własny kontekst urzdzenia dzielony midzy wszystkie okna tej klasy. Czasami pojawia si konieczno zmiany atrybutów na krótka chwile i ponowne przywrócenie poprzednich atrybutów. Dokonamy tego stosujc funkcje: int isaveid = SaveDC(hdc); // zmiana atrybutów i działania na zmienionym DC RestoreDC(hdc, -1); BOOL RestoreDC(HDC hdc, int nsaveddc) nsaveddc wskazuje na stan DC do odtworzenia. Jeeli >0 wskazuje na warto zwrócon przez SaveDC, jeeli jest to warto ujemna wskazuje który zapisany DC ma odtworzy np. 1 spowoduje odtworzenie ostatnio zapisanego DC. W trakcie rysowania przyda si funkcja któr poznalimy wczeniej (w.2) zwracajca współrzdne obszaru roboczego okna w stosunku do lewego górnego rogu obszaru roboczego okna (lprect.left = lprect.top = 0) BOOL GetClientRect(HWND hwnd, LPRECT lprect) funkcja odczytujca parametry systemu: int GetSystemMetrics(int nindex); nindex - indeks parametru, którego warto chcemy otrzyma, np. SM_CXSCREEN zwraca szeroko ekranu funkcja odczytujca lub ustawiajca zadany parametr BOOL SystemParametersInfo(UINT uiaction, UINT uiparam, PVOID pvparam,uint fwinini); uiaction - jaki parametr naley odczyta lub ustawi uiparam, pvparam - parametry zalene od podejmowanej akcji fwinini - czy aktualizowa ustawienia (rozesłanie komunikatu: WM_SETTINGCHANGE) np. SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0) pobiera rozmiar obszaru roboczego (bez paska zada)

5. Grafika 4/20 Tryb odwzorowania. Wikszo współrzdnych i wymiarów uywanych we wszystkich funkcjach GDI jest wyraone w jednostkach logicznych. Windows zmienia jednostki logiczne na jednostki urzdzenia, czyli na piksele. Sposób zmiany współrzdnych zaley m.in. od trybu odwzorowania. Windows wyrónia osiem trybów odwzorowywania: Kierunek wzrostu wartoci Tryb odwzorowania Jednostki logiczne na osi x na osi y MM_TEXT (domylny) piksel w prawo w dół MM_LOMETRIC 0,1 mm w prawo do góry MM_HIMETRIC 0,01 mm w prawo do góry MM_LOENGLISH 0,01 cala w prawo do góry MM_HIENGLISH 0,001 cala w prawo do góry MM_TWIPS 1/1440 cala w prawo do góry MM_ISOTROPIC dowolne (x=y) do wyboru do wyboru - mona zmieni rozcigło okna/widoku MM_ANISOTROPIC dowolne (x!=y) do wyboru do wyboru - mona zmieni rozcigło okna/widoku int SetMapMode(HDC hdc, int imapmode) pozwala na zmian trybu odwzorowania.. int GetMapMode(HDC hdc) zwraca tryb odwzorowania. Tryb odwzorowania okrela odwzorowanie okna (współrzdne logiczne) na widok (współrzdne urzdzenia) za pomoc: xviewport =(xwindow xwindorg) * (xviewext / xwinext) + xvieworg yviewport =(ywindow ywindorg) * (yviewext / ywinext) + yvieworg xwindow, ywindow przekształcany punkt we współrzdnych logicznych xviewport, yviewport wynik przekształcenia we współrzdnych urzdzenia. xwindorg, ywindorg, xvieworg, yvieworg pocztek okna i widoku xviewext, yviewext, xwinext, ywindext rozcigło widoku i okna. Kada rozcigło z osobna nic nie znaczy, ale stosunek rozcigłoci widoku do rozcigłoci okna okrela czynnik skalujcy niezbdny do przeliczania. BOOL DPtoLP(HDC hdc, LPPOINT lppoints, int inumber) funkcja przekształca inumber punktów urzdzenia zawartych w tablic lppoints na punkty logiczne. BOOL LPtoDP(HDC hdc, LPPOINT lppoints, int inumber) funkcja przekształca inumber punktów logicznych zawartych w tablic lppoints na punkty urzdzenia.

5. Grafika 5/20 Jeeli chcesz wywietli obraz w calach lub milimetrach bez zmiany trybu mona dziki funkcji GetDeviceCaps uzyska potrzebne informacje i samemu odpowiednio wyskalowa rysunek. int GetDeviceCaps(HDC hdc, int nindex) zwraca informacje na temat DC. nindex indeks danej o któr pytamy HORZSIZE szeroko w mm VERTSIZE wysoko w mm HORZRES szeroko w pikselach VERTRES wysoko w liniach rastra BITSPIXEL liczba bitów na piksel (głbia koloru) PLANES liczba warstw koloru NUMBRUSHES liczba pdzli urzdzenia NUMPENS liczba piór urzdzenia NUMMARKERS liczba znaczników urzdzenia NUMFONTS liczba czcionek urzdzenia NUMCOLORS liczba kolorów urzdzenia PDEVICESIZE rozmiar struktury urzdzenia ASPECTX wzgldna szeroko piksela ASPECTY wzgldna wysoko piksela ASPECTXY wzgldna przektna piksela LOGPIXELSX punkty na cal w poziomie LOGPIXELSY punkty na cal w pionie SIZEPALETTE liczba pozycji palety NUMRESERVED zarezerwowane pozycje palety COLORRES faktyczna rozdzielczo koloru BOOL ClientToScreen(HWND hwnd, LPPOINT lppoint) przekształca współrzdne wskazane przez lppoint obszaru roboczego na współrzdne ekranu. BOOL ScreenToClient(HWND hwnd, LPPOINT lppoint) przekształca współrzdne ekranu na współrzdne obszaru roboczego.

5. Grafika 6/20 Pióro. Do rysowania w kontekcie urzdzenia uywamy pióra. Pióro okrela kolor linii, jej grubo oraz styl (cigła, kropkowana, przerywana). W systemie mamy trzy predefiniowane pióra: BLACK_PEN domylny, czarne cigłe linie gruboci jednego piksela. WHITE_PEN NULL_PEN pióro jest przeroczyste. Oby otrzyma w programie predefiniowane pióro wykorzystujemy funkcje GetStockObject. HPEN hpen = GetStockObject(WHITE_PEN); Aby dane pióro było biece w kontekcie urzdzenia korzystamy z funkcji SelectObject. HPEN hpenold = SelectObject(hdc, hpen); HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj) funkcja ustawia obiekt GDI w okrelonym kontekcie urzdzenia i zwraca uchwyt obiektu, który został zastpiony. Obiektem moe by bitmapa, czcionka, pióro, pdzel. HPEN CreatePen(int PenStyle, int iwidth, COLORREF rgbcolor) - tworzy pióro logiczne które moe nastpnie by wybrane w DC przy pomocy SelectObject. PenStyle okrela styl linii: PS_SOLID PS_DASH PS_DOT... PS_DASHDOT PS_DASHDOTDOT PS_NULL PS_INSIDEFRAME - odpowiada PS_SOLID. W przypadku prostokta jego wymiary s zmniejszane tak aby ramka mieciła si wewntrz podanych wymiarów. iwidth dla PS_SOLID, PS_NULL i PS_INSIDEFRAME grubo linii. 0 oznacza jeden piksel. HPEN CreatePenIndirect( CONST LOGPEN * logpen) - tworzy pióro logiczne które moe nastpnie by wybrane w DC przy pomocy SelectObject, przy pomocy struktury LOGPEN. typedef struct taglogpen { UINT PenStyle; POINT iwidth; // system ignoruje iwidth.y i bierze pod uwag jedynie iwidth.x COLORREF rgbcolor; } LOGPEN, *PLOGPEN; HPEN ExtCreatePen(DWORD dwpenstyle, DWORD dwwidth, CONST LOGBRUSH * lplb, DWORD dwstylecount, CONST DWORD *lpstyle) tworzy rozszerzone pióro. Cz jego moliwoci nie jest wykorzystywana przy kreleniu zwykłych linii. Wicej jego właciwoci wykorzystywane jest przy kreleniu cieki za pomoc StrokePath. dwpenstyle okrela styl linii. Mona połczy style uywane w CreatePen z stylami: PS_GEOMETRIC dwwidth okrela grubo linii w jednostkach logicznych PS_COSMETIC dwwidth musi si równa 1. PS_ENDCAP_ROUND zaokrglone koce linii (domylne w CreatePen)

5. Grafika 7/20 PS_ENDCAP_SQUARE koczy lini kwadratem wydłuajc lini o pół gruboci linii na kadym jej kocu. PS_ENDCAP_FLAT koczy lini kwadratem PS_JOIN_ROUND połczenia midzy liniami s zaokrglane (domylne w CreatePen) PS_JOIN_BEVEL cina koce połczenia PS_JOIN_MITER tworzy połczenie spiczaste lplp wskanik na struktur opisujc pdzel. Jeeli styl jest PS_COSMETIC pole struktury lbstyle = BS_SOLID, a lbcolor okrela kolor. Jeeli PS_GEOMETRIC dowolne. Mona pobra informacje o piórze: GetObject(hPen, sizeof(logpen), (LPVOID) &logpen); int GetObject(HGDIOBJ hgdiobj, int cbbuffor, LPVOID lpvobj) funkcja zwraca informacje na temat obiektu GDI wypełniajc bufor przechowujcy informacje na temat obiektu. cbbuffor okrela wielko bufora. Wszystkie utworzone przez uytkownika obiekty GDI musz by usunite. BOOL DeleteObject(HGDIOBJ hgdiobj); Nie wolno usuwa obiektów GDI w chwili gdy s wybrane w nie zwolnionym DC, oraz obiektów predefiniowanych. Przerwy w liniach, tło tekstu i pdzla jest wypełniane kolorem tła DC jeeli tryb tła jest ustawiony na OPAQUE. Jeeli tryb tła jest TRANSPARENT wówczas Windows pozostawia tło bez wypełnienia. int SetBkMode(HDC hdc, int ibkmode) ustawia tryb tła (OPAQUE, TRANSPARENT) int GetBkMode(HDC hdc) zwraca tryb tła (OPAQUE, TRANSPARENT) int SetBkColor(HDC hdc, COLORREF rgbcolor) ustawia kolor tła COLORREF GetBkColor(HDC hdc) zwraca kolor tła. Tryb rysowania okrela wynik połczenia pikseli pióra i podłoa kolor linii jest wynikiem działa logicznych na kolorze pióra i podłoa. R2_BLACK - 0 Piksel jest zawsze czarny R2_NOTMERGEPEN - ~(P T) Piksel jest inwersj koloru uzyskanego trybem R2_MERGEPEN R2_MASKNOTPEN - ~P &T R2_NOTCOPYPEN - ~P Piksel jest inwersj koloru pióra R2_MASKPENNOT - P& ~T R2_NOT - ~T Piksel jest inwersj koloru tła R2_XORPEN - P^T R2_NOTMASKPEN - ~(P&T) R2_MASKPEN - P&T R2_NOTXORPEN - ~(P^T) R2_NOP - T Piksel pozostaje niezmieniony R2_MERGENOTPEN - ~P T R2_COPYPEN - P Domylny. Piksel jest koloru pióra R2_MERGEPENNOT - P ~T R2_MERGEPEN - P T Piksel jest kombinacj koloru tła i pióra R2_WHITE - 1 Piksel jest zawsze biały int SetROP2(HDC hdc, int idrawmode) ustawia tryb rysowania. int GetROP2(HDC hdc) zwraca tryb rysowania.

5. Grafika 8/20 Pdzel. Do wypełniania obszarów uywamy pdzla. Pdzel jest map bitow o wymiarach 8 pikseli na 8 pikseli. W systemie mamy predefiniowane pdzle: WHITE_BRUSH domylny, wypełnia obszar na biało. LTGRAY_BRUSH GRAY_BRUSH DKGRAY_BRUSH BLACK_BRUSH NULL_BRUSH = HOLLOW_BRUSH Mona wybra predefiniowany pdzel tak jak wybierało si predefiniowane pióro: HBRUSH hbrush = GetStockObject(GRAY_BRUSH); HBRUSH hbrushold = SelectObject(hdc, hbrush); HBRUSH CreateSolidBrush(COLORREF rgbcolor) tworzy pdzel logiczny o okrelonym kolorze. HBRUSH CreateHatchBrush(int ihatchstyle, COLORREF rgbcolor) tworzy pdzel ze wzorem o okrelonym kolorze. ihatchstyle okrela rodzaj wzoru: HS_HORIZONIAL HS_VERICAL HS_FDIAGONAL HS_BDIAGONAL HS_CROSS HS_DIAGCROSS Obszar midzy liniami jest wypełniany w zalenoci od koloru i trybu tła ( jak pióro z przerywanymi liniami). HBRUSH CreatePatternBrush(HBITMAP hbitmap) tworzy pdzel w oparciu o map bitow. HBRUSH CreateBrushIndirect( CONST LOGBRUSH * logbrush) tworzy pdzel w oparciu o struktur LOGBRUSH. Struktura składa si z trzech pól. Warto pola lbstyle okrela w jaki sposób Windows interpretuje pozostałe dwa pola LbSytle (UINT) lbcolor (COLORREF) BS_SOLID kolor pdzla pomijane BS_HOLLOW pomijane pomijane lbhatch (LONG) BS_HATCHED kolor linii wzoru wzór wypełnienia BS_PATTERN pomijane uchwyt mapy bitowej

5. Grafika 9/20 Krelenie na ekranie : COLORREF SetPixel( HDC hdc, int X, int Y, COLORREF crcolor) ustawia piksel o okrelonym połoeniu na dany kolor COLORREF GetPixel( HDC hdc, int X, int Y) zwraca kolor piksela o okrelonym połoeniu. Cz funkcji nie okrela miejsca od którego rozpoczyna krelenia. Korzysta z biecej pozycji pióra. Mona zmieni t pozycj za pomoc: BOOL MoveToEx(HDC hdc, int X, int Y, LPPOINT lppoint); lppoint zawiera poprzedni pozycj. Jeeli nie interesuje nas ta warto moemy poda NULL. Moemy pobra biec pozycj za pomoc: BOOL GetCurrentPositionEx(HDC hdc, LPPOINT lppoint); BOOL LineTo(HDC hdc, int nxend, int nyend) rysuje linie od biecej pozycji do punktu podanego w funkcji (ale bez tego punktu). Zmienia biec pozycj pióra na punkt podany w funkcji. BOOL Polyline(HDC hdc, CONST POINT *lppt, int cpoint) funkcja kreli linie łczce kolejne punkty z tablicy punktów. Funkcja nie wykorzystuje, ani nie zmienia biecej pozycji pióra. cpoint okrela ilo punktów w tablicy musi by wikszy od 1. BOOL PolylineTo(HDC hdc, CONST POINT *lppt, int cpoint) - funkcja kreli linie łczce kolejne punkty z tablicy punktów. Przy czym pierwszy punkt odpowiada biecej pozycji pióra; funkcja ustawia biec pozycj w jej punkcie kocowym. BOOL Rectangle(HDC hdc, int xleft, int ytop, int xright, int ybottom) kreli prostokt za pomoc biecego pióra i wypełnia go za pomoc biecego pdzla. BOOL Ellipse(HDC hdc, int xleft, int ytop, int xright, int ybottom) kreli elips za pomoc biecego pióra i wypełnia j za pomoc biecego pdzla. rodek elipsy odpowiada rodkowi podanego prostokta. BOOL RoundRect(HDC hdc, int xleft, int ytop, int xright, int ybottom, int xcornerellipse, int ycornerellipse) kreli prostokt z zaokrglonymi wierzchołkami za pomoc biecego pióra i wypełnia go za pomoc biecego pdzla. xcornerellipse i ycornerellipse okrelaj szeroko i wysoko elipsy uytej do zaokrglania prostokta. BOOL Arc(HDC hdc, int xleft, int ytop, int xright, int ybottom, int xstart, int ystart, int xend, int yend) kreli łuk, bdcy czci elipsy opisanej przez 4 pierwsze parametry prostokta. Pozostałe 4 okrelaj pocztek i koniec łuku bdcy przeciciem elipsy i prostej łczcej rodek elipsy i punkt pocztku / koca.

5. Grafika 10/20 BOOL Chord(HDC hdc, int xleft, int ytop, int xright, int ybottom, int xstart, int ystart, int xend, int yend) kreli łuk jak w funkcji Arc, oraz odcinek łczc koniec i pocztek łuku przy pomocy biecego pióra i wypełnia obszar pomidzy łukiem a odcinkiem za pomoc biecego pdzla. BOOL Pie(HDC hdc, int xleft, int ytop, int xright, int ybottom, int xstart, int ystart, int xend, int yend) kreli łuk jak w funkcji Arc, oraz odcinki łczc koniec i pocztek łuku z rodkiem elipsy przy pomocy biecego pióra i wypełnia obszar pomidzy łukiem a odcinkami za pomoc biecego pdzla. BOOL PolyBezier(HDC hdc, Const POINT *lppt, DWORD cpoints) kreli jedn lub wicej krzywych Beziera. lppt wskanik na tablic punktów Pierwsza krzywa jest krelona od pierwszego do czwartego punktu, przy uyciu 2 i 3 punktu jako punktów kontrolnych ( które pełni rol magnesów odcigajcych lini od odcinka łczcego punkty kocowe). Kada kolejny segment krzywej potrzebuje trzech punktów. Punkt kocowy wczeniejszego segmentu jest punktem pocztkowym nastpnego. CPoints ilo punktów w tablicy (3*ilo krzywych +1) BOOL PolyBezierTo(HDC hdc, Const POINT *lppt, DWORD cpoints) kreli jedn lub wicej krzywych Beziera. Róni si od PolyBezier tym, e pierwszy punkt pocztkowy odpowiada biecej pozycji pióra. Funkcja ustawia biec pozycj w jej punkcie kocowym. BOOL Polygon(HDC hdc, CONST POINT *lppt, int cpoint) funkcja kreli linie łczce kolejne punkty z tablicy punktów. Jeeli ostatni punkt z tablicy nie pokrywa si z pierwszym Windows dodaje odcinek zamykajcy figur. Nastpnie system wypełnia figur korzystajc z pdzla biecego w sposób zaleny od ustawionego trybu wypełniania wieloktów. cpoint okrela ilo punktów w tablicy; musi by wikszy od 1. int SetPolyFillMode(HDC hdc, int imode) zmienia tryb wypełniania wieloktów w biecym DC. imode tryb wypełniania wieloktów: ALTRNATE domylny. Obszar zostanie wypełniony jeli półprosta wyprowadzona z dowolnego punktu obszaru przetnie nieparzyst liczb krawdzi. Pozostałe obszary pozostan niewypełnione. WINDING Windows wypełni wszystkie domknite obszary. int FillRect(HDC hdc, CONST RECT * rect, HBRUSH hbrush) wypełnia obszar prostokta wskazany przez rect za pomoc podanego pdzla. Zawiera lew i górn krawd prostokta, nie zawiera krawdzi prawej i dolnej. int FrameRect(HDC hdc, CONST RECT * rect, HBRUSH hbrush) maluje pdzlem prostoktn ramk, rodek pozostawiajc nie wypełniony. BOOL InvertRect(HDC hdc, CONST RECT * rect) odwraca barw pikseli wewntrz prostokta.

5. Grafika 11/20 Operacje na obiekcie typu RECT: BOOL SetRect(RECT *rect, int xleft, int ytop, int xright, ybottom) funkcja ustawia pola obiektu typu RECT. BOOL OffsetRect(RECT *rect,int x,int y) przesuwa prostokt o okrelon liczb jednostek wzdłu osi x i y. BOOL InflateRect(RECT *rect, int dx, int dy) zwiksza lub zmniejsza rozmiary prostokta o okrelon liczb jednostek w obie strony. BOOL SetRectEmpty(RECT *rect) wyzerowuje wszystkie pola zmiennej typu RECT. BOOL CopyRect(RECT *DestRect, RECT *SrcRect) Kopiuje pola jednego prostokta do drugiego. BOOL IntersectRect(RECT *DestRect, RECT *SrcRect1, RECT *SrcRect2) wylicza cz wspóln dwóch prostoktów. BOOL UnionRect(RECT *DestRect,RECT *SrcRect1,RECT *SrcRect2)- wylicza sum dwóch prostoktów. BOOL IsRectEmpty(RECT *rect)- zwraca TRUE jeeli wszystkie boki prostokta s zerowe. BOOL PtInRect(RECT *rect, POINT point)- zwraca TRUE jeeli punkt znajduje si wewntrz prostokta. Region. Region opisuje obszar powstały ze złoenia prostoktów, wieloktów i elips. Region podobnie jak pióro lub pdzel jest obiektem GDI. To znaczy mona go utworzy, pobra do niego uchwyt, a nastpnie naley go usun (DeleteObject(hRgn)). HRGN CreateRectRgn(int xleft, int ytop, int xright, int ybottom) tworzy region w kształcie prostokta. HRGN CreateRectRgnIndirect(CONST RECT * rect) tworzy region w kształcie prostokta. HRGN CreateEllipticRgn(int xleft, int ytop, int xright, int ybottom) tworzy region w kształcie elipsy. HRGN CreateEllipticRgnIndirect(CONST RECT * rect) tworzy region w kształcie elipsy. HRGN CreateRectRgn(int xleft, int ytop, int xright, int ybottom, int nwidthellipse, int nheightellipse) tworzy region w kształcie prostokta z zaokrglonymi rogami. HRGN CreatePolygonRgn(CONST POINT *lppt, int cpoint, int ipolyfillmode) funkcja tworzy region w kształcie wielokta, powstałego w wyniku połczenia kolejnych punktów z tablicy punktów. Jeeli ostatni punkt z tablicy nie pokrywa si z pierwszym Windows dodaje odcinek zamykajcy figur. cpoint okrela ilo punktów w tablicy; musi by wikszy od 1. ipolyfillmode jest równy ALTRNATE lub WINDING i okrela które piksele nale do regionu.

5. Grafika 12/20 int CombineRgn(HRGN hdestrgn, HRGN hsrcrgn1, HRGN hsrcrgn2, int icombine) funkcja składa dwa regiony dajc w wyniku uchwyt nowego regionu. Wszystkie trzy regiony musz istnie wczeniej, a region poprzednio opisywany przez hdestrgn zostanie usunity. icombine okrela sposób łczenia regionów RGN_AND cz wspólna regionów RGN_OR suma regionów RGN_XOR suma regionów z wyłczeniem czci wspólnej RGN_DIFF cz naleca do hsrcrgn1 i nie naleca do hsrcrgn2 RGN_COPY cało hsrcrgn1. Funkcja zwraca: NULLREGION region pusty SIMPLEREGION pojedynczy prostokt, wielokt lub elipsa COMPLEXREGION złoenie prostoktów, wieloktów i elips. ERROR - błd BOOL FillRgn(HDC hdc,hrgn hrgn,hbrush hbrush) wypełnia obszar regionu za pomoc podanego pdzla. BOOL FrameRect(HDC hdc, HRGN hrgn, HBRUSH hbrush, int nwidth, int nheight) maluje pdzlem ramk dookoła regionu, rodek pozostawiajc nie wypełniony. nwidth, nheight szeroko i wysoko ramki. BOOL InvertRgn(HDC hdc, HRGN hrgn) odwraca barw pikseli wewntrz regionu. BOOL PaintRgn(HDC hdc, HRGN hrgn) wypełnia region za pomoc biecego pdzla. Regiony moemy wykorzysta do ustawiania obszarów w którym mona malowa regionów obcinania. Poza tymi obszarami Windows nic nie wykreli. Wykorzystujemy do tego funkcje uniewaniajc obszar: InvalidateRgn(HWND hwnd, HRGN hrgn, BOOL berase ) i zatwierdzajc obszar ValidateRgn(HWND hwnd, HRGN hrgn). wyznaczajc obszar obcinania dla danego DC: HRGN SelectObject(HDC hdc, HRGN hrgn); int SelectClipRgn(HDC hdc, HRGN hrgn); cieka. cieka jest zbiorem odcinków i łuków pamitanych przez GDI. Podcieki składaj si z cigu połczonych linii. Kada podcieka moe by zamknita lub otwarta. Moemy zamkn podciek odcinkiem za pomoc funkcji: BOOL CloseFigure(HDC hdc) ciek tworzymy za pomoc funkcji: BeginPath(hdc); // funkcje krelce linie, odcinki, krzywe EndPath(hdc); Funkcje usuwajce definicj cieki: BOOL StrokePath(HDC hdc) kreli ciek za pomoc biecego pióra. BOOL FillPath(HDC hdc) zamyka odcinkiem kad otwart figur w ciece i wypełnia j uywajc pdzla biecego.

5. Grafika 13/20 BOOL StrokeAndFillPath(HDC hdc) kreli ciek za pomoc biecego pióra, zamyka odcinkiem kad otwart figur w ciece i wypełnia j uywajc pdzla biecego. HRGN PathToRegion(HDC hdc) przekształca ciek w region BOOL SelectClipPath(HDC hdc, int icombine) definiuje obszar obcinania. icombine przyjmuje takie same wartoci jak icombine w funkcji CombineRgn i okrela sposób w jaki cieka zostanie połczona z biecym regionem obcinania. Obrazy. Wyróniamy dwa sposoby przechowywania obrazów w programach: za pomoc map bitowych (cyfrowa reprezentacja obrazu) oraz metaplików (opisów obrazu). Liczba kolorów mapy bitowej jest równa 2 do potgi równej liczbie bitów przypadajcych na piksel (głbia koloru).(np. 16-kolorowa bitmapa 4 bity na piksel). DDB. Do czasu Windows 3.0 mielimy do czynienia jedynie z bitmapami jako obiektami GDI. S to mapy monochromatyczne, albo mapy o takiej samej organizacji kolorów jak rzeczywiste graficzne urzdzenia wyjciowe ( monitor, drukarka), dla którego mapa była tworzona. Działanie na tych bitmapach jest jednak wygodniejsze i wydajniejsze ni na bitmapach niezalenych sprztowo, dlatego jeeli potrzebujesz mapy bitowej zgodnej z kart graficzn i wyłcznie na uytek twojego programu lepiej korzysta ze starszej wersji bitmapy. Funkcje tworzce mapy bitowe zalene od sprztu ( DDB): HBITMAP CreateBitmap(int cxwidth, int cyheight, UINT iplanes, UINT ibitspixel, CONST VOID * lpbits) Pierwsze dwa argumenty odpowiadaj szerokoci i wysokoci bitmapy w pikselach, trzeci okrela liczb warstw barwnych, a czwarty głbi koloru. W rzeczywistoci trzeci i czwarty argument bd przyjmowa nastpujce wartoci: - ibitpixel = iplanes =1 bitmapa monochromatyczna - ibitpixel i iplanes odpowiadaj wartociom danego DC, które mona pobra przy pomocy GetDeviceCap. lpbits- wskanik na tablic kolorów, uytych do utworzenia bitmapy. Jeeli równe NULL tworzymy nie zainicjowan map bitow. HBITMAP CreateCompatibeBitmap(HDC hdc, int cxwidth, int cyheight) na podstawie hdc Windows pobierze potrzebne informacje na temat warstw i głbi koloru. W tym przypadku mapa bitowa nie bdzie zainicjowana. Oprócz posiadania takiej samej organizacji barw jak DC bitmapa nie jest zwizana w inny sposób z DC. HBITMAP CreateBitmapIndirect(CONST BITMAP * bitmap) tworzy bitmap w oparciu o struktur BITMAP. typedef struct tagbitmap { LONG bmtype; // Ustawione na 0 LONG bmwidth; // Szeroko mapy bitowej w pikselach LONG bmheight; // Wysoko mapy bitowej wyraona w wierszach pikseli LONG bmwidthbytes; // Szeroko mapy bitowej wyraona w bajtach najmniejsza parzysta liczba bajtów potrzebna do // zapamitania jednego wiersza pikseli. WORD bmplanes; // Liczba warstw barwnych WORD bmbitspixel; // głbia koloru LPVOID bmbits; // Wskanik do tablicy bitów } BITMAP, *PBITMAP;

5. Grafika 14/20 Aby skopiowa zawarto tablicy zawierajcej bity mapy bitowej do istniejcej mapy bitowej naley uy funkcji: LONG SetBitmapBits(HBITMAP hbitmap, LONG dwcount, LPVOID pbitmap) dwcount - ilo bitów do przekopiowania do tablicy wskazanej przez pbitmap. Liczb wszystkich bitów w mapie bitowej mona wyliczy za pomoc wzoru: dwcount = (DWORD) bitmap.bmwidhtbytes * bitmap.bmheight * bitmap.bmplanes; Moemy pobra informacje o bitmapie za pomoc funkcji: GetObject(hBitmap, sizeof(bitmap), (LPVOID) &bitmap) funkcja kopiuje informacje do struktury BITMAP pozostawiajc pole bmbits puste. Aby otrzyma dostp do mapy bitowej naley wywoła funkcj: LONG GetBitmapBits(HBITMAP hbitmap, LONG dwcount, LPVOID pbitmap) W kontekcie zwykłego urzdzenia nie mona wybra mapy bitowej. Jest to moliwe jedynie w kontekcie urzdzenia pamiciowego. Kontekst urzdzenia pamiciowego ta taki DC, który ma powierzchnie wywietlania istniejc tylko w pamici komputera i moemy go utworzy za pomoc funkcji: HDC CreateCompatibleDC(HDC hdc) funkcja tworzy DC pamiciowego, który ma powierzchni wywietlania zawierajc dokładnie 1 piksel monochromatyczny. Aby powikszy tak utworzony DC pamiciowego naley wybra map bitow w DC: SelectObject(hdcMem, hbitmap); Z tak utworzonym DC moesz robi to samo co z zwykłym DC zmienia atrybuty, sprawdza ich wartoci, wybiera w kontekcie pióro, pdzel i regiony. Wszelkie zmiany poczynione na mapie bitowej pojawiaj si na powierzchni wywietlania DC pamiciowego. Wszystko co narysujesz w DC pamiciowego jest tak naprawd rysowane na mapie bitowej. Bitmap bdziemy wywietla w DC obszaru roboczego naszego okna przekazujc bity bitmapy midzy kontekstami urzdzenia. BOOL PatBlt(HDC hdc, int xdest, int ydest, int xwidth, int yheight, DWORD dwrop) funkcja rysuje prostokt uywajc biecego pdzla. Funkcja dokonuje operacji logicznych na kolorach pdzla i ekranu. xdst, ydst punkt logiczny wskazujcy na lewy górny naronik prostokta dla trybu MM_TEXT. W pozostałych trybach naronik prostokta zale od znaku przy dwóch kolejnych parametrach. xwidth, yheight warto bezwzgldna z tych wartoci wyznacza szeroko i wysoko prostokta dwrop okrela operacje wykonywane na kolorach pdzla i ekranu: BLACKNESS wypełnia prostokt czarnym kolorem WHITENESS wypełnia prostokt białym kolorem DSTINVERT odwraca kolor ekranu PATINVERT łczy kolory za pomoc operacji logicznej XOR (Pdzel ^ Ekran) PATCOPY przekopiowuje kolory pdzla

5. Grafika 15/20 BOOL BitBlt(HDC hdcdest, int xdest, int ydest, int xwidth, int yheight, HDC hdcsrc, int xsrc, int ysrc, DWORD dwrop) funkcja przesyła bity kolorów okrelonego prostokta z DC ródłowego do DC docelowego. DC ródłowy moe równa si DC docelowy dwrop okrela operacje wykonywane na kolorach pdzla hdcdest, ekranu i prostokta ródłowego. BLACKNESS wypełnia prostokt czarnym kolorem WHITENESS wypełnia prostokt białym kolorem DSTINVERT odwraca kolor ekranu MERGECOPY łczy kolor pdzla hdcdest z kolorem prostokta ródłowego przy pomocy operacji logicznej AND. MERGEPAINT łczy odwrócone kolory prostokta ródłowego i kolory ekranu przy pomocy operacji logicznej OR. SRCCOPY przekopiowuje kolory prostokta ródłowego NOTSRCCOPY przekopiowuje odwrócone kolory prostokta ródłowego. SRCERASE - łczy odwrócone kolory ekranu i kolory prostokta ródłowego przy pomocy operacji logicznej AND NOTSRCERASE - łczy kolory ekranu i prostokta ródłowego przy pomocy operacji logicznej OR i odwraca wynik. PATINVERT łczy kolory pdzla i ekranu za pomoc operacji logicznej XOR (Pdzel ^ Ekran) PATCOPY przekopiowuje kolory pdzla PATPAINT łczy kolory pdzla i odwrócone kolory prostokta ródłowego przy pomocy operacji OR. Rezultat łczy z kolorami ekranu przy pomocy operacji OR. SRCAND łczy kolory prostokta ródłowego i ekranu za pomoc operacji AND. SRCINVERT - łczy kolory prostokta ródłowego i ekranu za pomoc operacji XOR. SRCPAINT - łczy kolory prostokta ródłowego i ekranu za pomoc operacji OR. BOOL StretchBlt(HDC hdcdest, int xdest, int ydest, int xdestwidth, int ydestheight, HDC hdcsrc, int xsrc, int ysrc, int xsrcwidth, int ysrcheight, DWORD dwrop) funkcja rozszerza moliwoci BitBlt o zmian wielkoci bitmapy z kontekstu urzdzenia docelowego. Umoliwia take odwrócenie obrazu : odbicie zwierciadlane ( jeeli xsrcwidth i xdestwidth po zmianie na współrzdne urzdzenia maj róne znaki) lub w kierunku góra-dół ( jeeli ysrcheight i ydestheight po zmianie na współrzdne urzdzenia maj róne znaki). To w jaki sposób funkcja zmniejsza obraz zaley od trybu rozcigania mapy bitowej (stretching mode) okrelanego dla kadego DC. Mona zmienia warto tego trybu za pomoc funkcji: int SetStretchBltMode(HDC hdc, int imode) imode: BLACKONWHITE = STRETCH_ANDSCANS jeeli dwa lub wicej pikseli trzeba złczy w jeden piksel StretchBlt wykonuje na pikselach operacj koniunkcji (logiczne AND) WHITEONBLACK = STRETCH_ORSCANS - StretchBlt wykonuje na pikselach operacj alternatywy(logiczne OR) COLORONCOLOR = STRETCH_DELETESCANS StretchBlt eliminuje wiersze lub kolumny bez wykonywania jakichkolwiek operacji logicznych. HALFTONE = STRETCH_HALFTONE Windows oblicza redni kolor w oparciu o piksele które trzeba połczy.

5. Grafika 16/20 DIB. W Windows 3.0 zdefiniowany został nowy format map bitowych DIB (device-independent bitmap) mapy bitowe niezalene od sprztu. DIB posiada własn tabel barw która okrela metod przekodowania bitów piksela na kolory systemu RGB. Format DIB słuy głównie do wymiany obrazów midzy programami. Mona go zapisywa w pliku albo skopiowa do schowka. DIB nie jest obiektem GDI. Metapliki. Metapliki s binarnie zakodowanym zbiorem wywoła funkcji graficznych. Najpierw tworzymy kontekst urzdzenia metapliku za pomoc funkcji: HDC CreateMetaFile( LPCTSTR lpszfile) lpszfile nazwa pliku (najczciej z rozszerzeniem WMF (windows metafile)) lub NULL. Jeeli NULL metaplik powstanie w pamici. Nastpnie krelimy w DC metapliku. Wszystkie wywołania funkcji GDI s zapisywane binarnie w metapliku. Kolejny etap to zamknicie kontekstu urzdzenia metapliku za pomoc funkcji: HMETAFILE CloseMetaFile(HDC hdcmeta) funkcja zwraca uchwyt metapliku. Nastpnie moemy wywietli obraz zapamitany w metapliku w DC za pomoc funkcji: BOOL PlayMetaFile(HDC hdc, HMETAFILE hmf) Podobnie jak inne obiekty GDI, metapliki powinny zosta usunite przed zakoczeniem programu. W tym celu wywołujemy funkcje: BOOL DeleteMetaFile(HMETAFILE hmf) Z tworzonym w ten sposób plikami wi si pewne problemy. Na przykład program uywajcy metapliku utworzonego w innym programie nie moe w prosty sposób okreli wymiarów obrazu. Dlatego metapliki s rzadko wykorzystywane do wymiany rysunków midzy programami. W zwizku z typ powstał nowy format: ulepszone metapliki ( enhanced metafile EMF) Tworzenie ulepszonych metaplików i ich wywietlanie przebiega podobnie jak starych metaplików. HDC CreateEnhMetaFile(HDC hdc, LPCTSTR lpszfile, CONST RECT * lprect, LPCTSTR lpdescription) hdc Windows wykorzystuje ten parametr do wstawienia do nagłówka metapliku informacji o wymiarach rysunku. Jeeli =NULL GDI pobierze odpowiednie informacje z kontekstu urzdzenia wywietlajcego. lprect wskazuje na prostokt wyznaczajcy całkowite wymiary metapliku. Jeeli =NULL to GDI okreli te wymiary. lpdescription tekst opisujcy metaplik. Składa si z dwóch czci. Pierwsza zakoczona 0 zawiera nazw aplikacji, druga zakoczona dwoma zerami opisuje rysunek. Moe równa si NULL. HENHMETAFILE CloseEnhMetaFile(HDC hdcemf)- funkcja usuwa uchwyt DC metapliku otrzymujc w zamian uchwyt metapliku. BOOL PlayEnhMetaFile(HDC hdc, HENHMETAFILE hmf, CONST RECT * lprect) lprect prostokt do którego GDI dopasowuje rysunek. BOOL DeleteEnhMetaFile(HENHMETAFILE hmf) usuwa metaplik z pamici HENHMETAFILE GetEnhMetaFile(LPCTSTR lpszfile) funkcja zwraca uchwyt do metapliku na dysku.

5. Grafika 17/20 UINT GetEnhMetaFileHeader(HENHMETAFILE hemf, UINT cbsize, LPENHMETAHEADER emh) funkcja zwraca informacje z nagłówka metapliku. cbsize okrela w wielko bufora na dane. emh wskanik na struktur ENHMETAHEADER, jeeli =NULL funkcja zwraca wielko rekordu nagłówkowego Uyteczne pola ENHMETAHEADER: RECT rclbounds zawiera wymiary rysunku w pikselach RECT rclframe zawiera wymiary rysunku w setnych czciach milimetra. UINT GetEnhMetaFileDescription(HENHMETAFILE hemf, UINT sizechbuffer, LPTSTR lpszdescription) wypełnia bufor opisem metapliku. Jeeli lpszdescription=null funkcja zwraca długo opisu. Teksty i czcionki Funkcja wywietlajc tekst: BOOL TextOut( HDC hdc, int nxstart, int nystart, LPCTSTR lpstring, int cbstring) hdc uchwyt kontekstu urzdzenia nxstart punkt pocztkowy napisu na osi poziomej okrelany wzgldem lewego górnego rogu obszaru roboczego nystart - punkt pocztkowy napisu na osi pionowej okrelany wzgldem lewego górnego rogu obszaru roboczego lpstring wskanik do cigu znaków. cbstring liczb znaków w cigu. Funkcja okrelajca połoenie napisów, zmieniajca domylne znaczenie parametrów nxstart, nystart z funkcji TextOut. : UINT SetTextAlign(HDC hdc, UINT fmode) fmode: TA_LEFT domylny; wyrównuje tekst do lewej krawdzi. nxstart wskazuje na punkt od którego rozpoczynamy pisanie. TA_RIGHT łacuch znaków dosunity praw krawdzi ostatniego znaku do punktu o współrzdnej poziomej nxstart. TA_CENTER współrzdna nxstart wyznacza rodek krelonego napisu TA_TOP domylny; nystart wyznacza górn krawd znaków TA_BOTTOM wszystkie znaki cigu znajduj si powyej rzdnej nystart TA_BASELINE podstawa wywietlania tekstu (linia która biegnie wzdłu podstawy liter nie majcych tzw. wydłue dolnych np. (wydłuenia maj np.: y,p,g)) znajdzie si na rzdnej nystart TA_UPDATECP system ignoruje nxstart i nystart, a zamiast nich uyje biecej pozycji pióra. Dla tego stylu TextOut ustawi biec pozycj pióra na koniec wykrelonego teksu (dla TA_LEFT) lub na jego pocztku (dla TA_RIGHT) BOOL SetTextJustification(HDC hdc, int nextra, nbrakcount); - ustawia wielko przestrzeni jak trzeba rozłoy midzy przerwy w tekcie. nextra okrela przestrze jak trzeba rozłoy pomidzy przerwy w łacuchach znaków. NBreakCount liczba przerw w łacuch, do których naley doda woln przestrze. Zaczynajc nowy wiersz jeeli wczeniej uyto tej funkcji naley ustawi przerwy: SetTextJustification(hdc, 0,0);

5. Grafika 18/20 Funkcja wywietla tekst zamieniajc umieszczone w tekcie znaki tabulacji ( \t lub 0x09) na odstpy okrelone w tablicy liczb całkowitych: LONG TabbedTextOut(HDC hdc, int nxstart, int nystart, LPCTSTR lpstring, int cbstring, int inumtab, CONST LPINT pitabstops, int xtaborgin) inumtab liczba znaków tabulacji pitabstops tablica współrzdnych tabulacji wyraonych w pikselach Jeeli inumtab=0 i pitabstops=null system ustawia tabulatory co 8 znak (w oparciu o redni szeroko znaku) Jeeli inumtab=1 to pitabstops zawiera liczb okrelajc odstp pomidzy kolejnymi tabulatorami. xtaborgin wskazuje na punkt na os x od którego nastpi odmierzanie tabulatorów. Jeeli funkcja zakoczy si sukcesem zwraca rozmiar napisu HIWORD(wynik) wysoko, LOWORD(wynik) - szeroko BOOL ExtTextOut(HDC hdc, int nxstart, int nystart, UINT ioptions, CONST RECT *rect, LPCTSTR lpstring, UINT cbstring, CONST INT *lpdx) ioptions okrelaj w jaki sposób interpretowa prostokt rect. Moe by równe 0. ETO_CLIPPED rect jest to prostokt obcinania ETO_OPAQUE rect prostoktne tło, które zostanie wypełnione kolorem tła biecego. lpdx wskazuje na tablic liczb całkowitych okrelajcych odstpy pomidzy kolejnymi znakami w cigu. Jeeli ten parametr równa si NULL domylny odstp zostanie zastosowany.. Funkcja wywietlajca sformatowany tekst w podanym prostokcie: BOOL DrawText(HDC hdc, LPCTSTR lpstring, int cbstring, LPRECT lprect, UINT iformat) Jeeli cbstring =-1 i lpstring jest cigiem zakoczonym 0 to Windows sam obliczy długo znaku. iformat okrela sposób formatowania tekstu: 0 system interpretuje tekst jako zbiór wierszy oddzielonych znakiem powrotu karetki ( \r lub 0x0D) lub znakiem nastpnej linii ( \n lub 0x0A). DT_LEFT domylny. Wyrównanie lewostronne tekstu DT_RIGHT wyrównanie prawostronne DT_CENTER wyrodkowuje tekst pomidzy lewym i prawym bokiem prostokta DT_SINGLELINE nie interpretuje znaków powrotu karetki oraz przejcia do nastpnej linii jako znaki koca wiersza DT_TOP domylny; wyrównuje tekst do górnej czci prostokta. DT_BOTTOM wyrównanie do dolnej czci prostokta DT_VCENTER wyrównanie tekstu pomidzy dolnym i górnym bokiem prostokta DT_WORDBREAK wymusza łamanie wiersza po dojciu do krawdzi prostokta. DT_NOCLIP kreli tekst bez obcinania fragmentów nie mieszczcych si w prostokcie DT_EXTERNALLEADING odstpy midzy wierszami wysokoci znaku bez pominicia dodatkowego odstpu zalecanego przez projektanta czcionki. DT_EXPANDTABS - interpretuje znaki tabulacji. Domylnie znaki tabulacji wystpuj w odstpach równych omiokrotnej redniej szerokoci znaku.

5. Grafika 19/20 Napisy s wywietlane dla danego kontekstu urzdzenia. Kilka atrybutów DC dotyczy napisów. Kolor liter domylnie jest czarny zmieniamy go za pomoc funkcji: COLORREF SetTextColor(HDC hdc, COLORREF rgbcolor) funkcja zwraca poprzedni kolor tekstu. COLORREF GetTextColor(HDC hdc) funkcja zwraca biecy kolor napisów. Odstp midzy znakami jest wypełniony kolorem uzalenionym od trybu tła oraz koloru tła. Mona korzysta z kolorów systemowych pobieranych przy pomocy funkcji: GetSysColor(int nindex) m.in nindex moe by równe: COLOR_GRAYTEXT szary (nieaktywny) kolor COLOR_HIGHLIGHT kolor uywany do zaznaczania wybranego elementu w kontrolce COLOR_HIGHLIGHTTEXT kolor tekstu uywany do zaznaczania wybranego elementu w kontrolce COLOR_WINDOW tło okna COLOR_WINDOWTEXT kolor tekstu w oknie

5. Grafika 20/20 Czcionki. Mona pobra predefiniowane czcionki systemowe: HFONT hfont = GetStockObject(iFont); ifont równa si SYSTEM_FONT (domylna czcionka o proporcjonalnej szerokoci liter) lub SYSTEM_FIXED_FONT(o takiej samej szerokoci znaków) SelectObject(hFont); Czcionki GDI znajdujce si w plikach na dysku twardym dziel si na trzy kategorie: Rastrowe kady znak jest zakodowany w postaci wzorca pikseli; nieskalowalnymi bez pogorszenia jakoci; wydajno; dobra czytelno. Wektorowe znak w postaci zbioru połczonych odcinków. niska wydajno wywietlania, czytelno słaba przy małych wymiarach; przy duych brzydkie; Skalowalne. TrueType zdefiniowane przez kontur składajcy si z odcinków i łuków. Kontur jest wykorzystywany do stworzenia mapy bitowej znaku. Windows 95 był wyposaony w 13 czcionek TrueType w kolejnych wersjach Windows lista czcionek uległa powikszeniu. (Courier New, Courier New Bold, Courier New Italic, Courier New Bold Italic, Times New Roman, Times New Roman Bold, Times New Roman Italic, Times New Roman Bold Italic, Arial, Arial Bold, Arial Italic, Arial Bold Italic, Symbol). HFONT CrateFontIndirecta(LPLOGFONT lplf) typedef struct taglogfont { LONG lfhight // podana wysoko czcionki w jednostkach logicznych. Jeeli =0 system uywa domylnej wielkoci LONG lfwidth // szeroko LONG lfescapement LONG lforientation LONG lfweight // grubo czcionki (np. FW_DONTCARE=0, FW_NORMAL=400, FW_BOLD=700,..) BYTE lfitalic // kursywa jeeli!=0 BYTE lfunderline BYTE lfstrikeout BYTE lfcharset BYTE lfoutprecision BYTE lfclipprecision BYTE lfquality BYTE lfpitchandfamily TCHAR lffacename } LOGFONT, *PLOGFONT Aby wybra czcionk TrueType wikszo wartoci powinna by równa 0. BOOL GetTextExtentPoint32(HDC hdc, LPCTSTR lpstring, int icount, LPSIZE lpsize) funkcja podaje szeroko i wysoko łacucha znaków na podstawie biecej czcionki w DC. Struktura SIZE składa si z dwóch pól typu LONG cx, cy.