Uživatelsky kreslené prvky Windows

Diskuze čtenářů k článku

Wizi  |  07. 06. 2001 22:12

Tato metoda je používá hlavně pro případ, kdy chce dotyčný programátor vytvořít v MFC např.: menu s obrázky, různě barvné tlačítka, jak kolik barvené listboxy atd... (Ovšem musí podporovat BS_OWNERDRAW). Ale pro lepší příklad kdych doporučovat www.codeproject.com , kde naleznete mnoho příkladů jako například plochá tlačítka, menu typu "start", atd...

LB

Souhlasím  |  Nesouhlasím  |  Odpovědět
Wizi  |  07. 06. 2001 22:23

pokud se Vám nechce hledat :

překrásná tlačítka, které jsou v programech typu WinZip, ICQ atd.. ), nebo je libo tlačítko, ve kterém běží animovaný AVI ? nebo transparentní tlačítko s obrázkem ?

http://www.codeproject.com/buttonctrl/cxshadebutton.asp ,

http://www.codeproject.com/buttonctrl/anibuttons.asp ,

http://www.codeproject.com/buttonctrl/cbuttonst.asp

Prostě C++ je nejlepší

 

Souhlasím  |  Nesouhlasím  |  Odpovědět
klj  |  07. 06. 2001 21:06

"Tím nechci říci, že Visual C++ je horší než např. C++ Builder. Naopak, výsledné aplikace jsou výkonnější. Tím mám na mysli např. nárok na systémové zdroje a paměť, rychlost kódu apod."

HAHA

 

Souhlasím  |  Nesouhlasím  |  Odpovědět
Pavel Zima  |  08. 06. 2001 16:00

Dělal sem pokus na schopnost optimalizace různejch kompilátorů. Je opravdu velkej rozdíl mezi kompilátorama co kompilujou docela dobře (Visual C++, Intel C++, GNU C (Cygwin)), těma co optimalizujou trochu hůř (Metrowerks - CodeWarrior) a těma co neoptimalizujou skoro vůbec (Borland C++ a ještě hůř Delphi). Pokus sem dělal jako výpočet Mandelbrotu ve fixed a float matematice. Výsledky prvních 3 byli +/- vo pár procent srovnatelný, Metrowerks byl tak vo 50% pomalejší a Borland klidně i 2 - 3x pomalejší.

Kompilátor vod Borlandu pravděpodobně podporuje víc ISO standard C++, ale co se týče optimalizací je to totální shit. Hrál sem si s nastavením překladu u všech překladačů dost dlouho a dokumentaci sem čet. Vím, že by se našli jiný testy, kde by výsledek nemusel bejt tak zdrcující, ale přesto...

Takže: HAHA

Souhlasím  |  Nesouhlasím  |  Odpovědět
idvis  |  07. 06. 2001 10:46

"Jak je to možné?" - No, uz podle nadpisu, to jste teda objevili vedu )

Navic, doporucuju zminovane ActiveX komponenty nepouzivat,

neni to dobre.

Souhlasím  |  Nesouhlasím  |  Odpovědět
David Pokluda  |  07. 06. 2001 20:46

Naprosto souhlasim. I kdyz je to daleko slozitejsi, tak jsem pro dat si tu praci a naucit se Visual C++, tj. napr. MFC, a programovat primo s MFC nebo SDK a radeji nepouzivat ActiveX. Kdyz nejsem schopen neco naprogramovat sam, pak doporucuji server typu www.codeproject.com nebo www.codeguru.com apod.

David Pokluda

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jerry III  |  07. 06. 2001 06:13

Proc mi proboha zive odesila my nazory predtim nez je dopisu? Mam pocit ze by zive melo najmout nejaky programatory, protoze se to tadyc hybama jen hemzi ... nemluve o neustalejch server busy chybach co dostavam nekolikrat denne ...

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jerry III  |  07. 06. 2001 06:12

To neni moc chytrej priklad, na to abych mel control kreslenej jinou barvou staci odchytavat WM_CTLCOLORBTN a jinej font se da udelat poslanim WM_SETFONT. Rozhodne si to nemusim vsechno kreslit sam :) Jako demonstrace toho ze se da udelat owner draw control dejme tomu, ale sou lepsi pripady (napr. knofliky s iconou a textem nebo

Souhlasím  |  Nesouhlasím  |  Odpovědět
Radek Chalupa  |  07. 06. 2001 20:10

Pokus byste četl pozorně, zjistíte, že ve zmiňované ukázce je také metoda té třídy buttonu SetBackground(HBRUSH hBrush), kterou lze nastavit libovalný štětec pozadí, tj. třeba vzorek tvořený bitmapou, a to těžko dosáhnete bez owner-draw.

Navíc,  když už jste tak chytrý, přečtěte si následující opis z MSDN July 2000, zjistíte, že s tím WM_COLORBTN to není tak jednoduché.
Button Differences

The parent window of a button (except push buttons) in a version 3.x application receives a WM_CTLCOLORBTN message when the button is about to be drawn. In a version 4.0 application, however, the parent window of a button receives the WM_CTLCOLORSTATIC message, which retrieves a color appropriate for drawing text on the background of the dialog box. Windows 95/98 sends WM_CTLCOLORSTATIC to retrieve the background and text colors for the text area of check boxes, radio buttons, and group buttons. An application should process WM_CTLCOLORSTATIC in order to correctly set the colors of any dialog box item that contains text and appears directly on the dialog area.

Windows 95/98 performs default handling of the WM_CTLCOLORBTN message differently depending on an application's version. For a version 3.x application, the default handling for button colors is to use the COLOR_WINDOW value for the background color and the COLOR_WINDOWTEXT value for the foreground color. For a version 4.0 application, Windows 95/98 uses the COLOR_3DFACE value for the background and the COLOR_BTNTEXT value for the foreground.

In a version 3.x application, a push button's outer top left corner is nonwhite because the button is typically drawn on a white background. If the border was white, the background would appear to bleed into the button. In a version 4.0 application, a push button's outer top left corner is white (COLOR_3DHILIGHT) because the button is typically drawn on a nonwhite background (COLOR_3DFACE).

Samozřejmě netvrdím, že ucedený příklad je něco světobroného. Naopak je velmi, velmi jdenoduchý, jako úvod k této problematice. Předpokládám, že tento článek je pouze úvod jakéhosi miniseriálu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jerry III  |  08. 06. 2001 00:54

Takze, to ze WM_CTLCOLORBTN neni jednoduchy vim, ale je to furt jednodussi cesta nez si to kreslit sam (pokud chci jen zmenit barvu), protoze se nemusim namahat s veci jako zmeny fontu za behu aplikace apod. A pokud uvadis zmenu pozadi jako duvod k owner draw controlu tak si precti dokumentaci k WM_ERASEBACKGROUND - tim si muzes udelat pozadi jaky chces a nejse omezenej tim co jde udelat jako brush.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jerry III  |  07. 06. 2001 06:12

To neni moc chytrej priklad, na to abych mel control kreslenej jinou barvou staci odchytavat WM_CTLCOLORBTN a jinej font se da udelat poslanim WM_SETFONT. Rozhodne si to nemusim vsechno kreslit sam :) Jako demonstrace toho ze se da udelat owner draw control dejme tomu, ale sou lepsi pripady (napr. knofliky s iconou a textem

Souhlasím  |  Nesouhlasím  |  Odpovědět
David Pokluda  |  07. 06. 2001 10:01

Naprosto souhlasim. I tak jsem ale rad, protoze takovych clanku o Visual C++ a C++ je tak zalostne malo, ze i pres tento (nezanedbatelny) nedostatek jsem z clanku rad.

David Pokluda.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jerry III  |  07. 06. 2001 20:12

No, na builder.cz v posledni dobe vychazeji podstatne lepsi clanky nez je tenhle a zrovna tenhle tyden tam vysel clanek a owner draw controls - meli podstatne lepsi priklad, Combo box co mel dva sloupce textu (jmeno - cena) kde ta cena byla zarovnana na desetinnou carku - o dost lepsi priklad ... a co sem chtel puvodne napsat ja, owner draw se da pouzit az kdyz chcete kombinovat dve veci (dva ruzne zarovnany sloupce, text a iconu) v jednom controlu, vsechno ostatni se da udelat jinak :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
GoGo  |  15. 06. 2001 12:47

ohh

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor