Visual Studio .NET MFC Dialogbasierend
-
Hallo Leute!
Es ist mein erster Beitrag. Hoffentlich nicht der letzte

Also, ich bin ein Anfänger. Ich habe ein neues MFC Projekt dialogbasierend erstellt. Auf dem Dialog habe ich eine Simple Edit Box platziert. Nun will ich da einen Text ausgeben, z.B. "Hello World!".
So, ich bin hingegangen und eine Control Variable "Message Control" und eine Value Variable "Message" erstellt. Dann in der Init-Funktion folgenden Code geschrieben:
// TODO: Add extra initialization here char *str = "Hallo!"; Message = str; MessageControl.UpdateData(TRUE);Aber irgendwie klappt die ausgabe nicht. Ich habe es auch zuerst direkt probiert:
// TODO: Add extra initialization here Message = "Hallo!"; MessageControl.UpdateData(TRUE);Aber keine Ausgabe. Warum??? Was mache ich da falsch?
Vielen Dank, labviewer
-
Du hast eine "Control-Variable" und eine "String-Variable" erstellt!?
Das macht man normalerweise nicht... sondern entweder oder...Wenn Du eine "Control-Variable" hast, dann verwende:
ctrlVar.SetWindowText(_T("Hello world"));Und bei "String-Variable":
stringVar = _T("Hello World"); UpdateData(FALSE);
-
Jochen Kalmbach schrieb:
Wenn Du eine "Control-Variable" hast, dann verwende:
ctrlVar.SetWindowText(_T("Hello world"));das klappt jedenfalls immer...
-
Vielen Dank. Funktioniert. Nur noch eine Frage:
Warum UpdateData(FALSE); ??? Ich habe gedacht nach dem zuweisen muss der Control einmal updatet werden.
Und woher weiß das Programm was er updaten soll? UpdateData ist irgendwie allgemein für alles und ich wollte nur die Daten in dem Control updaten.
Sorry für so blöde Anfängerfragen, aber errinnert euch wie ihr wart

Danke
-
labviewer schrieb:
Warum UpdateData(FALSE); ??? Ich habe gedacht nach dem zuweisen muss der Control einmal updatet werden.
Ja, eben drum...
FALSE => Variable zum Control
TRUE => Control in die Variable
http://msdn2.microsoft.com/t9fb9hwwlabviewer schrieb:
Und woher weiß das Programm was er updaten soll? UpdateData ist irgendwie allgemein für alles und ich wollte nur die Daten in dem Control updaten.
Es wird alles Upgedated, was eine "Value-Variable" hat... (aus diesem Grund mag ich das "UpdateData" nicht so besonders; für spezielfälle macht es aber sinn).
-
Jochen Kalmbach schrieb:
FALSE => Variable zum Control
TRUE => Control in die Variable
http://msdn2.microsoft.com/t9fb9hwwdas ist z.b. ein grund, warum ich das selten verwendet hab'. und wenn dann nur mit #defines wie:
#define UPDATE_CONTROLS FALSE #define UPDATE_VARIABLES TRUE
-
Danke für euere Antworten.
Wenn wir schon beim Thema sind. Kann man das Front Panel automatisch aktualisieren lassen, oder muss ich einen Thread dafür machen in dem UpdateData(FALSE); steht?
Gruss
Übrigens ich komme aus G-Welt. Also grafische Programmierung
-
labviewer schrieb:
Wenn wir schon beim Thema sind. Kann man das Front Panel automatisch aktualisieren lassen, oder muss ich einen Thread dafür machen in dem UpdateData(FALSE); steht?
Ein Thread!???? Das ist hoffentlich nicht Dein Ernst. Aus einem anderen Thread darf man nicht auf UI-Elemente eines anderen Threads zugreifen!
Wenn Du was aktualisieren willst, dann muss dies ja einen Grund haben. Wenn der Grund nicht in einem direkten Methodenaufruf liegt, dann musst Du dem Dialog eine Message schicken (WM_APP+x).
-
Der Grund ist ja da. Ich will immer die aktuellen Daten im Fenster haben. Das mit dem Thread ist wahrscheinlich übertrieben, aber eine Funktion die mir nach jeder Zuweisung Variable->Control das Fenster automatisch updatet wäre wahrscheinlich passend. Oder wie macht ihr das normalerweise.
In Labview muss man nicht extra dagen, so jetzt musst du das Fenster aktualisieren, damit ich die aktuellen Daten angezeigt bekomme. Labview macht es irgendwie automatisch.Gruss