OnUpdate"
(da wir noch keine bestehende Methode haben).
Wir werden in den Codeeditor gesprungen und sehen eine neue Methode vor uns.
Folgende Codezeile wird eingefügt:
((CEdit *) this->GetDlgItem (IDC_EDIT_TEXT))->SetWindowText ( this->GetDocument ()->GetText());
Schritt 4: Dialog zufügen
Wir erzeugen eine Dialogklasse zum Eingeben eines Strings. Dazu z.B. im Contextmenü des "Solution Explorer"
die Option "Add" -> "Add Class..." wählen. In dem Dialog wird in der Kategorie "MFC" die Option
"MFC Class" gewählt.
Im nächsten Dialog folgende Einstellungen vornehmen:
Hier: wir geben einen Namen an und ändern die Basisklasse auf CDialog. Der Assistent schlägt automatisch
einen Namen für die Dialogfeld-Resource vor.
Wir plazieren ein Edit Control namens IDC_EDIT_TEXT im Dialog ein.
Dieses verknüpfen wir mit einer Membervariable, deren Wert automatisch von der MFC ins Textfeld
geschrieben wird. Hierzu Rechtsklick auf das Edit Control, im Contextmenü "Add Variable" wählen.
In dem erscheinenden Assistenten gibt man links einen Variablen-Namen ein. Im rechten Teil
können wir wählen, mit welchem Control dieser Wert verknüpft werden soll. Da wir vom Textfeld
kommen, ist IDC_EDIT_TEXT bereits gewählt. Unter "Category" müssen wir allerdings noch von
"Control" auf "Value" umschalten, da ansonsten nur eine Membervariable vom Typ "CEditControl"
angelegt würde. Durch Ändern der "Category" wird links automatisch der "Variable Type" geändert.
Aus Faulheit belassen wir die Variable auf "public".
Schritt 5: Dialog anzeigen
Auf der FormView einen Button "Edit" mit dem Namen IDC_BUTTON_EDIT plazieren. Einen
Handler für das Klick-Event zufügen. Hierzu gibt es verschiedene Möglichkeiten:
a) Rechtsklick auf den Button, "Add Event Handler...". Es erscheint folgender Dialog:
b) In den Properties auf den Button "Events" gehen und bei "BN_CLICKED" einen Handler zufügen.
In der so erzeugten Methode "OnBnClickedButtonEdit" folgendes einfügen:
MFCBasicsDialog* dialog = new MFCBasicsDialog(this);
dialog->m_Text = this->GetDocument()->GetText();
if (dialog->DoModal () == IDOK)
{
this->GetDocument()->SetText ( dialog->m_Text);
//Beim UpdateAllViews NULL übergeben, damit auch
//unser Fenster sein Update bekommt.
this->GetDocument()->UpdateAllViews (NULL);
}
//Speicher wieder freigeben.
delete dialog;
Natürlich muss vorher noch der Header des Dialogs eingebunden werden.
#include "MFCBasicsDialog.h"
Serialisierung
Hierzu die Methode "Serialize" unserer Document-Klasse so modifizieren:
void CMFCBasicsDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: Hier Code zum Speichern einfügen
ar << this->m_Text;
}
else
{
// TODO: Hier Code zum Laden einfügen
ar >> this->m_Text;
}
}
Fertisch !
Anmerkungen
Wenn man das Beispiel nicht mehr benötigt, sollte man die Registry ausmisten.
Welche Keys vom Programm erzeugt werden kann man in der Datei "MFCBasics.reg"
ablesen, die im Anwendungsverzeichnis liegt. Diese alle löschen !
Version 1.0.0.1, Stand 04.04.2005
Historie:
1.0.0.1 (04.04.2005): "delete dialog" in OnBnClickedButtonEdit eingefügt.