Freigeben über


Verwenden der MFC-Quelldateien

Die Microsoft Foundation Class (MFC)-Bibliothek liefert vollständigen Quellcode. Headerdateien (H) befinden sich im Verzeichnis \atlmfc\include . Implementierungsdateien (.cpp) befinden sich im Verzeichnis \atlmfc\src\mfc .

In diesem Artikel werden die Konventionen erläutert, die MFC verwendet, um die verschiedenen Teile jeder Klasse zu kommentieren, was diese Kommentare bedeuten und was Sie in den einzelnen Abschnitten erwarten sollten. Die Visual Studio-Assistenten verwenden ähnliche Konventionen für die Klassen, die sie für Sie erstellen, und Sie werden diese Konventionen wahrscheinlich für Ihren eigenen Code nützlich finden.

Möglicherweise sind Sie mit den Schlüsselwort (keyword) und den publicprotectedprivate C++-Schlüsselwort (keyword) vertraut. In den MFC-Headerdateien werden Sie feststellen, dass jede Klasse mehrere davon enthält. Beispielsweise können öffentliche Membervariablen und -funktionen unter mehr als einem public Schlüsselwort (keyword) sein. Dies liegt daran, dass MFC Membervariablen und -funktionen basierend auf ihrer Verwendung trennt, nicht nach dem zulässigen Zugriffstyp. MFC verwendet private sparsam. Auch Elemente, die als Implementierungsdetails betrachtet werden, sind häufig protected, und viele Male sind public. Obwohl der Zugriff auf die Implementierungsdetails entmutigt wird, verlässt MFC die Entscheidung für Sie.

Sowohl in den MFC-Quelldateien als auch in den Headerdateien, die der MFC-Anwendungs-Assistent erstellt, finden Sie Kommentare wie diese in Klassendeklarationen (in der Regel in dieser Reihenfolge):

// Constructors

// Attributes

// Operations

// Overridables

// Implementation

Ein Beispiel für die Kommentare

In der folgenden Teilauflistung der Klasse CStdioFile werden die meisten Standardkommentare verwendet, die MFC in ihren Klassen verwendet, um Klassenmmber anhand der verwendeten Verwendungsmöglichkeiten zu dividieren:

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

Diese Kommentare markieren konsistent Abschnitte der Klassendeklaration, die ähnliche Arten von Klassenmitgliedern enthalten. Denken Sie daran, dass sie MFC-Konventionen sind und keine Regeln festlegen.

Konstruktorenkommentare

Der // Constructors Abschnitt einer MFC-Klassendeklaration deklariert Konstruktoren (im C++-Sinne) und alle Initialisierungsfunktionen, die zum wirklichen Verwenden des Objekts erforderlich sind. Beispiel: Befindet sich im Abschnitt "Konstruktoren", CWnd::Create da es vor der Verwendung des CWnd Objekts "vollständig konstruiert" sein muss, indem er zuerst den C++-Konstruktor aufruft und dann die Create Funktion aufruft. In der Regel sind diese Mitglieder öffentlich.

Beispielsweise verfügt die Klasse CStdioFile über fünf Konstruktoren, von denen einer in der Auflistung unter "Ein Beispiel für die Kommentare" angezeigt wird.

Attributkommentar

Der // Attributes Abschnitt einer MFC-Klassendeklaration enthält die öffentlichen Attribute (oder Eigenschaften) des Objekts. In der Regel sind die Attribute Membervariablen oder Get/Set-Funktionen. Die Funktionen "Abrufen" und "Festlegen" sind möglicherweise virtuell. Die "Get"-Funktionen sind häufig const, da sie in den meisten Fällen keine Nebenwirkungen haben. Diese Mitglieder sind normalerweise öffentlich. Geschützte und private Attribute werden in der Regel im Implementierungsabschnitt gefunden.

In der Beispielauflistung aus der Klasse CStdioFileenthält die Liste unter einem Beispiel der Kommentare eine Membervariable, m_pStream. Die Klasse CDC listet fast 20 Mitglieder unter diesem Kommentar auf.

Hinweis

Große Klassen, z CDC . B. und CWnd, haben möglicherweise so viele Mitglieder, die einfach alle Attribute in einer Gruppe auflisten würden nicht viel zu Klarheit hinzufügen. In solchen Fällen verwendet die Klassenbibliothek andere Kommentare als Überschriften, um die Member weiter zu delineieren. Verwendet // Device-Context Functionsz. BCDC. , // Drawing Tool Functions, // Drawing Attribute Functionsund mehr. Gruppen, die Attribute darstellen, folgen der oben beschriebenen üblichen Syntax. Viele OLE-Klassen haben einen Implementierungsabschnitt namens // Interface Maps.

Operations-Kommentar

Der // Operations Abschnitt einer MFC-Klassendeklaration enthält Memberfunktionen, die Sie für das Objekt aufrufen können, um aktionen auszuführen oder Aktionen auszuführen (Vorgänge ausführen). Diese Funktionen sind in der Regel nicht-const weil sie in der Regel Nebenwirkungen haben. Sie können virtuell oder nichtvirtual sein, je nach den Anforderungen der Klasse. In der Regel sind diese Mitglieder öffentlich.

In der Beispielauflistung der Klasse CStdioFileenthält die Liste in einem Beispiel der Kommentare drei Memberfunktionen unter diesem Kommentar: WriteString und zwei Überladungen von ReadString.

Wie bei Attributen können Vorgänge weiter unterteilt werden.

Außerkraftsetzungskommentare

Der // Overridables Abschnitt einer MFC-Klassendeklaration enthält virtuelle Funktionen, die Sie in einer abgeleiteten Klasse überschreiben können, wenn Sie das Verhalten der Basisklasse ändern müssen. Sie werden in der Regel mit "Ein" benannt, obwohl es nicht unbedingt erforderlich ist. Hier sind Funktionen so konzipiert, dass sie überschrieben werden und häufig eine Art "Rückruf" oder "Hook" implementieren oder bereitstellen. In der Regel sind diese Member geschützt.

In MFC selbst werden reine virtuelle Funktionen immer in diesem Abschnitt platziert. Eine reine virtuelle Funktion in C++ hat folgende Form:

virtual void OnDraw( ) = 0;

In der Beispielauflistung aus der Klasse CStdioFileenthält die Liste in einem Beispiel der Kommentare keinen Außerkraftsetzungsbereich. Die Klasse CDocumentlistet dagegen ca. 10 überschreibbare Memberfunktionen auf.

In einigen Kursen wird möglicherweise auch der Kommentar // Advanced Overridablesangezeigt. Diese Funktionen sind diejenigen, die nur erweiterte Programmierer versuchen sollten, außer Kraft zu setzen. Sie müssen sie wahrscheinlich nie überschreiben.

Hinweis

Die in diesem Artikel beschriebenen Konventionen funktionieren im Allgemeinen auch gut für Automatisierungsmethoden und -eigenschaften (früher als OLE-Automatisierung bezeichnet). Automatisierungsmethoden ähneln MFC-Vorgängen. Automatisierungseigenschaften ähneln MFC-Attributen. Automatisierungsereignisse (unterstützt für ActiveX-Steuerelemente, früher ALS OLE-Steuerelemente bezeichnet) ähneln MFC-überschreibbaren Memberfunktionen.

Implementierungskommentar

Der // Implementation Abschnitt ist der wichtigste Teil jeder MFC-Klassendeklaration.

Dieser Abschnitt enthält alle Implementierungsdetails. Sowohl Membervariablen als auch Memberfunktionen können in diesem Abschnitt angezeigt werden. Alles unter dieser Zeile könnte sich in einer zukünftigen Version von MFC ändern. Wenn Sie dies nicht vermeiden können, sollten Sie sich nicht auf Details unter der // Implementation Zeile verlassen. Darüber hinaus werden mitglieder, die unterhalb der Implementierungslinie deklariert sind, nicht dokumentiert, obwohl einige Implementierungen in technischen Anmerkungen behandelt werden. Außerkraftsetzungen virtueller Funktionen in der Basisklasse befinden sich in diesem Abschnitt, unabhängig davon, in welchem Abschnitt die Basisklassenfunktion definiert ist. Wenn eine Funktion die Implementierung der Basisklasse außer Kraft setzt, wird sie als Implementierungsdetail betrachtet. In der Regel sind diese Member geschützt, aber nicht immer.

In der CStdioFile Auflistung unter Einem Beispiel der Kommentare können Mitglieder, die unterhalb des // Implementation Kommentars deklariert sind, als public, protectedoder private. Verwenden Sie diese Mitglieder nur mit Vorsicht, da sie sich in Zukunft ändern können. Deklarieren einer Gruppe von Mitgliedern, da public die Klassenbibliotheksimplementierung möglicherweise ordnungsgemäß funktioniert. Dies bedeutet jedoch nicht, dass Sie die so deklarierten Mitglieder möglicherweise sicher verwenden.

Hinweis

Möglicherweise finden Sie Kommentare der Re Standard ing-Typen entweder oberhalb oder unterhalb des // Implementation Kommentars. In beiden Fällen beschreiben sie die Arten von Mitgliedern, die darunter deklariert wurden. Wenn sie unterhalb des // Implementation Kommentars auftreten, sollten Sie davon ausgehen, dass sich die Mitglieder in zukünftigen Versionen von MFC ändern können.

Siehe auch

Allgemeine MFC-Themen