Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung | Blog RSS

Assistenten in Microsoft Visual C++

"Assistent" im englischen Original: "Wizard" Beispiel: Per Anwendungsassistent Quellcode für neues Programm erzeugen, Menü(eintrag) hinzufügen, Klassen-Assistent für das Menü aufrufen, Nachricht COMMAND auswählen, zu View-Klasse "Funktion hinzufügen", dann "Code bearbeiten" klicken, z.B. Code für MessageBox eintippen.

Beachte, welche Teile z.B. der Message Maps automatisch verwaltet werden (AFX-Kommentare) und welche man per Hand ändern kann bzw. muss. Beispiel: ID_FILE_OPEN für automatisch erzeugtes Applikations-Objekt.

Eigene Icons für Anwendung und Dateien malen.

Document/View-Architektur

Siehe vom Anwendungsassistenten erzeugte Programme: MFC unterstützt die Arbeitsteilung zwischen Dokumenten (erben von CDocument) und Ansichten (erben von CView). Erinnert an Model-View-Controller, nur wird der Controller halb dem Model und halb dem View zugeschlagen. CWinApp erfährt mit AddDocTemplate, welche Document-/View-Klassen benutzt werden sollen.

CDocument hat Speicher-Funktionalität eingebaut; man muss nur Serialisierung schreiben. An Dokument können Views angehängt werden. CView hat auch Druck-Funktionalität. Wichtige, aber nicht einzige Spezialisierung: CScrollView kann automatisch scrollen

Modale und nichtmodale Dialoge grafisch entwickeln

Einfügen/Ressource/Dialog. Grafisch zusammenklicken. Bei Radio-Buttons den ersten auf "Group" stellen! Layout-Menü: Ausrichen, Tabulator-Reihenfolge.

Klassen-Assistent aufrufen: Bietet an, neue Klasse für Dialog zu erstellen. Ja! Gehe im Klassen-Assistent auf Karteikarte mit Member-Variablen. Zwischen denen und den Steuerelementen tauscht die Klasse nun automatisch die Werte aus ("DDX" = Dialog Data Exchange). Stelle Variable für Texteingabefeld auf Zahlentyp; dann automatisch überprüfte Grenzen angebbar ("DDV" = Dialog Data Validation).

Für komplexere Dialoge wichtig, bei denen mehrere Knöpfe per eigener Message Map des Dialogfelds interagieren: Die CDialog-Methode UpdateData(TRUE) holt Daten aus den grafischen Steuerelementen in die Member-Variablen, UpdateData(FALSE) passt umgekehrt die Darstellung an die Werte der Member-Variablen an und prüft vorher die Grenzen.

Rufe Dialog modal per Menü-Kommando aus per Assistent erzeugtem Programm auf (Klassen-Assistent!):

#include "MeinDialog.h"

void CTestView::OnZeigeDialog()
{
    MeinDialog d;
    d.m_... = ...; // interne Variablen setzen
    d.DoModal();
    ... = d.m_...; // interne Variablen auslesen
}

Dialog nichtmodal aufrufen:

dialog = new MeinDialog;
dialog->Create(IDD_DIALOG1, this);
dialog->ShowWindow(SW_RESTORE);

Dann muss OnOK des Dialogs geändert werden. Vor allem wird "OK" zu "Anwenden" o.ä.:

void MeinDialog::OnOK()
{
    // Tu was.

    // Aufruf der Mutterklasse auskommentieren, sonst nach OK geschlossen:
    // CDialog::OnOK();
}