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 public
protected
private
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 CStdioFile
enthä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 Functions
z. BCDC
. , // 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
.
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 CStdioFile
enthä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 CStdioFile
enthält die Liste in einem Beispiel der Kommentare keinen Außerkraftsetzungsbereich. Die Klasse CDocument
listet dagegen ca. 10 überschreibbare Memberfunktionen auf.
In einigen Kursen wird möglicherweise auch der Kommentar // Advanced Overridables
angezeigt. 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
, protected
oder 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.