Kurz IDE Visual C++ (2.)


V této lekci najdete návod, jak vytvořit konzolovou aplikaci pro kurz C++ a standardní MFC AppWizard [exe] aplikaci pro kurz DirectX.

2.1. Win32 Console Application

V prvním kurzu C++ se učíme základy C, takže projekt, který vytváříte musí být co nejjednodušší. V nějakém starém vývojovém prostředí by patrně nebyl problém vytvořit takto jednoduchý projekt, protože programování nového programu začínalo vždy od naproste nuly! Když jste v menu vybrali položku New, prostředí vytvořilo jeden prázdný soubor s příponou .c nebo .cpp a vše ostatní zůstalo na vás. VC++ je mnohem chytřejší a programátorovi napíše mnoho řádek samo. To ale může být zvláště v začátcích krajně nežádoucí. Proto VC++ umožňuje vytvořit tzv. konzolovou aplikaci, která se jednoduchostí velice přibližuje výše uvedenému programu.

Jak tedy vytvoříme konzolovou aplikaci ve Visual C++?

V minulé lekci tohoto kurzu jsme se letmo pokusili vytvořit takový projekt, ale pro úplnost vše vysvětlím od začátku.

  1. Vyberte z menu File položku New. Otevře se vám dialog podobný tomuto:



  2. Ujistěte se, že máte vybranou kartu Projects a položku Win32 Console Application.
  3. Do okénka Project Name napište jméno nového projektu třeba Pepa. V okénku location nalistujte cestu k vašemu programu. To druhé je celkem důležité, jinak se vám projekt vytvoří kdesi a vy ho pak nenajdete :-)
  4. Ostatní volby (pokud nějaké jsou) nechte jak jsou a klepněte na tlačítko OK.
  5. Otevře se vám další dialog tzv. Wizard (česky Průvodce nebo Čaroděj). Wizard vás provede zbytkem vytváření vaší nové aplikace. V konzolovém aplikaci je Wizard velice prostý, protože obsahuje pouze jeden dialog se čtyřmi volbami.



    Rozeberme si jednotlivé volby:

    • An empty project
      Vytvoří naprosto prázdný projekt, který neobsahuje jediný soubor, jediný řádek kódu. Do projektu můžete postupně přidávat jak hlavičkové tak i zdrojové soubory.

    • A simple application
      Tato volba je pro nás ta nejpodstatnější, protože obsahuje jediný zdrojový soubor právě s fukncí main(), která nás velice zajímá.

    • A "Hello, World!" application
      Vytvoří praktický stejný projekt jako předchozí volba, ale přidá navíc jeden řádek, který zařídí vypsání textu "Hello, World!" na obrazovku. Pozor! Zde je použita funkce printf(), nikoliv cout! Program vypíše text "Hello, World!", odřádkuje a skončí.

    • An application that supports MFC
      Vytvoří projekt který podporuje knihovnu MFC. Program prakticky dělá totéž, co všechny předchozí s tím rozdílem, že můžete využívat všechny výhody MFC a zdroje (Resources). Ti z vás, kteří neznají MFC, se s touto volbou vůbec nemusí zabývat, nám totiž naprosto postačí druhý projekt.

  6. Vyberte druhou volbu a stiskněte tlačítko Finish. Po stisku tohoto tlačitka se ještě zobrazí souhrn, ve kterém přehledně vidíte všechny důležité volby. Potvrďte stiskem OK.

Výsledná aplikace může využívat všechny funkce normální oknové aplikace, ale sama žádné okno nemá. K testování tohoto programu je výborné využívat Příkazovou řádku Windows (Command line).

Dále se tedy budeme zabývat pouze konzolovou aplikací typu A simple application, která jak už jsem psal, obsahuje pouze funkci main(), známou z C. Je to vstupní a zaroveň výstupní bod celeho programu. Je to první funkce, kterou Windows volají po spuštění programu a při ukončení funkce main() celý program skončí.


Poznámka: Pokud pracujete s více vlákny (thread), program se ukončí až po dokončení posledního vlákna. Ano i takto zdánlivě primitivní aplikace může využívat více vláken - multithreading.
Funkce je podrobně popsána v druhé lekci kurzu o C++, takže jen krátce. Funkce vrací hodnotu typu int, která je zároveň výstupní hodnota hlavního vlákna aplikace. Program by měl vracet něco jiného než 0, pokud v průběhu programu došlo k chybě. Vstupní parametry jsou trošičku složitější. Jedná se o parametry příkazové řádky. V prvním parametru je uložena hodnota, která udává počet parametrů příkazové řádky. Hodnota tohoto parametru je minimálně 1, protože program bere jako parametr i jméno programu (pepa.exe). Druhý parametr je ukazatel na pole řetězců obsahující jednotlivé parametry. Jak se pracuje s těmito parametry je vidět v příkladu z kurzu C++.

2.2. MFC AppWizard (exe)

Tato druhá část je pro čtenáře druhého kurzu o DirectX. Dneska jsme si něco řekli o GDI a tak si vytvoříme takovou aplikaci, abyste mohli hned využít nově nabyté vědomosti.

Narozdíl od první části si vytvoříme aplikaci, která má okno. To je hlavní a podstatný rozdíl. Konzolová aplikace nemá žádne grafické uživatelské rozhraní, má pouze textové a tak se uživatel může dorozumívat z programem pouze pomocí textových zpráv.

Uživatel oknové aplikace má k dispozici mnohem rozsáhlejší arzenál grafického uživatelského rozhraní - user interface - UI. Může vytvářet libovolná okna či dialogy. Na výběr je mnoho ovládacích prvků od jednoduchých Edit Boxů po složité prvky ActiveX. Vytvoříte tak běžnou aplikaci pro Windows, která má jedno či více oken nebo dialog.

Na druhou stranu musíte znát poměrně dobře za prvé jazyk C++ a za druhé samotné vývojové prostředí, takže pokud zatím tápete, doporučuji si toto nechat na později.

Vytváříme standardní oknovou aplikaci MFC ve Visual C++

Ze začátku postup bude podobný jako u prvého příkladu.

  1. Vyberte z menu File položku New. Otevře se vám dialog podobný tomuto:



  2. Ujistěte se, že máte vybranou kartu Projects a položku MFC AppWizard (exe).
  3. Do okénka Project Name napište jméno nového projektu třeba GDI. V okénku location nalistujte cestu k vašemu programu. To druhé je celkem důležité, jinak se vám projekt vytvoří kdesi a vy ho pak nenajdete :-)
  4. Ostatní volby (pokud nějaké jsou) nechte jak jsou a klepněte na tlačítko OK.
  5. Wizard k tomuto typu projektu o hodně složitejší. První dialog vypadá následovně:



    Máme následující volby:

    • Single document
      Vytvoří oknovou aplikaci s jedním oknem, které nemá žádné potomky neboli child window - potomek hlavního okna. Typickou aplikací SDI (Single document interface) je například Poznámkový blok (Notepad). Je to nejjednodušší oknová aplikace a proto ji zvolíme i my.

    • Multiple documents
      Narozdíl od SDI je MDI (Multiple documents interface) aplikace, která má hlavní okno a uvnitř tohoto okna jsou další "dětská" okna (child). Těchto oken tam může být neomezené množství a dají se různě rovnat a řadit. Typickou aplikací je třeba samotné vývojové prostředí Visual C++. Můžete mít otevřených mnoho zdrojových souborů najednou atd.

    • Dialog based
      Taková aplikace vlastní jeden dialog, který si vytvoříte v editoru zdrojů. Třeba kalkulačka ve Windows je vlastně dialog s mnoha tlačítky.

    • Document/View achitecture support
      Tato volba je trošku složitější a pro nás zatím nepodstatná, takže jen krátce. Pokud chcete vytvořit aplikaci pro Windows, silně doporučuji nechat tuto volbu zaškrtnutou. Příště ale uvidíte, že až budeme vytvářet projekt pro DirectX aplikaci, necháme tuto volbu odšktnutou, abysme si ušetřili trochu práce.

    • Jazyk zdrojů
      Zde vyberte jazyk, kterým chcete, aby aplikace komunikovala s uživatelem. Žel čeština není k dispozici a nepodařilo se mi přijít na způsob, jak ji přidat do seznamu (pravděpodobně stačí nahrát příslušnou knihovnu do adresáře vývojového prostředí).

      Tak první dialog bychom měli za sebou. Dále budu popisovat pouze postup SDI aplikace, protože ta je pro nás v současné době důležitá, ale jsem si jistý, že se postupně dostaneme ke všem typům.

  6. Stiskněte tlačítko Next a objeví se další dialog v pořadí:



    Zde necháme implicitní (přednastavené) volby, protože se jedná o podporu databází pro vaši aplikaci a to nás nezajímá a myslím, že dlouho zajímat nebude.
  7. Přejděme tedy rovnou dále:



    Zde opět není nic moc zajímavého. Jedná se o podporu složených dokumentů. Tím se zatím zabývat nebudeme, protože se jedna o značně pokročilejší techniky programování. Jediné, co stojí za povšimnutí jsou poslední dvě políčka Automation a ActiveX Controls. To první aktivuje podporu Automatizace COM, což je velice užitečná věc, ale opět vyžaduje značné vědomosti. Poslední políčko zapíná podporu prvků ActiveX. Pokud necháte políčko zaškrtnuté, budete moci vkládat prvky ActiveX do vašeho projektu.
  8. Další dialog je velice důležitý:



    Zde je mnoho voleb, takže si je vezmeme pěkně popořádku:

    • Docking toolbar
      Vytvoří vám toolbar neboli horní lištu, na které jsou tlačítka umožňující rychlý přístup k některým položkám menu. Vytvoří jednoduchý toolbar s pár tlačítky, ale vy si ho samozřejmě můžete upravit podle svých představ.

    • Initial status bar
      Tato volba pro změnu vytvoří stavový řádek neboli lištu v dolní části okna.

    • Printing and print preview
      Aktivuje tisk a tiskový náhled pro vaši aplikaci. Stači, když budeme mít zaškrnuté toto políčko a vaše aplikace bude tisknout obsah okna. Jak snadné!

    • Context-sensitive help
      Zapne podporu kontextové nápovědy.

    • 3D-controls
      Tato volba ovlivňuje vzhled prvků na dialozích, v oknu atd. Pokud zůstane políčko nezaškrtnuté budou všechny prvky ploché.

    • MAPI
      Aktivuje podporu MAPI (Messaging Application Programming Interface), pomocí které budete moci například odesílat emaily z vaší aplikace.

    • Windows Socket
      Podpora TCP/IP ve vaší aplikaci vhodná pro síťový software.

    • Typ toolbaru
      Umožňuje programátorovi nastavit dva různé typy toolbaru. Volba Normal vytvoří standardní toolbar, který známe třeba MS Wordu. Druhá volba Internet Explorer ReBars vytvoří toolbar s velkými tlačítky, které uvidíte třeba v Internet Exploreru.

    • Počet naposledy používaných souborů
      Zde zadejte maximální počet souborů, který se zobrazí v menu File jako Recent Files - Napoledy používané soubory.

    Jak vidíte, možností je opravdu hodně. Pro náš první příklad s GDI bude stačit jednoduchá aplikace, takže všechny volby nechte nezašktnuté. Jistě jste si všimli tlačítka Advanced.... Toto tlačítko umožňuje nastavení dalších věci, jako jsou extenze vašich dokumentu, některé atributy samotného okna atd.
  9. Přejděme na další dialog:



    Zde jsou k dispozici tři nastavení:

    • MFC Standard nebo Windows Explorer
      Vytvoří buď normální aplikaci s jedním oknem nebo aplikaci typu Explorer, kde je hlavní okno rozděleno na dvě. Průzkumník ve Windows je aplikace tohoto typu.

    • Generování komentářů
      VC++ je tak chytré, že vám ke kódu vygeneruje své komentáře. Doporučuji tuto volbu nechat v původním nastavení, protože komentáře se hodí.

    • Způsob použití knihoven MFC
      Nastavuje způsob, jakým jsou knihovny MFC slinkovány s vaším programem. Pokud necháte dynamické linkování, váš program bude mít pár kilobajtů, ale bude závislý na dvou knihovnách msvcrt.dll a mfc42.dll, které koncový uživatel nemusí mít na svém počítači, takže váš program nepůjde spustit. Druhá volba vytvoří výsledný program mnohem větší (kolem 1MB), ale přestane být závislý na těchto knihovnách.

  10. Konečně je tu poslední krok a aplikace bude hotová:



    Na posledním dialogu vidíte všechny třídy, které se VC++ hodlá vytvořit. Můžete změnit jména tříd a zdrojových souborů. Vidíte i třídu pohledu CGDIView. Právě v ní se nachází funkce OnDraw(), kterou upravujete v příkladu.

2.3. Závěr

Vidíte, že AppWizard vám vytvoří podstatnou část aplikace, přesto to podstatné zůstane vždy na vás. Úkolem AppWizardu je vytvořit hrubou kostru programu. Praktický každý typ projektu má svůj vlastní AppWizard a navíc si můžete navrhovat vlastní.

Co si povíme příště?

Příště mám v plánu vám povědět něco o možná záhadném okně po levé straně IDE, které obsahuje ClassView, ResourceView a FileView. Navíc si povíme, jak upravit aplikaci MFC tak, aby vyhovovala DirectX, protože příště začneme teorii DirectDraw. Samozřejmě dotazy a připomínky uvítám!

Těším se příště nashledanou.

Jiří Formánek