Tvorba vlastních App-Wizardů (MFC a C++)

Pokud vlastníte některou verzi Microsoft Visual C++, tak určitě hojně využíváte průvodce App-Wizard pro vytvoření základní kostry aplikace. Tento program však umožňuje tvorbu dalších takovýchto průvodců a to stejným způsobem, jako když navrhujeme standardní program. My si v tomto příkladu ukážeme tvorbu průvodce pro tu nejjednodušší aplikaci MFC, která je založena pouze na třídách CWinApp a CFrameWnd.

Nejprve si otevřeme Visual C++ a z nabídky File vybereme New... . Mělo by se nám zobrazit okno jako na tomto obrázku.

Průvodce

V nabídce projektů vybereme Custom AppWizard a do kolonky Project name napíšeme název našeho projektu. Potom klikneme na Ok a mělo by se nám zobrazit takovéto okno:

Průvodce

V tomto okně si nejprve zvolíme, jestli náš budoucí průvodce bude odvozen od nějakého existujícího nebo jestli chceme vytvořit úplně nový. My vybereme pole Your own custom steps a do kolonky uprostřed okna napíšeme název, pod kterým se bude výsledný průvodce zobrazovat. Poslední kolonku s číslem 1 necháme nezměněnou, protože toto číslo určuje počet kroků, které bude wizard mít. Abychom zachovali jednoduchost, použijeme pouze jeden krok. Potom klikneme na Finish a necháme si vygenerovat náš projekt.

Po vygenerování projektu si jako první necháme zobrazit zdroje programu a v nich najdeme dialogové okno s názvem IDD_CUSTOM1 . Toto okno bude použito ve výsledném průvodci, takže vše, co na něj dáme, bude potom vidět. Protože naše aplikace nebude moc složitá, stačí si na něj dát pro ukázku jeden prvek Edit a pomocí mechanismu DDX ho propojit s proměnnou typu CString, kterou nazveme např. m_titulek . A nyní přistoupíme k editaci zdrojového kódu:

Slovníky

Projekt, který budeme pomocí našeho průvodce generovat, se ve zdrojovém souboru rozlišuje pomocí tzv. slovníků. Tento slovník je v našem projektu reprezentován globální proměnnou se jménem -jménoprojektu-- + aw , takže pokud je jméno projektu SimpleMFC bude jméno slovníku SimpleMFCaw. V tomto slovníku přiřadíme určitým názvům hodnoty a ty potom použijeme v rozlišení zdroj. kódu. V našem případě, kdy máme jediný údaj titulek, to bude vypadat nějak takto: (tento kód zapište do funkce OnDismiss())

SimpleMFCaw.m_Dictionary["TITULEK"]=m_titulek;
//Tímto jsme hodnotě titulek přiřadili titulek naší aplikace

Soubory pro tvorbu

Pokud jste si pozorně prohlédli soubory v projektu, narazili jste určitě na dva se jmény confirm.inf a newproj.inf . Tyto soubory určují, které soubory budou do výsledného projektu zahrnuty a taky, co se zobrazí v šedém poli při tvorbě projektu. Souboru confirm.inf si nebudeme všímat a zaměříme se na soubor newproj.inf.

Soubory, které budou zahrnuty do projektu, určíme tak, že nejdříve napíšeme jméno našeho připraveného souboru (popíši později) a potom za tabulátor jméno souboru, kterým se bude jmenovat ve výsledném projektu. Jelikož toto jméno však neznáme, použijeme připravenou konstantu $$root$$ , která obsahuje název projektu. Soubor newproj.inf bude mít tedy takovýto obsah:

app.h --zde nejsou mezery, ale jeden tabulátor-- $$root$$.h
app.cpp --zde nejsou mezery, ale jeden tabulátor-- $$root$$.cpp

Text --zde nejsou mezery, ale jeden tabulátor-- samozřejmě nahradíme jedním tabulátorem.

Zdrojové soubory

Soubory app.h a app.cpp, které jsme uvedli v newproj.inf, si nyní vytvoříme a popíšeme. Tyto soubory obsahují zdrojový kód, který bude použit při tvorbě nového projektu. Soubor app.h by měl mít přibližně takovýto obsah:

//Třída hlavní aplikace programu

class C$$root$$App: public CWinApp
{
public:
  virtual BOOL InitInstance();
};

//---------------------------------------
//Třída hlavního okna

class C$$root$$Wnd: public CFrameWnd
{
public:
  C$$root$$Wnd();
  
protected:
  DECLARE_MESSAGE_MAP()
};

Jak vidíte, byly zde vytvořeny dvě třídy, které budou ve výsledné aplikaci. A nyní soubor app.cpp:

#include "afxwin.h"
#include "$$root$$.h"

C$$root$$App myApp;

//Členské funkce třídy C$$root$$App
BOOL C$$root$$App::InitInstance()
{
  m_pMainWnd=new C$$root$$Wnd;
  m_pMainWnd->ShowWindow(m_nCmdShow);
  m_pMainWnd->UpdateWindow();
  
  return TRUE;
}

BEGIN_MESSAGE_MAP(C$$root$$Wnd,CFrameWnd)
END_MESSAGE_MAP()

C$$root$$Wnd::C$$root$$Wnd()
{
  Create(NULL,"$$TITULEK$$");      //Zde je použit slovník
}

Nyní tedy vidíte, jak se slovník používá v praxi. Jméno TITULEK, které jsme si nadefinovali ve zdrojovém kódu, se nyní použije uzavřeno v "$$" a hned máme vytvořen titulek okna.

Nakonec ještě musíme soubory app.h a app.cpp přidat do projektu jako zdroj, který bude mít stejné jméno, jako je název souboru. Takže například soubor app.h se bude ve zdroji nazývat "app.h" (uvozovky jsou nutné).

Tohle je tedy vše, co je potřeba pro tvorbu wizardu udělat. Nyní už jen stačí projekt překompilovat a "jakoby" spustit. Při spouštění se tento projekt zaregistruje do Visual C++ a potom už ho najdeme ve standardním okně pro výběr projektu (nahoře).

Doufám, že vám tento článek přinesl nějaké zajímavé informace a pokud máte nějaké nejasnosti, tak mi napište.

UPOZORNĚNÍ: Jedná se o archiv článků z let 2003 - 2005, uvedené technologie či postupy již mohou být neaktuální.