David Matoušek VISUAL C++ 6 0 VÝVOJOVÉ PROSTØEDÍ Praha 2003
David Matoušek VISUAL C++ 6 0 vývojové prostøedí Bez pøedchozího písemého svoleí akladatelství esmí být kterákoli èást kopírováa ebo rozmožováa jakoukoli formou (tisk, fotokopie, mikrofilm ebo jiý postup), zadáa do iformaèího systému ebo pøeášea v jié formì èi jiými prostøedky Autor a akladatelství epøejímají záruku za správost tištìých materiálù Pøedkládaá zapojeí a iformace jsou zveøejìy bez ohledu a pøípadé patety tøetích osob Nároky a odškodìí a základì zmì, chyb ebo vyecháí jsou zásadì vylouèey Veškerá práva vyhrazea Ig David Matoušek, 2003 Nakladatelství BEN techická literatura, Vìšíova 5, Praha 10 David Matoušek: VISUAL C++ 6 0 vývojové prostøedí BEN techická literatura, Praha 2003 1 vydáí ISBN 80-7300-130-6
OBSAH O KNIZE 10 1 ÚVOD 11 1 1 Klasická aplikace vytvoøeá ve Visual C++ 12 1 2 Na øadì je MFC 14 1 2 1 Architektura dokumet/pohled 14 1 2 2 Hierarchie tøíd MFC 14 1 2 3 Fukce AFX 15 1 3 Prví aplikace vytvoøeá pomocí MFC 15 1 3 1 Založeí projektu 15 1 3 2 Geerace tøíd MFC aplikace 17 1 3 3 Zápis metod 18 1 3 4 Vytvoøeí metody CPrviApp::IitIstace 20 1 3 5 Pøipojeí MFC do projektu 20 1 3 6 Zdrojové soubory 22 1 3 7 Pøeklad 24 1 3 8 Jak je aplikace sestavea 25 1 3 9 Výzam jedotlivých souborù 25 2 POPIS TØÍD CFRAMEWND A CWINAPP 27 2 1 Tøída CFrameWd 28 2 1 1 Atributy 29 2 1 2 Metody 30 2 1 3 Hadlery (výbìr základích) 34 2 2 Tøída CWiApp 38 2 2 1 Atributy 38 2 2 2 Metody 39 2 2 3 Hadlery 40 3 PRVNÍ KROKY S OBJEKTY MFC 41 3 1 Zmìa astaveí oka 42 3 2 Uživatelská ikoa 45 3 3 Hadlery 50 3 4 Zobrazujeme messagebox 52 3 5 Pár trikù a závìr 54 A D MATOUŠEK: Visual C++ 6 0 vývojové prostøedí 3
3 5 1 Vytvoøeí uvolìé verze 54 3 5 2 Sestaveí aplikace tak, aby epotøebovala dyamické kihovy 55 3 5 3 Otevøeí posledì rozpracovaých projektù 56 3 5 4 Dokoèováí kódu 56 3 5 5 Hledáí iformací v MSDN 58 3 5 6 Ladìí aplikace 58 4KRESLENÍ DO OKNA 61 4 1 Základí iformace 62 4 2 Widows GDI 62 4 2 1 Tøída CPaitDC 63 4 2 2 Tøída CClietDC 63 4 2 3 Tøída CWidowDC 63 4 2 4 Tøída CMetaFileDC 63 4 3 POPIS TØÍDY CPAINTDC 64 4 3 1 Atributy 64 4 3 2 Metody 64 4 4 Základí kreslicí metody 67 4 4 1 Pøesu pera, práce s pixely 67 4 4 2 Kresleí obdélíkù, elips, obloukù apod 68 4 4 3 Kresleí mohoúhelíkù a série úseèek 70 4 4 4 Kresleí køivek 70 4 4 5 Kresleí bitmap 71 4 4 6 Výpis textu 72 4 4 7 Další fukce 73 4 5 Struktury POINT a SIZE 73 4 6 Tøída CPoit 73 4 6 1 Kostruktory 74 4 6 2 Metoda Offset 74 4 6 3 Operátory 74 4 7 Typ COLORREF a makro RGB 75 4 8 Tøída CGDIObject a její ásledíci 75 4 8 1 Tøída CPe 76 4 8 2 Tøída CBrush 77 4 8 3 Tøída CFot 78 4 8 4 Tøída CBitmap 79 4 9 Pøíklady 81 4 9 1 Kresleí bodù 81 4 9 2 Výpis textu 82 4 9 3 Styly per 85 4 9 4 Styly štìtcù 87 4 D MATOUŠEK: Visual C++ 6 0 vývojové prostøedí A
4 9 5 Rectagle, FillRect, FrameRect, RoudRect 89 4 9 6 Mohoúhelíky a køivky 90 4 9 7 Ellipse, Arc, Chord, Pie a AgleArc 92 4 9 8 Ukládáí a obovováí stavu kotextu 93 4 9 9 Použití metody CPaitDC::BitBlt 95 4 9 10 Použití metody CPaitDC::StretchBlt 95 4 10 Skrolováí oka 97 4 10 1 Zobrazeí scrollbarù 97 4 10 2 Nastaveí scrollbarù 97 4 10 3 Zprávy scollbarù 98 4 10 4 Metoda CFrameWd::ScrollWidow 100 4 10 5 Pøíklad použití 100 5 PRÁCE S NABÍDKAMI 107 5 1 Základí pojmy 108 5 1 1 Hlaví abídka 108 5 1 2 Místí abídka 109 5 1 3 Systémová abídka 110 5 2 Tvorba abídek 110 5 3 Tøída CMeu 111 5 3 1 Atribut 111 5 3 2 Metody 111 5 4 Základí operace s tøídou CMeu 118 5 4 1 Zpùsoby zavedeí abídky ze zdroje 118 5 4 2 Programové vytváøeí abídek 118 5 4 3 Uvolìí abídky z pamìti 118 5 5 Nabídky a zprávy 119 5 6 Hadlery pro podporu abídky tøídou CFrameWd 119 5 7 Hadlerová makra 123 5 7 1 ON_COMMAND 123 5 7 2 ON_COMMAND_RANGE 123 5 7 3 ON_WM_SYSCOMMAND 123 5 7 4 ON_WM_CONTEXTMENU 124 5 7 5 ON_WM_MEASUREITEM 124 5 7 6 ON_WM_DRAWITEM 124 5 8 Pøíklady 124 5 8 1 Prví aplikace s hlaví abídkou 124 5 8 2 Pøidáváme místí abídku 135 5 8 3 Místí abídka jako zrcadlo podabídky 141 5 8 4 Uživatelsky kresleé položky abídky 143 5 8 5 Pøidáí položek abídky za bìhu programu, práce se systémovou abídkou 147 A D MATOUŠEK: Visual C++ 6 0 vývojové prostøedí 5
6 ZÁKLADNÍ OVLÁDACÍ PRVKY (KOMPONENTY) 151 6 1 Spoleèý pøedek CWd 152 6 1 1 Atribut 152 6 1 2 Metody 152 6 1 3 Vytvoøeí prvku a zmìa stylu 153 6 2 Tlaèítko tøída CButto 153 6 2 1 Metody 155 6 2 2 Pøíklad elemetárí práce s tlaèítky Styly tlaèítek a události 157 6 3 Statický prvek tøída CStatic 165 6 3 1 Metody 166 6 3 2 Pøíklad použití Ukládáí iformací do ovládacího prvku, zmìa stylu již vytvoøeého ovládacího prvku 168 6 4Posuvík tøída CScrollBar 175 6 4 1 Metody 175 6 4 2 Pøíklad použití Nová tøída CColorScrollBar (lze volit barvu scrollbaru) 177 6 5 Editaèí pole tøída CEdit 184 6 5 1 Metody 184 6 5 2 Základí práce s tøídou CEdit 188 6 5 3 Jedoduchý textový editor 192 6 5 4 Omezeí vstupu (èíslice), tøída CNumEdit 200 6 6 Sezam tøída CListBox 203 6 6 1 Metody (vìtšia z tìchto metod vrací pøi chybì hodotu LB_ERR) 204 6 6 2 Styl LBS_SORT 210 6 6 3 Metoda CListBox::SetTabStops 214 6 6 4 Sezam jme souborù 217 6 6 5 Uživatelský sezam souborù (vèetì zobrazeí asociovaé ikoy a délky souboru) 222 6 7 Prvek combobox tøída CComboBox 233 6 7 1 Metody 234 6 7 2 Pøíklad ukazující styly comboboxù 237 6 8 Další ovládací prvky 240 7 POMOCNÉ TØÍDY 241 7 1 CStrig práce s øetìzci 242 7 2 CFile práce se soubory 245 7 2 1 Tøída CMemFile podpora práce s dyamickou pamìtí 246 7 2 2 Další ásledíci tøídy CFile 247 7 3 CArray pole 247 7 3 1 Idexováí 248 7 3 2 Velikost pole 248 7 4CExceptio 249 6 D MATOUŠEK: Visual C++ 6 0 vývojové prostøedí A
7 4 1 Kostruktor 250 7 4 2 Metody 250 7 4 3 CFileExceptio 250 7 5 Práce s iicializaèími soubory a systémovou databází Registry 251 8 DIALOGY 257 8 1 Tøída CDialog 258 8 1 1 Modálí dialog 259 8 1 2 Nemodálí dialog 260 8 1 3 Metody 260 8 1 4 Hadlery 261 8 2 Dialog o aplikaci 261 8 3 Výmìa dat 270 8 4 Validace dat 283 8 5 Nemodálí dialog 290 8 6 Dialog jako hlaví oko aplikace 301 8 7 Stadardí dialogy 309 8 7 1 CFileDialog 309 8 7 2 CColorDialog 314 8 7 3 CFotDialog 315 8 7 4 CPageSetupDialog 318 8 7 5 CPritDialog 321 8 7 6 CFidReplaceDialog 324 8 8 Jeda vìtší aplikace a závìr Textový editor 327 LITERATURA 342 REJSTØÍK 343 KNIHY BEN TECHNICKÁ LITERATURA 351 A D MATOUŠEK: Visual C++ 6 0 vývojové prostøedí 7
CO NAJDETE NA DOPROVODNÉM CD-ROM Doprovodé CD-ROM obsahuje všechy iformace potøebé pro sadou práci s kihou Tyto iformace lze rozdìlit do logických celkù, které se acházejí v oddìleých adresáøích: adresáø ATMEL je off-lie podoba èásti www stráek firmy ATMEL zamìøeých a AVR adresáø BEN obsahuje off-lie verzi www stráek akladatelství BEN techická literatura (aktualizováo k poèátku bøeza 2003), jejichž souèástí je poèítaèová verze tištìého katalogu Edièího pláu jaro/léto 2003, adresáø DATASHEET obsahuje dokumetaci vybraých itegrovaých obvodù, které jsou v kize používáy, ve formátu PDF Najdete zde též samorozbalitelý archiv programu Adobe Acrobat Reader verze 5 0, který slouží k prohlížeí PDF souborù, adresáø FOTO obsahuje, jak sám ázev apovídá, fotografie hotových pøípravkù Každý byl afoce z ìkolika pohledù, aby byla lépe dokumetováa jejich možá stavba, Do shodého adresáøe jsme umístili trial verzi prohlížeèe ACDSee stažeou z Iteretu (http://www acdsystems com): ACDSee Classic (velikost istalaèího souboru cca 1,6 MB, miimálí požadavky Widows 95/98/Me/NT4/2000, PC 486DX s 32 MB RAM, režim grafického adaptéru s 256barvami, 4 MB volého místa a pevém disku, vhodý Iteret Explorer 4 0 ebo pozdìjší) Tip: pokud se vám fotografie zdají pøíliš tmavé, aktivujte ve vašem prohlížeèi Gamma korekci a hodotu apø 1 50 (optimálí hodota závisí a astaveí vašeho grafického subsystému) adresáø KATALOG obsahuje elektroický ceík firmy GM Electroic stažeý z Iteretu (z poèátku bøeza 2003) a poèítaèovou podobu tištìého katalogu v PDF Aktualizovaou verzi lze získat a URL: http://www gme cz Orietaèí cey všech souèástek byly bráy z tohoto katalogu Navíc je zde umístìa poèítaèová verze (PDF) tištìého katalogu pro rok 2003, adresáø OBECNICE je off-lie podoba www stráek (vèetì ceíku) pøedího èeského prodejce obvodù (Zásilková služba ELEKTRONIC OBECNICE), programovacích kitù a programátorù Atmel Navíc je a tìchto strákách pøehled zapojeí koektorù a redukcí ze zámého webu Hardware book, adresáø PROGRAMY obsahuje zdrojové i pøeložeé formy všech programù realizovaých v kize, jakožto ovládací program programátoru ISP (SDKAVR), adresáø SPOJE obsahuje klišé plošých spojù všech pøípravkù popsaých v kize ve formátu TIF a avíc ve zdrojovém formátu BRD programu EAGLE je verze 2 6, aby si èteáøi pøípadì mohli plošé spoje upravit podle vlastích pøedstav Nìkteré spoje jsme ještì v redakci dodateèì upravovali (zvìtšováí úchytých plošek pro souèástky, ), takže fiálí verze je uložea pouze ve formátu TIF (je shodá s klišé otištìými v kize), adresáø SW obsahuje software vhodé k vážé práci s procesory Atmel AVR, stažeé z iteretových stráek firmy ATMEL: AVR_3 1 (wavrasm), AVR_3 5 (AVR Studio 3 5), AVR_4 0 (AVR Studio 4 0) 8 D MATOUŠEK: Visual C++ 6 0 vývojové prostøedí A
O KNIZE Tato kiha sezamuje èteáøe formou podrobého popisu tøíd implemetovaých v kihovì MFC s programováím pomocí vývojového prostøedí Visual C++ 6 0 Nechybí samozøejmì pøíklady, které jsou praktickou ukázkou toho, jak programovat Úvodí kapitola ukazuje (pro zajímavost) tvorbu klasické Wi API aplikace Jedá se o ukázku komplikovaosti vývoje programu bez použití MFC Proto je ásledì ukázáa tvorba podobé aplikace za pomoci MFC (postup je jedodušší a cílový kód dostateèì efektiví) Druhá kapitola se vìuje pomìrì detailímu popisu tøíd CFrameWd a CWiApp, které jsou velmi dùležité Jedá se o bázové tøídy, ze kterých vytváøíme hlaví oko aplikace a aplikaci samotou Kromì popisu metod a atributù jsou uvedey i ejvýzamìjší hadlery Tøetí kapitola je praktickou ukázkou toho, jak využít možostí tøíd CFrameWd a CWiApp pøi tvorbì vlastí aplikace Je také ukázáa tvorba a použití uživatelské ikoy, je pøedvedeo použití hadlerù a zobrazeí messageboxu Kapitola koèí ukázkou ladìí aplikace pomocí debugeru Ètvrtá kapitola ás ejprve sezamuje s filozofií kresleí do oka poèíaje popisem tøíd odvozeých z CDC (pøedevším CPaitDC) Následuje popis pomocých tøíd (CPoit, CRect, CSize, CPe, CBrush, CFot, CBitmap) a dále jsou pøedvedey pøíklady Nakoec je ukázáa aplikace dovolující skrolovat obsah oka Pátá kapitola je vìováa abídkám (meu) Po vysvìtleí základích pojmù a podrobém výkladu tøídy CMeu jsou opìt ukázáy vzorové pøíklady Kromì jiého se jedá o použití radioitem položek a položek, které jsou uživatelsky kresleé Také je ukázáa možost úpravy systémové abídky Šestá kapitola se vìuje ovládacím prvkùm (kompoetám) Jsou popsáy tøídy obalující základí ovládací prvky Widows: CButto (tlaèítko, checkbox, radiobutto, groupbox), CStatic (titulek, rámeèek, obrázek), CScrollBar (scrollbar), CEdit (jedoøádkový i víceøádkový), CListBox (listbox), CComboBox (combobox) Výklad je doprováze øadou etriviálích pøíkladù, ve kterých se èasto používají upraveé ovládací prvky (odvozeé ze základích tøíd) Sedmá kapitola pøiáší zajímavé iformace o tøídách, které zjedodušují vývoj aplikace Jedá se o tøídy: CStrig (øetìzce), CFile (práce se soubory), CArray (šabloa dyamického pole) a CExceptio (bázová výjimka) Nakoec je ukázáa práce s iicializaèím souborem a systémovou databází Registry pomocí metod obsažeých ve tøídì CWiApp Posledí (osmá) kapitola je vìováa dialogùm Po ezbytém teoretickém úvodu a popisu tøídy CDialog je pøedvedea aplikace s dialogem O aplikaci Další pøíklady ukazují použití techologií DDX a DDV, které zjedodušují pøeos a validaci A D MATOUŠEK: Visual C++ 6 0 vývojové prostøedí 9
dat mezi obalovou tøídou a samotým dialogem Také je ukázáa možost tvorby aplikace bez hlavího oka (místo hlavího oka je použit dialog) Nakoec jsou popsáy a pøedvedey stadardí dialogy typu: otevøít soubor, uložit soubor, výbìr barvy, výbìr písma, vzhled stráky, tisk, astaveí tisku a hledáí èi ahrazováí slov Tato kapitola je završea tvorbou rozsáhlejší aplikace, kterou je textový editor Teto editor podporuje práci se soubory, použití schráky a hledáí slov v editovaém textu 10 D MATOUŠEK: Visual C++ 6 0 vývojové prostøedí A