Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
C/C++
Učíme se Win API - 17.
winapi_logo
29. dubna 2002, 00.00 | V tomto pokračování se budeme zabývat kreslením plošných objektů a definování jejich výplně pomocí tzv. štětců. Dále si ještě řekneme o jedné další vlastnosti per.
Zatím jsme se zabývali pouze takříkajíc čárovými grafickými objekty. V tomto pokračování se seznámíme s tím, jak kreslit plošné objekty a definovat vlastnosti jejich výplně pomocí štětců.
Geometrické útvary, které budeme dnes kreslit, budou mít definovány 2 typy "vlastností". Čáry tvořící jejich okraj, budou mít vlastnosti definované nám již známými pery a výplně štětci (brush), se kterými se seznámíme dnes. Princip použití štětců je stejný jako per. Nejdříve si jednou z příslušných funkcí vytvoříme objekt typu štětec (handle HBRUSH), ten pak vybereme pomocí funkce SelectObject do kontextu zařízení (HDC) a poté budou mít nakreslené grafické objekty výplň tvořenou aktuálně vybraným štětcem.
Nejjednodušším tvarem je obyčejný obdélník. Pokud chceme nakreslit obdélník, jehož okraj je kreslený aktuálně vybraným perem a výplň je tvořená aktuálně vybraným štětcem, použijeme funkci Rectangle:
|
Dalším základním tvarem je elipsa nebo kružnice jako zvláštní případ elipsy, kterou kreslíme pomocí funkce Ellipse:
|
Uveďme si zde ještě jeden plošný útvar kterým je obdélník (čtverec) se zaoblenými rohy, kreslený funkcí RoundRect:
|
Další plošné geometrické objekty, resp. funkce pro jejich kreslení jsou samozřejmě popsány v dokumentaci. Pro nás je nyní důležité seznámit se se štětci tvořícími výplň plošných objektů. Nejjednodušším případem je štětec tvořený jednou barvou, který vytvoříme funkcí CreateSolidBrush:
|
Handle typu HBRUSH vrácený touto funkcí pak vybereme již známou funkcí SelectObject do kontextu zařízení (HDC) a všechny další kreslené plošné objekty pak budou mít výplň tvořenou tímto štětcem. Ukážeme si příklad, ve kterém se současně ještě vrátíme k perům, přesněji řečeno k demonstraci stylu pera PS_INSIDEFRAME. Tento styl pera určuje, že pokud je kreslen obrazec, který definujeme opsaným obdélníkem (jako výše zmíněná elipsa/kružnice) a pero má šířku větší než 1 pixel, je obrazec nakreslen tak že se celý vejde dovnitř tohoto obdélníka. Bez tohoto stylu k okrajům obdélníka přiléhá střed čáry a tedy polovina šířky čáry pera je mimo tyto hranice. Podívejme se na příklad, který toto demonstruje:
V obou případech (jak uvidíte z výpisu kódu) je kružnice (kreslená funkcí Ellipse) definována stejným (rozměrově) opsaným obdélníkem. Rozdíl je ve vybraném peru. Pero použité pro levý obrázek má ve stylu příznak PS_INSIDEFRAME, tj je vytvořené takto:
|
Současně je ukázán příklad obdélníka kresleného systémovým černým perem a vyplněného systémovým bílým štětcem. Je to ukázka použítí funkce GetStockObject:
|
Touto funkcí můžeme získat již existující handle na některý ze systémových objektů. Jejich úplný seznam naleznete v dokumentaci této funkce. Zbytek kódu pak ukazuje vytvoření spojitého pera, a jeho použití jako výplň kružnice. Zde je tedy opis kódu, volaného z handleru zprávy WM_PAINT, realizujícího výše uvedený obrázek:
|
Dále si ještě ukážeme příklad štětce, tvořeného mřížkou zvolené barvy a typu. K tomu nám slouží funkce CreateHatchBrush:
|
Parametr fnStyle určuje typ mřízky, může mít jednu z hodnot, které jsou vypsány na následujícím obrázku, z něhož je nejlépe patrný jejich význam:
Kód toto realizující vypadá následovně:
|
Na závěr ještě ukázku použití funkce Rect a RoundRect, opět ve spojení s mřížkovaným štětcem a vlastním perem:
Kód tohoto kreslení:
|
Tolik pro dnešek ke kreslení plošných tvarů a použití stětců. Zde si můžete stáhnout zdrojový kód ukázkového projektu: win_api_17.zip.
Obsah seriálu (více o seriálu):
- Učíme se Win API - motivační úvod
- Učíme se WinAPI - Začínáme
- Učíme se WinAPI - 3.
- Učíme se Win API - 4.
- Učíme se Win API - 5.
- Učíme se Win API - 6.
- Učíme se Win API - 7.
- Učíme se Win API - 8
- Učíme se Win API - 9.
- Učíme se Win API - 10.
- Učíme se Win API - 11.
- Učíme se Win API - 12.
- Učíme se Win API - 13.
- Učíme se Win API - 14.
- Učíme se Win API - 15.
- Učíme se Win API - 16.
- Učíme se Win API - 17.
- Učime se Win API - 18.
- Učime se Win API - 19.
- Učime se Win API - 20.
- Učime se Win API - 21.
- Učime se Win API - 22.
- Učime se Win API - 23.
- Učime se Win API - 24.
- Učíme se Win API - 25.
- Učíme se Win API - 26.
- Učíme se Win API - 27.
- Učíme se Win API - 28.
- Učíme se Win API - uživatelsky kreslený ListBox
- Učíme se Win API - uživatelsky kreslený ListBox II
- Dialog výběru složky a naplnění ListBoxu soubory
- Vyhledávání souborů - zjištění obsahu složky
- Pracujeme s ComboBoxem ve WinAPI
- Pracujeme s ComboBoxem II.
- Rozšířený prvek ComboBoxEx
- Ovládací prvek TrackBar
- Ovládací prvek Progress Bar
Diskuse k článku
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007