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:
BEA2 1
Der obere Teil des Fensters unseres Programms BEA1.exe hat folgendes Aussehen:
BEA2 2
Oben links neben dem Titel sehen Sie als Icon das Logo der MFC-Bibliothek. Wenn wir es anklicken, öffnet sich ein Auswahlmenü:
BEA2 3
Verschieben, Größe ändern, Minimieren, Maximieren und Schließen werden angeboten. Wenn wir 'Info über BEA1...' klicken, öffnet sich die Aboutbox:
BEA2 4
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:
BEA2 5
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:
BEA2 6

Ö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:
BEA2 7
Jetzt klicken Sie auf online und die MSDN-Hilfe zeigt die Erklärung (allerdings in englisch):
BEA2 8
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.