Beispiel 1: Einfachstes denkbares MFC-Beispiel
Inhalt:
Schritt 1: Anwendungsgerüst
Schritt 2: In der CView-Klasse ein bißchen Zeichenlogik zufügen
Klassendiagramm
Doxygen-Doku
Dieses Beispiel zeigt die minimalst mögliche MFC-Anwendung, nämlich eine CView mit
minimalen Zeichenoperationen.
Hier gibt es das Beispiel zum Download: MFCMinimal.zip
Schritt 1: Anwendungsgerüst
Erstellen des Anwendungsgerüsts (SDI-Anwendung) gemäß Beschreibung von Hr. Dreher.
Über "Datei" -> "Neu" -> "Projekt..." ein neues Projekt erstellen. Als Projekttyp wird
"Visual C++" -> "MFC" gewählt. Wir geben dem Projekt den Namen "MFCMinimal".
Es öffnet sich der "MFC-Anwendungs-Assistent".
Wir wählen links den Punkt "Anwendungstyp" und rechts "Einfaches Dokument".
Die weiteren Einstellungen werden auf den Default-Werten belassen. Im letzten Schritt ("Generierte Klassen")
ist im Unterschied zu Hr. Drehers Anleitung die Basisklasse der View-Klasse "CMFCMinimalView" vom Typ "CView".
Die in Hr. Drehers Anleitung deaktivierte Druckunterstützung (Schritt "Erweiterte Features") können wir belassen,
da eine CView druckbar ist.
Schritt 2: In der CView-Klasse ein bißchen Zeichenlogik zufügen
Die Datei "MFCMinimalView" öffnen und die Methode "OnDraw" öffnen.
Zuallererst einmal muss der auskommentierte Parameter "pDC" einkommentiert werden.
Der Methodenkopf sollte also so aussehen (rot der zu entfernende Code):
void CMFCMinimalView::OnDraw(CDC* /*pDC*/)
In der Methode nach dem TODO folgenden Code einfügen:
pDC->Rectangle (100, 100, 200, 200);
Dadurch wird ein Rechteck an der Stelle 100/100 bis 200/200 gezeichnet.
Das Codebeispiel enthält außerdem noch ein Stück Code mit einem erweiterten Zeichenbeispiel
(Hintergrund- und Vordergrundfarbe geändert):
//Ein Rechteck in anderer Vordergrund- und Hintergrundfarbe.
//Dazu müssen wir uns einen Brush definieren.
CBrush *brushRed = new CBrush (RGB (255, 0, 0) );
CPen *penBlue = new CPen (PS_SOLID, 2, RGB (0, 0, 255) );
pDC->SelectObject (brushRed);
pDC->SelectObject (penBlue);
//Noch ein Rechteck, diesmal gefüllt...
pDC->Rectangle (100, 210, 200, 310);
//Den Brush und den Pen wieder freigeben:
delete brushRed;
delete penBlue;
Jetzt können wir das Programm über das Menü "Debuggen" -> "Debuggen starten" ausführen, ober über "F5", oder
über den entsprechenden Toolbar-Button.
Beachtet was beim Beenden des Programms im "Output"-Fenster steht, wenn die beiden "delete"-Zeilen auskommentiert werden:
Detected memory leaks!
Dumping objects ->
c:\temp\vs2005\mfcminimal\mfcminimal\mfcminimalview.cpp(63) : {179} client block at 0x0045A590, subtype c0, 8 bytes long.
a CPen object at $0045A590, 8 bytes long
c:\temp\vs2005\mfcminimal\mfcminimal\mfcminimalview.cpp(62) : {175} client block at 0x004597E8, subtype c0, 8 bytes long.
a CBrush object at $004597E8, 8 bytes long
Also immer schön den Speicher aufräumen !
Klassendiagramm
Hier gibt es das Klassendiagramm als Together-Architect-1.1-XML-Export (Default-Dateiformat-Option):
MFCMinimal.xml
Doxygen-Doku
Im letzten Schritt erzeugen wir die Doxygen-Doku. Im Beispiel verwende ich den DoxyWizard.
Nach dem Start des Wizards auf "Wizard..." klicken.
Auf der Karteikarte "Project" geben wir den Projektnamen a. Im Feld "Project version or id"
können wir einen beliebigen Text angeben. Das "Source code directory" angeben (hier liegen
die .cpp- und .h-Dateien). Als Destination-Directory würde ich das gleiche Verzeichnis
verwenden wie für den Quellcode. Grund: die generierte HTML-Doku landet in einem Unterverzeichnis "html".
Auf der Karteikarte "Mode" sollten wir sicherstellen dass "Optimize for C++ output" aktiviert ist (Default).
Auf der Karteikarte "Output" entfernen wir den Default-Haken bei "LaTex", nur HTML sollte aktiv
sein.
Die Karteikarte "Diagrams" können wir ignorieren, da kam bei mir nix raus...
Zurück im Hauptfenster müssen wir die Config speichern um sie später immer wieder zu laden.
Da die Pfade allerdings absolut sind würde ich die Doku nicht zwischen PCs austauschen. Ohne das Speichern können
wir das Tool nicht starten.
Außerdem müssen wir ein Working Directory angeben. Ich weiß nicht wozu, scheinbar reicht hier "c:\temp".
Jetzt auf "Start" klicken und die Generierung läuft. Im Doc-Verzeichnis können wir die index.html
öffnen um uns die Doku anzuschauen.
Über den Button "Expert..." können wir übrigens die Sprache der generierten Doku umschalten:
Im folgenden einige Beispiel, aus der Doku der Klasse CMainFrame:
Eine Klassendoku kann so aussehen:
/**\brief Hauptfenster der Anwendung.
*
* Vom Klassenassistenten generiert, keine Änderungen
*/
class CMainFrame : public CFrameWnd
{
Besonderheit: durch \brief
wird der gesamte Text bis zur nächsten Leerzeile als Kurzkommentar in den Titel der Doku-Seite
gepackt. Das Erzeugen von Kurzbeschreibungen wird in den Experten-Optionen auf der ersten Karteikarte ("Project") mittels
der Checkbox "BRIEF_MEMBER_DESC" ein-/ausgeschaltet, im Default ist es aktiv.
Eine Methodendoku kann so aussehen:
/**Initialisierung des Fensters vor dem Erzeugen.
* Hier passiert nichts.
* @param cs Mittels dieser CREATESTRUCT kann das Layout des Fensters geändert werden.
* @return 0 bei Fehlern, jeder andere Wert im Erfolgsfall.
*/
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
Also eigentlich wie JavaDoc-Methodendeklarationen.
Wer es ganz exakt machen will kann auch hier eine Kurzbeschreibung (\brief
) angeben.
Version 1.2.1.0, Stand 16.04.2006
Historie:
1.0.0.0 Erstellt (02.04.2006)
1.1.0.0 Klassendiagramm (10.04.2006)
1.2.0.0 DoxyGen-Anleitung, Projekt hat DoxyGen-Kommentar. (12.04.2006)
1.2.1.0 DoxyGen-Anleitung: Mini-HowTo. Code: Methodenparameter und -Rückgabewerte, Kurzbeschreibungen der Klassen.
Falsch verlinktes Bild bei der DoxyGen-Sprachumschaltung. (16.04.2006)