Använda MFC-källfilerna

Anmärkning

Biblioteket För Microsoft Foundation-klasser (MFC) stöds fortfarande. Vi lägger dock inte längre till funktioner eller uppdaterar dokumentationen.

MFC-biblioteket (Microsoft Foundation Class) tillhandahåller fullständig källkod. Rubrikfiler (.h) finns i katalogen \atlmfc\include . Implementeringsfiler (.cpp) finns i katalogen \atlmfc\src\mfc .

Den här artikeln förklarar de konventioner som MFC använder för att kommentera de olika delarna av varje klass, vad dessa kommentarer betyder och vad du bör förvänta dig att hitta i varje avsnitt. Visual Studio-guiderna använder liknande konventioner för de klasser som de skapar åt dig, och du kommer förmodligen att tycka att dessa konventioner är användbara för din egen kod.

Du kanske är bekant med nyckelorden public, protected, och private C++. I MFC-huvudfilerna ser du att varje klass kan ha flera av dem. Till exempel kan variabler och funktioner för offentliga medlemmar vara under mer än ett public nyckelord. Det beror på att MFC separerar medlemsvariabler och funktioner baserat på deras användning, inte efter vilken typ av åtkomst som tillåts. MFC använder private sparsamt. Även objekt som anses vara implementeringsinformation är ofta protected, och många gånger är public. Även om åtkomst till implementeringsinformationen inte rekommenderas lämnar MFC beslutet till dig.

I både MFC-källfilerna och huvudfilerna som MFC-programguiden skapar hittar du kommentarer som dessa i klassdeklarationer (vanligtvis i den här ordningen):

// Constructors

// Attributes

// Operations

// Overridables

// Implementation

Ett exempel på kommentarerna

I följande partiella lista över klassen CStdioFile används de flesta standardkommenteringar som MFC använder i sina klasser för att dela upp klassmedlemmar efter hur de används:

/*============================================================================*/
// 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);
};

Dessa kommentarer markerar konsekvent avsnitt i klassdeklarationen som innehåller liknande typer av klassmedlemmar. Tänk på att de är MFC-konventioner, inte regler.

Konstruktorkommentare

Avsnittet // Constructors i en MFC-klassdeklaration deklarerar konstruktorer (i C++-bemärkelse) och eventuella initieringsfunktioner som krävs för att verkligen använda objektet. Finns till exempel CWnd::Create i konstruktoravsnittet eftersom det måste vara "helt konstruerat" innan du använder CWnd objektet genom att först anropa C++-konstruktorn och sedan anropa Create funktionen. Vanligtvis är dessa medlemmar offentliga.

Klassen CStdioFile har till exempel fem konstruktorer, varav en visas i listan under Ett exempel på kommentarerna.

Kommentar om attributen

Avsnittet // Attributes i en MFC-klassdeklaration innehåller objektets offentliga attribut (eller egenskaper). Attributen är vanligtvis medlemsvariabler eller Get/Set-funktioner. Funktionerna "Get" och "Set" kan vara virtuella eller inte. Get-funktionerna är ofta const, eftersom de i de flesta fall inte har konsekvenser. Dessa medlemmar är normalt offentliga. Skyddade och privata attribut finns vanligtvis i implementeringsavsnittet.

I exempellistan från klassen CStdioFileunder Ett exempel på kommentarerna innehåller listan en medlemsvariabel , m_pStream. Klassen CDC listar nästan 20 medlemmar under den här kommentaren.

Anmärkning

Stora klasser, till exempel CDC och CWnd, kan ha så många medlemmar att det inte skulle göra mycket tydligare att bara visa alla attribut i en grupp. I sådana fall använder klassbiblioteket andra kommentarer som rubriker för att ytterligare beskriva medlemmarna. Använder till exempel CDC// Device-Context Functions, // Drawing Tool Functions, // Drawing Attribute Functionsoch mycket mer. Grupper som representerar attribut följer den vanliga syntax som beskrivs ovan. Många OLE-klasser har ett implementeringsavsnitt med namnet // Interface Maps.

Kommentar om åtgärder

Avsnittet // Operations i en MFC-klassdeklaration innehåller medlemsfunktioner som du kan anropa på objektet för att få det att göra saker eller vidta åtgärder (utföra åtgärder). Dessa funktioner är vanligtvis icke-eftersomconst de vanligtvis har biverkningar. De kan vara virtuella eller icke-virtuella beroende på klassens behov. Vanligtvis är dessa medlemmar offentliga.

I exempellistan från klassen CStdioFilei Ett exempel på kommentarerna innehåller listan tre medlemsfunktioner under den här kommentaren: WriteString och två överlagringar av ReadString.

Precis som med attribut kan åtgärder delas upp ytterligare.

Kommentar om åsidosättningsbara element

Avsnittet // Overridables i en MFC-klassdeklaration innehåller virtuella funktioner som du kan åsidosätta i en härledd klass när du behöver ändra basklassbeteendet. De namnges vanligtvis med början "På", även om det inte är absolut nödvändigt. Funktionerna här är utformade för att åsidosättas och implementerar eller tillhandahåller ofta någon form av "återanrop" eller "hook". Vanligtvis är dessa funktioner skyddade.

I själva MFC placeras rena virtuella funktioner alltid i det här avsnittet. En ren virtuell funktion i C++ har formatet:

virtual void OnDraw( ) = 0;

I exempellistan från klassen CStdioFile, i Exempel på kommentarer, innehåller listan inga åsidosättbara avsnitt. Klass CDocument, å andra sidan, listar cirka 10 åsidosättbara medlemsfunktioner.

I vissa klasser kan du också se kommentaren // Advanced Overridables. Dessa funktioner är sådana som endast avancerade programmerare bör försöka åsidosätta. Du behöver troligtvis aldrig åsidosätta dem.

Anmärkning

De konventioner som beskrivs i den här artikeln fungerar också bra, i allmänhet, för automationsmetoder (tidigare kallade OLE Automation) och egenskaper. Automatiseringsmetoder liknar MFC-åtgärder. Automatiseringsegenskaper liknar MFC-attribut. Automation-händelser (stöds för ActiveX-kontroller, som tidigare kallades OLE-kontroller) liknar de medlemsfunktioner som kan åsidosättas av MFC.

Implementeringskommentar

Avsnittet // Implementation är den viktigaste delen i en MFC-klassdeklaration.

I det här avsnittet finns all implementeringsinformation. Både medlemsvariabler och medlemsfunktioner kan visas i det här avsnittet. Allt under den här raden kan ändras i en framtida version av MFC. Om du inte kan undvika det bör du inte förlita dig på information under // Implementation raden. Dessutom är medlemmar som deklareras under implementeringsraden odokumenterade, även om vissa implementeringar diskuteras i tekniska anteckningar. Åsidosättningar av virtuella funktioner i basklassen finns i det här avsnittet, oavsett vilket avsnitt basklassfunktionen definieras i. När en funktion åsidosätter basklassimplementeringen betraktas den som en implementeringsinformation. Vanligtvis skyddas dessa medlemmar, men inte alltid.

I listan CStdioFile under Ett exempel på kommentarerna kan medlemmar som deklareras under kommentaren // Implementation deklareras som public, protectedeller private. Använd endast dessa medlemmar med försiktighet, eftersom de kan ändras i framtiden. Att deklarera en grupp medlemmar som public kan vara nödvändigt för att implementeringen av klassbiblioteket ska fungera korrekt. Det betyder dock inte att du på ett säkert sätt kan använda medlemmarna som har deklarerats på detta sätt.

Anmärkning

Du kan hitta kommentarer av de återstående typerna antingen ovanför eller under kommentaren // Implementation . I båda fallen beskriver de de typer av medlemmar som deklareras under dem. Om de inträffar under kommentaren // Implementation bör du anta att medlemmarna kan komma att ändras i framtida versioner av MFC.

Se även

Allmänna MFC-ämnen