Kapitel 1 Einblick in den internen Hintergrund von "Einfache Eingabe und Ausgabe"
Im 1. Beispiel haben wir sehr schnell mit Hilfe des Visual Studios ein
lauffähiges Programm zustande bekommen. Jetzt wollen wir an Hand
dieses Programms lernen, was der Code in den Dateien bedeutet.
Da wir jetzt an dem Code experimentieren werden, stellen wir
zunächst eine Sicherheitkopie des ganzen Ordners Projektes BEA1
her. Wenn wir uns beim Experimentieren verzetteln, können wir so
die Sicherheitskopie schnell drüber kopieren und haben wieder den
"sauberen" Programmcode.
Mit dem Explorer öffnen wir das Projektverzeichnis /BEA1/ und erhalten folgenden Inhalt:
/Debug
/ipch
/res
BEA1.APS
BEA1.cpp
BEA1.h
BEA1.rc
BEA1.sdf
BEA1.sln
BEA1.suo
BEA1.vcxproj
BEA1.vcxproj.filters
BEA1.vcxproj.user
BEA1Dlg.cpp
BEA1Dlg.h
ReadMe.txt
resource.h
stdafx.cpp
stdafx.h
targetver.h
Die erste Adresse für unsere Projekte ist immer die *.sln-Datei.
Mit Doppelkick öffnet sich das Visual Studio. Eine Beschreibung
der wichtigsten Einzeldateien enthält die ReadMe.txt. Öffnen
Sie die ReadMe.txt und lernen Sie die Bedeutung der einzelnen Dateien
kennen.
Im Visual Studio öffnen wir im Projektmappen-Explorer die Datei Resource.h. Hier sehen wir die folgenden Definitionen:
#define
IDM_ABOUTBOX
0x0010
#define
IDD_ABOUTBOX
100
#define
IDS_ABOUTBOX
101
#define IDD_BEA1_DIALOG 102
#define
IDR_MAINFRAME
128
#define
IDC_BREITE
1000
#define
IDC_LAENGE
1001
#define
IDC_BERECHNEN
1002
#define
IDC_FLAECHE
1003
#define
IDC_BEENDEN
1004
Um Verweise, Deklarationen, Definitionen oder weitere Zusammenhänge rasch zu finden, setzen wir einen Rechtsklick z.B. auf
IDM_ABOUTBOX und dann --> 'Alle Verweise suchen' . Im Ergebniss sehen wir im Ausgabefenster u.a.:
bea1dlg.cpp(105): pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
Ein Doppelklick darauf öffnet die Quelldatei BEA1.cpp und der Cursor steht an der folgenden Stelle:
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
Wenn Sie nun über AppendMenu etwas erfahren möchten, setzen
Sie auch hier wieder mit Rechtsklick --> 'Alle Verweise suchen'
: afxwin.h(1214): BOOL AppendMenu(UINT nFlags, UINT_PTR
nIDNewItem, const CBitmap* pBmp);
Damit erfahren Sie Hinweise auf Rückgabewerte, Parameter und Typen von Funktionen.
Genauso können Sie auch die anderen Definitionen analysieren.
Wenn wir über 'Erstellen' --> 'BEA1 neu erstellen' unser
ausführbares Programm erzeugen, führen Compiler und Linker die
entsprechen Schritte durch und geben das Protokoll im Ausgabefenster
aus:
1>------ Neues Erstellen gestartet: Projekt: BEA1, Konfiguration: Debug Win32 ------
1>Der Buildvorgang wurde am 29.02.2016 11:28:37 gestartet.
1>_PrepareForClean:
1> Die Datei "Debug\BEA1.lastbuildstate" wird gelöscht.
1>InitializeBuildStatus:
1> "Debug\BEA1.unsuccessfulbuild" wird erstellt, da "AlwaysCreate" angegeben wurde.
1>ClCompile:
1> stdafx.cpp
1> BEA1Dlg.cpp
1> BEA1.cpp
1> Code wird generiert...
1>Manifest:
1> Die Datei "Debug\BEA1.exe.embed.manifest" wird gelöscht.
1>LinkEmbedManifest:
1> BEA1.vcxproj -> e:\FTokar\VS2010\Source\BEA1\Debug\BEA1.exe
1>FinalizeBuildStatus:
1> Die Datei "Debug\BEA1.unsuccessfulbuild" wird gelöscht.
1> Aktualisieren des Timestamps von "Debug\BEA1.lastbuildstate".
1>
1>Das Erstellen war erfolgreich.
1>
1>Verstrichene Zeit 00:00:11.22
========== Alles neu erstellen: 1 erfolgreich, Fehler bei 0, 0 übersprungen ==========
Das ausführbare Programm finden wir im Unterverzeichnis /Debug/
BEA1.exe
Dieses Programm können Sie auf jedem PC mit dem
Windows-Betriebssystem starten. Damit das auch bei Anwendern
funktioniert, die keine Microsoft-Entwicklungsumgebung auf Ihren
Rechner installiert haben, wurde bei der Projekterstellung die
Verwendung von MFC mit "MFC in einer statischen Bibliothek verwenden"
angekreuzt:
Der obere Teil des Fensters unseres Programms BEA1.exe hat folgendes Aussehen:
Oben links neben dem Titel sehen Sie als Icon das Logo der MFC-Bibliothek.
Wenn wir es anklicken, öffnet sich ein Auswahlmenü:
Verschieben, Größe ändern, Minimieren, Maximieren und
Schließen werden angeboten. Wenn wir 'Info über BEA1...'
klicken, öffnet sich die Aboutbox:
Diese Aboutbox können wir mit unserem eigenen Copyright
ausstatten. Im Projektmappen-Explorer gehen wir zu den
Ressourcendateien und finden die Datei BEA1.ico. Ein Doppelklick
öffnet den Symboleditor und hier können wir unser
eigenes Logo bauen.
Sie können aber auch außerhalb vom Visual Studio, z.B. mit
dem freien Programm IcoFX ein Logo herstellen. Es sollte dann eine
Variante der Auflösungen vom MFC-Logo besitzen:
Das neue Logo speichern bzw. kopieren wir in das Verzeichnis /res/ mit
dem Namen BEA1.ico . In der Ressourcenansicht klicken wir unter Dialog
auf IDD_ABOUTBOX mit Doppelklick und ändern den
Copyright-Text nach unseren Vorstellungen um.
Dann erhalten wir z.B. dieses Aussehen:
Öffnen
Sie nun im Projektmappen-Explorer die Datei BEA1.rc mit Rechtsklick und
"Öffnen mit" mit dem C++ Quellcode-Editor. Schauen Sie sich den
Abschnitt Dialog an:
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Info über BEA1"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,14,14,20,20
LTEXT
"BEA1, Version 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX
LTEXT
"Copyright © soFTpano 02/2016",IDC_STATIC,42,26,114,8
DEFPUSHBUTTON "OK",IDOK,113,41,50,14,WS_GROUP
END
IDD_BEA1_DIALOG DIALOGEX 0, 0, 259, 158
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX |
WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CAPTION "Beispiel 1 Eingabe/Ausgabe"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "Beenden",IDC_BEENDEN,202,7,50,14
EDITTEXT IDC_BREITE,78,28,59,16,ES_AUTOHSCROLL
LTEXT "Breite:",IDC_STATIC,46,31,22,13
LTEXT "in cm",IDC_STATIC,148,30,56,14
EDITTEXT IDC_LAENGE,78,53,59,15,ES_AUTOHSCROLL
LTEXT "Länge:",IDC_STATIC,46,55,32,13
LTEXT "in cm",IDC_STATIC,146,54,26,14
GROUPBOX "Ergebnisse",IDC_STATIC,21,83,170,60
PUSHBUTTON "Berechnung ausführen",IDC_BERECHNEN,68,96,82,13
EDITTEXT IDC_FLAECHE,78,118,59,16,ES_AUTOHSCROLL | ES_READONLY
LTEXT
"Flächeninhalt:",IDC_STATIC,23,121,55,9
LTEXT "in cm²",IDC_STATIC,145,122,31,11
END
/////////////////////////////////////////////////////////////////////////////
Auch
hier können Sie den Titel-Text der Aboutbox oder der Hauptbox des
Programms ändern oder den Copyright-Text der Aboutbox
verändern.
Die Hilfe zu einem unbekannten Begriff erhalten wir durch Markieren und
F1 drücken. Wir probieren das einmal mit dem Begriff DIALOGEX. Es
öffnet sich das lokale Hilfefenster:
Jetzt klicken Sie auf online und die MSDN-Hilfe zeigt die Erklärung (allerdings in englisch):
Benutzen Sie diese Hilfe mit F1 immer wieder, damit Sie Ihr Verständnis ständig erweitern.
Schauen wir uns das Ressourcenscript weiter an:
STYLE
DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
Hier
werden die verschiedenen Eigenschaften des Fensters der Hauptdialogbox
festgelegt. Wenn Sie wieder einen Begriff markieren und F1
drücken, erklärt Ihnen die Hilfe die Bedeutung der einzelnen
Windows Styles. Die senkrechten Striche sind bitweise
ODER-Verknüpfungen der verschiedenen Styles.
Dieser Blick hinter die Kulissen soll Ihnen helfen, selbständig
Begriffe und Zusammenhänge Ihrer Programmierung aufzuklären.