VS2005 PROF: MFC-Anwendung
-
Hallo erstmal,
ich bin noch Anfänger in der MFC-Programmierung und würde mich sehr freuen, wenn ihr mir bei meinem ersten MFC-Anwendung hilft.
Ich möchte eine einfach MFC-Anwendung erstellen, womit ich Hex-codierte Daten über RS232 zu einem Gerät senden und empfangen kann.
Dafür habe ich bereits eine Serial- (vom I-Net) und eine Conversion-Klasse.Mein Frage:
Wie kann ich die 3 Steuerelemente:
- das Eingabe-Fled für die Daten, die zum Gerät geschickt werden,
- der Sende-Button zum Sende vom Daten im Eingabe-Feld,
- und das Ausgabe-Fenster für die Antwort vom Gerät
einbinden?Für euere Hilfe wäre ich euch sehr dankbar.
Gruß, ToDo
-
Zwei CEdits und ein CButton?! Ich glaube du must mal etwas konkreter beschreiben was dein Problem ist.
Kleiner Tip vieleicht: Erstelle mal ein Dialogfeldbasierendes Projekt und schau dir mal den Dialog im Resourceneditor an. Dort gibts Edits, Buttons usw..
-
vs hat doch so'nen codegenerator. damit erzeugste erstmal 'ne dialogfeldbasierte anwendung und fügst zwei edit-controls und einen button ein. für die edit-controls lässte zwei class members (typ CEdit) mit dem codegenerator erzeugen und für den button eine behandlungfunktion (OnClick). beim click auf den button verzweigt das programm in die 'OnClick' funktion, in der du aus dem einen edit-control den text holen kannst (GetWindowText) und den kannste dann zur seriellen schicken (eventuell umwandeln von hexzahlen in bytes). für den empfang kannste entweder einen timer nehmen (OnTimer-funktion erzeugen, auch mit dem codegenerator und in OnInitDialog den timer starten (SetTimer)) oder du machst dafür einen separaten thread. die empfangenen daten kannste dann (in hex umwandeln und) an das andere edit-control schicken (SetWindowText).
oder du nimmst schon was fertiges (ist aber nicht MFC): http://download.microsoft.com/download/4/7/2/47291d3a-b5b5-4447-8182-4b72b505a603/4918.exe
-
Diese 3 Steuerelemente habe ich schon bereits eingefügt.
Dazu habe ich 2 Member-Variablen vom Typ BYTE (Kategorie VALUE) und eine Variable vom Typ CButton eingefügt, aber wie kann ich sie einbinden, damit ich Daten senden und empfangen kann?
-
Im VS2005 PRO gibt's keinen "ClassWizard" wie im VC++6.0?
OK, man kan die Member-Variablen oder Klassen direkt einfügen, aber wo finde ich die Nachrichtenzuordnungstabellen (Objekt-ID's, Nachrichten, Memberfunktionen....) wie im 6.0 ?
Zum Variablen-Typ für "EditControl" hätte ich noch eine Frage:
Der TYP vom Variablen-Member orientiert sich doch nach dem, was in diesem EditBox eingebe, nämlich BYTEs!! oder verstehe ich das falsch?
-
MFC-ToDo schrieb:
OK, man kan die Member-Variablen oder Klassen direkt einfügen, aber wo finde ich die Nachrichtenzuordnungstabellen (Objekt-ID's, Nachrichten, Memberfunktionen....) wie im 6.0 ?
rechter mausklick auf die klasse 'eigenschaften' und dann geht ein fenster auf mit meldungen, überschreibungen, ereignisse usw...
MFC-ToDo schrieb:
Zum Variablen-Typ für "EditControl" hätte ich noch eine Frage:
Der TYP vom Variablen-Member orientiert sich doch nach dem, was in diesem EditBox eingebe, nämlich BYTEs!! oder verstehe ich das falsch?mach's doch besser als 'control' und nicht als 'value', sonst musste mit dem blöden DDX rumfummeln. ich finde es mit controls einfacher...
-
Ok, ich mache's mit "control".
Wenn ich Daten vom Eingabe-Feld (EditBox) hole, kann ich das auch mit UpdateData(TRUE) machen? Was ist der Unterschied zw. dies und GetWindowText ?
Danke
-
Du kannst so (mit UpdateData()) direkt z.B. einen int beziehen und brauchst dich nicht um Stringumwandlungen kümmern.
-
MFC-ToDo schrieb:
Was ist der Unterschied zw. dies und GetWindowText ?
naja, für einige sachen wie z.b. radio buttons, checkboxen ist ddx vielleicht angenehmer aber für edit-controls ist es fummeliger weil man überall 'UpdateData' aufrufen muss wenn sich was verändert hat. aber das ist nur meine persönliche meinung... mit 'GetWindowText' und einer CString referenz finde ich's einfacher
-
Ich sag es immer wieder, die Mischung machts. Wenn man nur für eine Funktion einen Wert aus einem CEdit abfragen muss, so ist es sinnvoll mit GetWindowText zu arbeiten. Wenn man aber verschiedene Wert braucht dann wird es langsam sinnvoll UpdateData aufzurufen.
Desweitern wird UpdateData(FALSE) automatisch in CDialog::OnInitDialog aufgerufen. UpdateData(TRUE) wird automatisch in CDialog::OnOK aufgerufen. Wenn man also nur einen Dialog hat, welcher Daten abfragt und im Dialog selber diese nicht verarbeitet, dann kann man dies sehr gut ausnützen
Grüssli