Frage zu Editfeld??
-
Hallo,
wenn ich mit dem Ressourcen-Editor ein Editfeld plaziert habe, möchte ich diesem eine Membervariable zuweisen. Dies geschieht über den Assistenten nun kann ich wählen was für ein Typ diese Variable sein soll. Zur Auswahl stehen Control und Value.
Was ist der Unterschied zwischen diesen Variablen?
-
"Control" ist ein CEdit-Objekt (je nach Art des ausgewählten Dialogelements), das du über dessen Methoden beeinflussen kannst. Das schließt das Aussehen, Fensterstile und ähnliches mit ein.
"Wert" ist ein einfacher int- oder CString-Wert, der den Inhalt des Editfeldes zugewiesen bekommt (genauer: Das Feld und die Variable existieren nebeneinander, mit UpdateData() werden ihre Werte miteinander synchronisiert).
-
Okay.
Dem Editfeld weise ich also ein "Control" in der Ansichtsklasse zu, und eine weitere Membervariable um den Inhalt des Feldes zu speichern in der Dokumentklasse.
Oder?
-
Je nach Anwendung reicht normalerweise eins von beidem aus - wenn du nichts am Aussehen und den Eigenschaften des Editfeldes ändern willst, brauchst du die Control-Variable nicht *, andernfalls kannst du auch über die CEdit-Funktionen den Inhalt auslesen/ändern (und das mitunter viel differenzierter als über UpdateData()).
-
Nun ich muss schon einiges änder am Editfeld( Position, Farbe, Fonts).
Das Ein- und Auslesen der Werte wollte ich auch nicht über UpDateData machen.Zum Einlesen wollte ich das so machen
OnKillfocusXXX() { char szText [255] = ""; m_Editfeld.GetLine(0, szText, 255); CXXXDoc* pDoc; pDoc->SetXXX(szText); }Zum Auslesen mit
m_Editfeld.SetWindowText(pDoc->GetXXX());Da brauch ich ja kein UpdateData, vor allem nicht da die Software zur Parametrierung von Feldgeraten verwendet wird, aus denen die Werte ausgelesen werden.
Funktioniert der Zugrif auf pDoc so?
-
Prinzipiell ja, allerdings würde ich die Verwendung von nackten char-Zeigern und -Arrays lieber vermeiden und CString's stattdessen verwenden:
OnKillfocusXXX() { CString text; int i=m_Editfeld.LineLength(0)+1;//die 1 steht für das abschließende \0 m_Editfeld.GetLine(0, text.GetBuffer(i), i); text.ReleaseBuffer(); //Für Single-Line-Edit könntest du stattdessen auch GetWindowText() verwenden CXXXDoc* pDoc = GetDocument(); pDoc->SetXXX(text); }
-
Ja so sieht das richtig gut aus.
Danke!!