Sdílet prostřednictvím


Použití zdrojových souborů MFC

Knihovna MFC (Microsoft Foundation Class) poskytuje úplný zdrojový kód. Soubory hlaviček (.h) jsou v adresáři \atlmfc\include . Implementační soubory (.cpp) jsou v adresáři \atlmfc\src\mfc .

Tento článek vysvětluje konvence, které MFC používá k zakomentování různých částí každé třídy, co tyto komentáře znamenají a co byste měli očekávat, že najdete v každé části. Průvodci sadou Visual Studio používají podobné konvence pro třídy, které pro vás vytvářejí, a pravděpodobně tyto konvence budou užitečné pro váš vlastní kód.

Možná znáte publicklíčová slova , protecteda private C++. V souborech hlaviček MFC najdete, že každá třída může mít několik z nich. Například veřejné členské proměnné a funkce můžou být pod více než jedním public klíčovým slovem. Je to proto, že MFC odděluje členské proměnné a funkce na základě jejich použití, nikoli podle typu povoleného přístupu. MFC používá private střídmě. Dokonce i položky považované za podrobnosti implementace jsou často protecteda často jsou public. I když se nedoporučuje přístup k podrobnostem implementace, MFC vás rozhodne.

Ve zdrojových souborech MFC i v hlavičkových souborech, které průvodce aplikací MFC vytvoří, najdete komentáře podobné těm v deklarací třídách (obvykle v tomto pořadí):

// Constructors

// Attributes

// Operations

// Overridables

// Implementation

Příklad komentářů

Následující částečný výpis třídy CStdioFile používá většinu standardních komentářů, které MFC používá ve svých třídách k rozdělení členů třídy způsoby, kterými se používají:

/*============================================================================*/
// STDIO file implementation

class CStdioFile : public CFile
{
    DECLARE_DYNAMIC(CStdioFile)

public:
// Constructors
    CStdioFile();

    // . . .

// Attributes
    FILE* m_pStream;    // stdio FILE
                        // m_hFile from base class is _fileno(m_pStream)

// Operations
    // reading and writing strings
    virtual void WriteString(LPCTSTR lpsz);
    virtual LPTSTR ReadString(_Out_writes_z_(nMax) LPTSTR lpsz, _In_ UINT nMax);
    virtual BOOL ReadString(CString& rString);

// Implementation
public:
    virtual ~CStdioFile();
#ifdef _DEBUG
    void Dump(CDumpContext& dc) const;
#endif
    virtual ULONGLONG GetPosition() const;
    virtual ULONGLONG GetLength() const;
    virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);

    // . . .

protected:
    void CommonBaseInit(FILE* pOpenStream, CAtlTransactionManager* pTM);
    void CommonInit(LPCTSTR lpszFileName, UINT nOpenFlags, CAtlTransactionManager* pTM);
};

Tyto komentáře konzistentně označují oddíly deklarace třídy, které obsahují podobné druhy členů třídy. Mějte na paměti, že se jedná o konvence MFC, ne o nastavení pravidel.

Komentář konstruktorů

Oddíl // Constructors deklarace třídy MFC deklaruje konstruktory (ve smyslu C++) a všechny inicializační funkce potřebné k použití objektu. Je například v oddílu konstruktorů, CWnd::Create protože před použitím objektu CWnd musí být "plně sestaven" zavoláním konstruktoru jazyka C++ a následným voláním Create funkce. Obvykle jsou tito členové veřejné.

Například třída CStdioFile má pět konstruktorů, z nichž jedna je zobrazena v seznamu pod příkladem komentářů.

Komentář k atributům

Oddíl // Attributes deklarace třídy MFC obsahuje veřejné atributy (nebo vlastnosti) objektu. Atributy jsou obvykle členské proměnné nebo funkce Get/Set. Funkce Get a Set můžou nebo nemusí být virtuální. Funkce Get jsou často const, protože ve většině případů nemají vedlejší účinky. Tito členové jsou obvykle veřejné. Chráněné a privátní atributy se obvykle nacházejí v části implementace.

V ukázkovém výpisu z třídy v části Příklad komentářů obsahuje seznam jednu členovou proměnnou m_pStream.CStdioFile Předmět CDC uvádí v tomto komentáři téměř 20 členů.

Poznámka

Velké třídy, například CDC a CWnd, mohou mít tolik členů, že jednoduše výpis všech atributů v jedné skupině by nepřidá mnohem srozumitelnost. V takových případech knihovna tříd používá další komentáře jako nadpisy k dalšímu vymezení členů. Například CDC používá // Device-Context Functions, // Drawing Tool Functions, // Drawing Attribute Functionsa další. Skupiny představující atributy se budou řídit obvyklou syntaxí popsanou výše. Mnoho tříd OLE má oddíl implementace s názvem // Interface Maps.

Komentář k operacím

Oddíl // Operations deklarace třídy MFC obsahuje členské funkce, které můžete volat objekt, aby mohl provádět akce nebo provádět akce (provádět operace). Tyto funkce jsou obvykle ne-const protože obvykle mají vedlejší účinky. V závislosti na potřebách třídy můžou být virtuální nebo nevirtuální. Obvykle jsou tito členové veřejné.

V ukázkovém výpisu z třídy CStdioFilev příkladu komentářů obsahuje seznam tři členské funkce pod tímto komentářem: WriteString a dvě přetížení ReadString.

Stejně jako u atributů je možné operace dále rozdělit.

Komentář k přepisovatelným

Oddíl // Overridables deklarace třídy MFC obsahuje virtuální funkce, které můžete přepsat v odvozené třídě, když potřebujete upravit chování základní třídy. Obvykle se označují jako "Zapnuto", i když to není nezbytně nutné. Tady jsou funkce navržené tak, aby se přepsaly, a často implementují nebo poskytují nějaký druh zpětného volání nebo "hook". Obvykle jsou tito členové chráněni.

V samotné knihovně MFC jsou v této části vždy umístěny čistě virtuální funkce. Čistá virtuální funkce v jazyce C++ má tvar:

virtual void OnDraw( ) = 0;

V ukázkovém výpisu ze třídy CStdioFilev příkladu komentářů seznam neobsahuje žádné přepisovatelné oddíly. Třída CDocumentna druhé straně uvádí přibližně 10 přepisovatelných členských funkcí.

V některých třídách se může také zobrazit komentář // Advanced Overridables. Tyto funkce jsou ty, které by se měli pokusit přepsat pouze pokročilí programátoři. Pravděpodobně je nebudete muset přepsat.

Poznámka

Konvence popsané v tomto článku také dobře fungují obecně pro automatizaci (dříve označované jako automatizace OLE) metody a vlastnosti. Metody automatizace jsou podobné operacím MFC. Vlastnosti automatizace jsou podobné atributům MFC. Události automatizace (podporované pro ovládací prvky technologie ActiveX, dříve označované jako ovládací prvky OLE), se podobají přepisovatelným členským funkcím MFC.

Komentář k implementaci

Oddíl // Implementation je nejdůležitější součástí jakékoli deklarace třídy MFC.

Tato část obsahuje všechny podrobnosti implementace. V této části se můžou objevit jak členské proměnné, tak členské funkce. Všechno pod tímto řádkem se může v budoucí verzi MFC změnit. Pokud se tomu nemůžete vyhnout, neměli byste se spoléhat na podrobnosti pod řádkem // Implementation . Kromě toho jsou členy deklarované pod řádkem implementace nezdokumentovány, i když některé implementace jsou popsány v technických poznámkách. Přepsání virtuálních funkcí v základní třídě se nachází v této části bez ohledu na to, ve které části je funkce základní třídy definována. Když funkce přepíše implementaci základní třídy, považuje se za podrobnosti implementace. Obvykle jsou tito členové chráněni, ale ne vždy.

CStdioFile V seznamu pod příkladem komentářů mohou být členové deklarovaní pod // Implementation komentářem deklarovány jako public, protectednebo private. Tyto členy používejte opatrně, protože se můžou v budoucnu měnit. Deklarování skupiny členů, jak public může být nezbytné, aby implementace knihovny tříd fungovala správně. Neznamená to ale, že můžete bezpečně používat členy tak deklarované.

Poznámka

Komentáře zbývajících typů najdete nad nebo pod komentářem // Implementation . V obou případech popisují typy členů deklarovaných pod nimi. Pokud se objeví pod // Implementation komentářem, měli byste předpokládat, že se členové můžou v budoucích verzích MFC změnit.

Viz také

Obecná témata MFC