Freigeben über


Verwenden der MFC-Quelldateien

Die Microsoft Foundation Class (MFC)-Bibliothek liefert vollständigen Quellcode. Header-Dateien (.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üsselwörtern public, protectedund private C++ vertraut. In den MFC-Headerdateien werden Sie feststellen, dass jede Klasse mehrere davon enthält. Zum Beispiel können öffentliche Mitgliedvariablen und -funktionen unter mehr als einem public Schlüsselwort 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 nicht empfohlen wird, überlässt MFC Ihnen die Entscheidung.

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 seinen Klassen nutzt, um Klassenmitglieder nach ihrer Verwendung zu unterteilen.

/*============================================================================*/
// 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. Zum Beispiel befindet sich CWnd::Create im Abschnitt "Konstruktoren", weil es, bevor das CWnd-Objekt verwendet wird, "vollständig konstruiert" sein muss, indem es 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.

// Attribute Kommentar

Der // Attributes Abschnitt einer MFC-Klassendeklaration enthält die öffentlichen Attribute (oder Eigenschaften) des Objekts. In der Regel sind die Attribute Mitgliedsvariablen oder Get/Set-Funktionen. Die Funktionen "Get" und "Set" können virtuell sein oder auch nicht. Die „Get“ -Funktionen sind oftconst, weil 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, wie z. B. CDC und CWnd, können so viele Elemente haben, dass einfach alle Attribute in einer Gruppe aufzulisten nicht viel zur Klarheit beiträgt. In solchen Fällen verwendet die Klassenbibliothek andere Kommentare als Überschriften, um die Mitglieder weiter zu beschreiben. Zum Beispiel verwendet CDC// Device-Context Functions, // Drawing Tool Functions, // Drawing Attribute Functions und mehr. Gruppen, die Attribute darstellen, folgen der oben beschriebenen üblichen Syntax. Viele OLE-Klassen haben einen Implementierungsabschnitt namens // Interface Maps.

/ /Betriebskommentar

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

In der Beispielliste aus Klasse CStdioFile, in Ein Beispiel für die Kommentare, enthält die Liste drei Mitgliederfunktionen unter diesem Kommentar: WriteString and two overloads of ReadString.

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

/ /Overridables-Kommentar

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“ beginnend benannt, obwohl dies nicht unbedingt erforderlich ist. Funktionen sind hier so konzipiert, dass sie überschrieben werden und oft eine Art "Rückruf" oder "Haken" implementieren oder bereitstellen.“ In der Regel sind diese Mitglieder 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 Beispielliste aus der Klasse CStdioFileIn einem Beispiel für die Kommentare enthält die Liste keinen Abschnitt mit Überschneidungen. Klasse CDocumenthingegen listet etwa 10 überschreibbare Elementfunktionen auf.

In einigen Kursen wird möglicherweise auch der Kommentar // Advanced Overridables angezeigt. Diese Funktionen sollten nur fortgeschrittene Programmierer außer Kraft setzen. Sie müssen sie wahrscheinlich nie außer Kraft setzen.

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 bekannt als OLE-Steuerelemente) ähneln MFC-überbrückbaren Elementfunktionen.

Implementierungskommentar

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

Dieser Abschnitt enthält alle Implementierungsdetails. In diesem Abschnitt können sowohl Member-Variablen als auch Member-Funktionen 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 Mitglieder 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, protected oder private deklariert werden. Verwenden Sie diese Mitglieder nur mit Vorsicht, da sie sich in Zukunft ändern können. Das Deklarieren einer Gruppe von Mitgliedern als public kann notwendig sein, damit die Klassenbibliotheksimplementierung ordnungsgemäß funktioniert. Dies bedeutet jedoch nicht, dass Sie die so deklarierten Mitglieder sicher nutzen können.

Hinweis

Möglicherweise finden Sie Kommentare der verbleibenden Typen entweder oberhalb oder unterhalb des // Implementation Kommentars. In beiden Fällen beschreiben sie die Arten von Mitgliedern, die unter ihnen deklariert sind. 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