David Matouek
VISUAL C++ 6.0 VÝVOJOVÉ PROSTØEDÍ
Praha 2003
David Matouek
VISUAL C++ 6.0 vývojové prostøedí Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo rozmnoována jakoukoli formou (tisk, fotokopie, mikrofilm nebo jiný postup), zadána do informaèního systému nebo pøenáena v jiné formì èi jinými prostøedky. Autor a nakladatelství nepøejímají záruku za správnost titìných materiálù. Pøedkládaná zapojení a informace jsou zveøejnìny bez ohledu na pøípadné patenty tøetích osob. Nároky na odkodnìní na základì zmìn, chyb nebo vynechání jsou zásadnì vylouèeny. Vekerá práva vyhrazena. © Ing. David Matouek, 2003 © Nakladatelství BEN technická literatura, Vìínova 5, Praha 10 David Matouek: VISUAL C++ 6.0 vývojové prostøedí BEN technická literatura, Praha 2003 1. vydání ISBN 80-7300-130-6
OBSAH
O KNIZE ................................................................ 10 1
ÚVOD .................................................................... 11
1.1
Klasická aplikace vytvoøená ve Visual C++ .................................. 12
1.2
Na øadì je MFC ................................................................................ 14
1.2.1 1.2.2 1.2.3
Architektura dokument/pohled ...................................................................... 14 Hierarchie tøíd MFC ....................................................................................... 14 Funkce AFX .................................................................................................. 15
1.3
První aplikace vytvoøená pomocí MFC ......................................... 15
1.3.1
Zaloení projektu ............................................................................. 15
1.3.2
Generace tøíd MFC aplikace ........................................................... 17
1.3.3
Zápis metod ..................................................................................... 18
1.3.4
Vytvoøení metody CPrvniApp::InitInstance .................................. 20
1.3.5
Pøipojení MFC do projektu .............................................................. 20
1.3.6
Zdrojové soubory ............................................................................ 22
1.3.7
Pøeklad .............................................................................................. 24
1.3.8
Jak je aplikace sestavena ............................................................... 25
1.3.9
Význam jednotlivých souborù ....................................................... 25
2
POPIS TØÍD CFRAMEWND A CWINAPP ................ 27
2.1
Tøída CFrameWnd ........................................................................... 28
2.1.1 2.1.2 2.1.3
Atributy .......................................................................................................... 29 Metody .......................................................................................................... 30 Handlery (výbìr základních) ......................................................................... 34
2.2
Tøída CWinApp ................................................................................ 38
2.2.1 2.2.2 2.2.3
Atributy .......................................................................................................... 38 Metody .......................................................................................................... 39 Handlery ........................................................................................................ 40
3
PRVNÍ KROKY S OBJEKTY MFC .......................... 41
3.1
Zmìna nastavení okna .................................................................... 42
3.2
Uivatelská ikona ............................................................................ 45
3.3
Handlery ........................................................................................... 50
3.4
Zobrazujeme messagebox ............................................................. 52
3.5
Pár trikù na závìr ............................................................................ 54
A
D. MATOUEK: Visual C++ 6.0 vývojové prostøedí
3
3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6
Vytvoøení uvolnìné verze .............................................................................. 54 Sestavení aplikace tak, aby nepotøebovala dynamické knihovny ................. 55 Otevøení poslednì rozpracovaných projektù ................................................ 56 Dokonèování kódu ........................................................................................ 56 Hledání informací v MSDN ........................................................................... 58 Ladìní aplikace ............................................................................................. 58
4
KRESLENÍ DO OKNA ............................................ 61
4.1
Základní informace .......................................................................... 62
4.2
Windows GDI ................................................................................... 62
4.2.1 4.2.2 4.2.3 4.2.4
Tøída CPaintDC ............................................................................................. 63 Tøída CClientDC ............................................................................................ 63 Tøída CWindowDC ........................................................................................ 63 Tøída CMetaFileDC ....................................................................................... 63
4.3
POPIS TØÍDY CPAINTDC ...................................... 64
4.3.1 4.3.2
Atributy .......................................................................................................... 64 Metody .......................................................................................................... 64
4.4
Základní kreslicí metody ................................................................. 67
4.4.1 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7
Pøesun pera, práce s pixely .......................................................................... 67 Kreslení obdélníkù, elips, obloukù apod. ...................................................... 68 Kreslení mnohoúhelníkù a série úseèek ....................................................... 70 Kreslení køivek .............................................................................................. 70 Kreslení bitmap ............................................................................................. 71 Výpis textu .................................................................................................... 72 Dalí funkce .................................................................................................. 73
4.5
Struktury POINT a SIZE .................................................................. 73
4.6
Tøída CPoint ..................................................................................... 73
4.6.1 4.6.2 4.6.3
Konstruktory .................................................................................................. 74 Metoda Offset ............................................................................................... 74 Operátory ...................................................................................................... 74
4.7
Typ COLORREF a makro RGB ....................................................... 75
4.8
Tøída CGDIObject a její následníci ................................................. 75
4.8.1 4.8.2 4.8.3 4.8.4
Tøída CPen .................................................................................................... 76 Tøída CBrush ................................................................................................. 77 Tøída CFont ................................................................................................... 78 Tøída CBitmap ............................................................................................... 79
4.9
Pøíklady ............................................................................................. 81
4.9.1 4.9.2 4.9.3 4.9.4
Kreslení bodù ................................................................................................ 81 Výpis textu .................................................................................................... 82 Styly per ........................................................................................................ 85 Styly tìtcù .................................................................................................... 87
4
D. MATOUEK: Visual C++ 6.0 vývojové prostøedí
A
4.9.5 4.9.6 4.9.7 4.9.8 4.9.9 4.9.10
Rectangle, FillRect, FrameRect, RoundRect ................................................ 89 Mnohoúhelníky a køivky ................................................................................ 90 Ellipse, Arc, Chord, Pie a AngleArc ............................................................... 92 Ukládání a obnovování stavu kontextu ......................................................... 93 Pouití metody CPaintDC::BitBlt ................................................................... 95 Pouití metody CPaintDC::StretchBlt ............................................................ 95
4.10
Skrolování okna ............................................................................... 97
4.10.1 4.10.2 4.10.3 4.10.4 4.10.5
Zobrazení scrollbarù ..................................................................................... 97 Nastavení scrollbarù ..................................................................................... 97 Zprávy scollbarù ............................................................................................ 98 Metoda CFrameWnd::ScrollWindow ........................................................... 100 Pøíklad pouití ............................................................................................. 100
5
PRÁCE S NABÍDKAMI ......................................... 107
5.1
Základní pojmy .............................................................................. 108
5.1.1 5.1.2 5.1.3
Hlavní nabídka ............................................................................................ 108 Místní nabídka ............................................................................................ 109 Systémová nabídka ..................................................................................... 110
5.2
Tvorba nabídek .............................................................................. 110
5.3
Tøída CMenu ................................................................................... 111
5.3.1 5.3.2
Atribut .......................................................................................................... 111 Metody ........................................................................................................ 111
5.4
Základní operace s tøídou CMenu ................................................ 118
5.4.1 5.4.2 5.4.3
Zpùsoby zavedení nabídky ze zdroje ......................................................... 118 Programové vytváøení nabídek ................................................................... 118 Uvolnìní nabídky z pamìti .......................................................................... 118
5.5
Nabídky a zprávy ........................................................................... 119
5.6
Handlery pro podporu nabídky tøídou CFrameWnd .................. 119
5.7
Handlerová makra ......................................................................... 123
5.7.1 5.7.2 5.7.3 5.7.4 5.7.5 5.7.6
ON_COMMAND .......................................................................................... 123 ON_COMMAND_RANGE ........................................................................... 123 ON_WM_SYSCOMMAND .......................................................................... 123 ON_WM_CONTEXTMENU ........................................................................ 124 ON_WM_MEASUREITEM .......................................................................... 124 ON_WM_DRAWITEM ................................................................................. 124
5.8
Pøíklady ........................................................................................... 124
5.8.1 5.8.2 5.8.3 5.8.4 5.8.5
První aplikace s hlavní nabídkou ................................................................ 124 Pøidáváme místní nabídku .......................................................................... 135 Místní nabídka jako zrcadlo podnabídky ..................................................... 141 Uivatelsky kreslené poloky nabídky ........................................................ 143 Pøidání poloek nabídky za bìhu programu, práce se systémovou nabídkou .................................................................. 147
A
D. MATOUEK: Visual C++ 6.0 vývojové prostøedí
5
6
ZÁKLADNÍ OVLÁDACÍ PRVKY (KOMPONENTY) .. 151
6.1
Spoleèný pøedek CWnd ................................................................ 152
6.1.1 6.1.2 6.1.3
Atribut .......................................................................................................... 152 Metody ........................................................................................................ 152 Vytvoøení prvku a zmìna stylu .................................................................... 153
6.2
Tlaèítko tøída CButton ................................................................ 153
6.2.1 6.2.2
Metody ........................................................................................................ 155 Pøíklad elementární práce s tlaèítky Styly tlaèítek a události ................... 157
6.3
Statický prvek tøída CStatic ....................................................... 165
6.3.1 6.3.2
Metody ........................................................................................................ 166 Pøíklad pouití Ukládání informací do ovládacího prvku, zmìna stylu ji vytvoøeného ovládacího prvku ................................................................ 168
6.4
Posuvník tøída CScrollBar ......................................................... 175
6.4.1 6.4.2
Metody ........................................................................................................ 175 Pøíklad pouití Nová tøída CColorScrollBar (lze volit barvu scrollbaru) .... 177
6.5
Editaèní pole tøída CEdit ............................................................ 184
6.5.1 6.5.2 6.5.3 6.5.4
Metody ........................................................................................................ 184 Základní práce s tøídou CEdit ..................................................................... 188 Jednoduchý textový editor .......................................................................... 192 Omezení vstupu (èíslice), tøída CNumEdit .................................................. 200
6.6
Seznam tøída CListBox .............................................................. 203
6.6.1 6.6.2 6.6.3 6.6.4 6.6.5
Metody (vìtina z tìchto metod vrací pøi chybì hodnotu LB_ERR) ........... 204 Styl LBS_SORT .......................................................................................... 210 Metoda CListBox::SetTabStops .................................................................. 214 Seznam jmen souborù ................................................................................ 217 Uivatelský seznam souborù (vèetnì zobrazení asociované ikony a délky souboru) ............................... 222
6.7
Prvek combobox tøída CComboBox ......................................... 233
6.7.1 6.7.2
Metody ........................................................................................................ 234 Pøíklad ukazující styly comboboxù .............................................................. 237
6.8
Dalí ovládací prvky ...................................................................... 240
7
POMOCNÉ TØÍDY ................................................ 241
7.1
CString práce s øetìzci .............................................................. 242
7.2
CFile práce se soubory .............................................................. 245
7.2.1 7.2.2
Tøída CMemFile podpora práce s dynamickou pamìtí ............................ 246 Dalí následníci tøídy CFile ......................................................................... 247
7.3
CArray pole ................................................................................. 247
7.3.1 7.3.2
Indexování .................................................................................................. 248 Velikost pole ................................................................................................ 248
7.4
CException ..................................................................................... 249
6
D. MATOUEK: Visual C++ 6.0 vývojové prostøedí
A
7.4.1 7.4.2 7.4.3
Konstruktor .................................................................................................. 250 Metody ........................................................................................................ 250 CFileException ............................................................................................ 250
7.5
Práce s inicializaèními soubory a systémovou databází Registry ........................................................................... 251
8
DIALOGY ............................................................. 257
8.1
Tøída CDialog ................................................................................. 258
8.1.1 8.1.2 8.1.3 8.1.4
Modální dialog ............................................................................................. 259 Nemodální dialog ........................................................................................ 260 Metody ........................................................................................................ 260 Handlery ...................................................................................................... 261
8.2
Dialog o aplikaci ............................................................................ 261
8.3
Výmìna dat .................................................................................... 270
8.4
Validace dat .................................................................................... 283
8.5
Nemodální dialog .......................................................................... 290
8.6
Dialog jako hlavní okno aplikace ................................................. 301
8.7
Standardní dialogy ........................................................................ 309
8.7.1 8.7.2 8.7.3 8.7.4 8.7.5 8.7.6
CFileDialog ................................................................................................. 309 CColorDialog ............................................................................................... 314 CFontDialog ................................................................................................ 315 CPageSetupDialog ..................................................................................... 318 CPrintDialog ................................................................................................ 321 CFindReplaceDialog ................................................................................... 324
8.8
Jedna vìtí aplikace na závìr Textový editor .......................... 327
LITERATURA ...................................................... 342 REJSTØÍK ........................................................... 343 KNIHY BEN TECHNICKÁ LITERATURA ........... 351
A
D. MATOUEK: Visual C++ 6.0 vývojové prostøedí
7
CO NAJDETE NA DOPROVODNÉM CD-ROM Doprovodné CD-ROM obsahuje vechny informace potøebné pro snadnou práci s knihou. Tyto informace lze rozdìlit do logických celkù, které se nacházejí v oddìlených adresáøích: n
adresáø ATMEL je off-line podoba èásti www stránek firmy ATMEL zamìøených na AVR.
n
adresáø BEN obsahuje off-line verzi www stránek nakladatelství BEN technická literatura (aktualizováno k poèátku bøezna 2003), jejich souèástí je poèítaèová verze titìného katalogu Edièního plánu jaro/léto 2003,
n
adresáø DATASHEET obsahuje dokumentaci vybraných integrovaných obvodù, které jsou v knize pouívány, ve formátu PDF. Najdete zde té samorozbalitelný archiv programu Adobe Acrobat Reader verze 5.0, který slouí k prohlíení PDF souborù,
n
adresáø FOTO obsahuje, jak sám název napovídá, fotografie hotových pøípravkù. Kadý byl nafocen z nìkolika pohledù, aby byla lépe dokumentována jejich moná stavba, Do shodného adresáøe jsme umístili trial verzi prohlíeèe ACDSee staenou z Internetu (http://www.acdsystems.com): ACDSee Classic (velikost instalaèního souboru cca 1,6 MB, minimální poadavky Windows 95/98/Me/NT4/2000, PC 486DX s 32 MB RAM, reim grafického adaptéru s 256barvami, 4 MB volného místa na pevném disku, vhodný Internet Explorer 4.0 nebo pozdìjí). Tip: pokud se vám fotografie zdají pøíli tmavé, aktivujte ve vaem prohlíeèi Gamma korekci na hodnotu napø. 1.50 (optimální hodnota závisí na nastavení vaeho grafického subsystému).
n
adresáø KATALOG obsahuje elektronický ceník firmy GM Electronic staený z Internetu (z poèátku bøezna 2003) a poèítaèovou podobu titìného katalogu v PDF. Aktualizovanou verzi lze získat na URL: http://www.gme.cz. Orientaèní ceny vech souèástek byly brány z tohoto katalogu. Navíc je zde umístìna poèítaèová verze (PDF) titìného katalogu pro rok 2003,
n
adresáø OBECNICE je off-line podoba www stránek (vèetnì ceníku) pøedního èeského prodejce obvodù (Zásilková sluba ELEKTRONIC OBECNICE), programovacích kitù a programátorù Atmel. Navíc je na tìchto stránkách pøehled zapojení konektorù a redukcí ze známého webu Hardware book,
n
adresáø PROGRAMY obsahuje zdrojové i pøeloené formy vech programù realizovaných v knize, jakoto ovládací program programátoru ISP (SDKAVR),
n
adresáø SPOJE obsahuje klié ploných spojù vech pøípravkù popsaných v knize ve formátu TIF a navíc ve zdrojovém formátu BRD programu EAGLE je verze 2.6, aby si ètenáøi pøípadnì mohli ploné spoje upravit podle vlastních pøedstav. Nìkteré spoje jsme jetì v redakci dodateènì upravovali (zvìtování úchytných ploek pro souèástky,
), take finální verze je uloena pouze ve formátu TIF (je shodná s klié otitìnými v knize),
n
adresáø SW obsahuje software vhodné k váné práci s procesory Atmel AVR, staené z internetových stránek firmy ATMEL: AVR_3.1 (wAVRasm), AVR_3.5 (AVR Studio 3.5), AVR_4.0 (AVR Studio 4.0).
8
D. MATOUEK: Visual C++ 6.0 vývojové prostøedí
A
O KNIZE Tato kniha seznamuje ètenáøe formou podrobného popisu tøíd implementovaných v knihovnì MFC s programováním pomocí vývojového prostøedí Visual C++ 6.0. Nechybí samozøejmì pøíklady, které jsou praktickou ukázkou toho, jak programovat. Úvodní kapitola ukazuje (pro zajímavost) tvorbu klasické Win API aplikace. Jedná se o ukázku komplikovanosti vývoje programu bez pouití MFC. Proto je následnì ukázána tvorba podobné aplikace za pomoci MFC (postup je jednoduí a cílový kód dostateènì efektivní). Druhá kapitola se vìnuje pomìrnì detailnímu popisu tøíd CFrameWnd a CWinApp, které jsou velmi dùleité. Jedná se o bázové tøídy, ze kterých vytváøíme hlavní okno aplikace a aplikaci samotnou. Kromì popisu metod a atributù jsou uvedeny i nejvýznamnìjí handlery. Tøetí kapitola je praktickou ukázkou toho, jak vyuít moností tøíd CFrameWnd a CWinApp pøi tvorbì vlastní aplikace. Je také ukázána tvorba a pouití uivatelské ikony, je pøedvedeno pouití handlerù a zobrazení messageboxu. Kapitola konèí ukázkou ladìní aplikace pomocí debugeru. Ètvrtá kapitola nás nejprve seznamuje s filozofií kreslení do okna poèínaje popisem tøíd odvozených z CDC (pøedevím CPaintDC). Následuje popis pomocných tøíd (CPoint, CRect, CSize, CPen, CBrush, CFont, CBitmap) a dále jsou pøedvedeny pøíklady. Nakonec je ukázána aplikace dovolující skrolovat obsah okna. Pátá kapitola je vìnována nabídkám (menu). Po vysvìtlení základních pojmù a podrobném výkladu tøídy CMenu jsou opìt ukázány vzorové pøíklady. Kromì jiného se jedná o pouití radioitem poloek a poloek, které jsou uivatelsky kreslené. Také je ukázána monost úpravy systémové nabídky. está kapitola se vìnuje ovládacím prvkùm (komponentám). Jsou popsány tøídy obalující základní ovládací prvky Windows: CButton (tlaèítko, checkbox, radiobutton, groupbox), CStatic (titulek, rámeèek, obrázek), CScrollBar (scrollbar), CEdit (jednoøádkový i víceøádkový), CListBox (listbox), CComboBox (combobox). Výklad je doprovázen øadou netriviálních pøíkladù, ve kterých se èasto pouívají upravené ovládací prvky (odvozené ze základních tøíd). Sedmá kapitola pøináí zajímavé informace o tøídách, které zjednoduují vývoj aplikace. Jedná se o tøídy: CString (øetìzce), CFile (práce se soubory), CArray (ablona dynamického pole) a CException (bázová výjimka). Nakonec je ukázána práce s inicializaèním souborem a systémovou databází Registry pomocí metod obsaených ve tøídì CWinApp. Poslední (osmá) kapitola je vìnována dialogùm. Po nezbytném teoretickém úvodu a popisu tøídy CDialog je pøedvedena aplikace s dialogem O aplikaci. Dalí pøíklady ukazují pouití technologií DDX a DDV, které zjednoduují pøenos a validaci
A
D. MATOUEK: Visual C++ 6.0 vývojové prostøedí
9
dat mezi obalovou tøídou a samotným dialogem. Také je ukázána monost tvorby aplikace bez hlavního okna (místo hlavního okna je pouit dialog). Nakonec jsou popsány a pøedvedeny standardní dialogy typu: otevøít soubor, uloit soubor, výbìr barvy, výbìr písma, vzhled stránky, tisk, nastavení tisku a hledání èi nahrazování slov. Tato kapitola je zavrena tvorbou rozsáhlejí aplikace, kterou je textový editor. Tento editor podporuje práci se soubory, pouití schránky a hledání slov v editovaném textu.
10
D. MATOUEK: Visual C++ 6.0 vývojové prostøedí
A