Dialoge dynamisch erzeugen mit MFC

schwudden

Grünschnabel
Hallo,

ich bin gerade dabei ein Tool zu Programmieren, das so wie der Windows Explorer aufgebaut ist. Links ein Baum und rechts werden dann Dialoge je nach Baumauswahl angezeigt.
Die Dialoge in der rechten Seite sollen zur Aufname von Daten dienen. Wie diese Daten heißen, ist im Moment noch nicht bekannt, weshalb ich die Texte aus einer Textdatei auslesen und dann den Textfeldern zuweisen möchte.

Die Dialoge sind mit Visual Studio erstellt worden und werden via RUNTIME_CLASS(CKlassenname) aufgerufen und dan nin der rechten Fensterseite dargestellt.

Im Konstruktor dieses Dialoges lese ich dann die Strings aus der Textdatei und weise Sie entsprechenden Variablen zu.
Bei UpdateData(false) bekomme ich eine Assert Fehlermeldung von Compiler.

Kann mir jemand sagen wieso ?

Wo werden die Textfelder etc, die in dem Dialog stehen überhaupt initialisiert ?
Wo finde ich den Code der für die Initialisierung sorgt ?

Hier noch der Konstruktor eines Dialoges.

CFarbwerk::CFarbwerk()
: CFormView(CFarbwerk::IDD)

, m_Winkel(0)
, m_Geschwindigkeit(0)
, m_Laenge(0)
, m_WinkelTextValue(_T(""))
, m_LaengeTextValue(_T(""))
, m_GeschwindigkeitTextValue(_T(""))
{
CStdioFile f;
CFileException e;

char* pFileName = "Feldnamen.txt";
if( !f.Open( pFileName, CFile::modeRead, &e ) ) {

afxDump << "File could not be opened " << e.m_cause << "\n";

}
CString str;

f.ReadString(str);

m_WinkelTextValue = str;

f.ReadString(str);

m_GeschwindigkeitTextValue = str;

f.ReadString(str);

m_LaengeTextValue = str;

UpdateData(false); // HIER KRACHT ES
}


Vielen Dank für Eure Hilfe.

Gruß, Heiko
 

Kachelator

Peter Jerz
Uh! Da hast Du ja echt ein paar heftige Fragen aufgeworfen.

ich bin gerade dabei ein Tool zu Programmieren, das so wie der Windows Explorer aufgebaut ist. Links ein Baum und rechts werden dann Dialoge je nach Baumauswahl angezeigt. Die Dialoge in der rechten Seite sollen zur Aufname von Daten dienen.
? Welche Dialoge? Ich würde erwarten, dass du eine SDI-Anwendung machst, mit vom Projekt-Wizard gesplitteten Fenster (Explorer-like oder so). Ist das nicht der Fall?

Wo werden die Textfelder etc, die in dem Dialog stehen überhaupt initialisiert ?
KA, aber du könntest sie in OnInitDialog() initialisieren.

BTW: Gib mal bei Google "newcomer updatedata" ein und lerne, warum UpdateData() böse ist! ;)

Oder klick hier drauf: http://users.stargate.net/~newcomer/updatedata.htm
 

basd

Erfahrenes Mitglied
des mit dem Update Data nicht zu verwenden finde ich nicht korrekt wie auch der kritiker gemeint hat, aber egal ! ;-)

Das Problem ist die Funktion UpdateData darfst du nicht im kostruktor verwenden , weil du ja nicht weißt ob die entsprechenden Sachen der GUI schon existieren.

Initialisierung muessen immer in OnInitDialog() erfolgen (wie es ja auch der Wizzard als Kommentar einträgt ;))

P.S.:
Das Board ist buggy , klickt man auf ein Smiley wird es immer ans ende des Textes nicht an die Cursor position gesetzt ;)