Hilfe zu C++

Trenox

Cadet 2nd Year
Registriert
Aug. 2006
Beiträge
17
Hallo@all,

ich bin ein Programm in C++ mit VisualC++ am schreiben und habe folgendes Problem:

ich möchte einen Wert aus einem Eingabefeld einlesen, in ein anderes (schreibgeschütztes) Eingabefeld reinschreiben, und gleichzeitig den Wert an eine double Variable senden, damit ich damit weiterrechen kann. Als Eingabe soll nur Zahlen Fließkommazahlen erlaubt sein.


Ich hoffe mir kann jemand weiterhelfen
und vielen Dank im Vorraus
 
ups sorry...wollte das Thema nicht 2mal aufmachen...
 
Wert aus dem Eingabefeld lesen:
Code:
GetWindowText()

Wert in das Feld schreiben:
Code:
SetWindowText()

Konvertierung:
Code:
strtod()

Wenn Du die Eingabe einschränken willst, gibt es verschiedene Ansätze mit jeweils unterschiedlichen Aufwand.

Soll die Eingabe schon gar nicht möglich sein, kannst Du z.B. die CEdit Klasse überladen und die Texteingabe direkt abprüfen.

Soll die Eingabe möglich sein, aber nur die Werte nicht übernommen werden, so reicht es einfach den String vom GetWindowText() zu parsen und für gültig oder ungültig zu erklären.

MfG

Arnd
 
danke für die schnelle Antwort :)

aber so ganz habe ich das noch nicht hinbekommen...(habe noch nicht die Erfahrung, da ich erst vor kurzem angefangen habe mit C++)

hier sind die Bezeichner von meinen Feldern:

Eingabefeld: IDC_eingabe
Die Variable zu diesem Feld: m_eingabe (als welchen Datentyp muss ich diese Variable definieren??? als char?)

Ausgabefeld:IDC_ausgabe
Die Variable dazu: m_ausgabe (hier die gleiche Frage)

könntest du mir vielleicht damit ein Beispieltext schreiben???
vielen vielen Danke :)

Trenox
 
Also in Java lautet es so:

Code:
private JTextField jName;

public String gibName() {
          return jName.getText();
}

public void setzeName(String theNachname) {
          this.jName.setText(theNachname);
}

Erstere Methode natürlich zum Auslesen, letztere zum Einlesen.

Müsste mit den C++ Methoden denk ich genauso laufen.
 
hm...es funktioniert einfach nicht....

HILFE!!!
 
Code:
char lBuffer[100];

memset( lBuffer, 0, sizeof lBuffer );
GetWindowtext( GetDlgItem( m_hWnd, IDC_EINGABE ), lBuffer, sizeof lBuffer);
SetWindowtext( GetDlgItem( m_hWnd, IDC_AUSGABE ), lBuffer );

Das bedingt natürlich das Du dich in dem Fenster befindest, also z.B. in der Callbackmethode eines Buttons. Sonst ist das m_hWnd des Fensters auch nicht vorhanden.

Einfacher ist es wenn Du mit dem Classwizard den Feldern Variablen zuordnest. Dann könnte das so aussehen:

Code:
CString lText;

mEingabe.GetWindowtext(lText);
mAusgabe.SetWindowtext(lText );
 
Zuletzt bearbeitet:
Arnd schrieb:
Code:
CString lText;

mEingabe.GetWindowtext(lText);
mAusgabe.SetWindowtext(lText );

bei diesem Code kommt immer die Fehlermeldung:

error C2228: Der linke Teil von '.GetWindowtext' muss eine Klasse/Struktur/Union sein

als welchen Datentyp muss ich die Variablen definieren???
 
Unter VC++ 6.0 kommst Du mit Ctrl+W in den Classwizard. Dort kannst Du den Identifiern für die Texteingabefelder Variablen zuordnen. Bei meinem Beispiel sollten diese vom Typ CWnd oder Control sein. Dann funktioniert der Code.

Ohne das sind die Variablen mEingabe und mAusgabe natürlich nicht bekannt.

Einfach die Variablen zu definieren reicht nicht. Der Classwizard macht noch mehr um das Mapping umzusetzen.

Welche VC++ Version benutzt Du denn?

MfG

Arnd
 
ich benutzt Version 6.0

aber deutsche Version...deshalb habe ich das Wort "Classwizard" erst nicht verstanden...

also ich definiere zu den Beiden Eingabefeldern die Variablen als Control?

und was muss ich dort noch definieren???

vielen Dank für deine Hilfe :)
 
Wenn Du den Classwizard benutzt nichts mehr. Damit sollte der Code dann gehen.

Alternativ kannst Du die Felder auch als CString anlegen. Dann kannst den Variablen direkt Werte zuweisen oder sie eben auch auslesen. Dann musst Du aber mit UpdataData() arbeiten. Die Anwendung dazu steht auch in der Online Hilfe.

MfG

Arnd
 
Hallo nochmal,

es funktioniert immer noch nicht :'( ich habe eine neue Arbeit erstellt, dort 2 Eingabefelder plaziert und diese "IDC_eingabe" und "IDC_ausgabe" benannt. Dann habe ich diesen beiden Feldern jeweils eine Variable mit dem Datentyp "CEdit" aus der Kategorie "Control" definiert (m_eingabe und m_ausgabe). In die Routine des OK Buttons habe ich folgenden Quelltext erstellt:

Code:
void CAuslesenDlg::OnOK() 
{
	// TODO: Zusätzliche Prüfung hier einfügen
	
	CString lText;

m_eingabe.GetWindowtext(lText);
m_ausgabe.SetWindowtext(lText);

	CDialog::OnOK();

}

bei dem Versuch das Programm zu compilieren, wird mir diese Fehlermeldung angezeigt:


error C2039: 'GetWindowtext' : Ist kein Element von 'CEdit'
error C2039: 'SetWindowtext' : Ist kein Element von 'CEdit'


Ich habe keine Ahnung wie ich da weiterkommen soll...
 
Probier es mal mit einem grossen T -> GetWindowText().

Ausserdem wirkt ein Blick in die Online Hilfe wahre Wunder. Da sind alle Methoden beschrieben.

Das CDialog::OnOK() den Dialog schliesst ist Absicht? Weil allzuviel sehen wirst Du mit dem Code nicht, wenn die Editfelder in CAuslesenDlg enthalten sind.

Ich habe das nur aus dem Gedächtnis runtergeschrieben. Da können Schreibfehler schon mal vorkommen :-).

MfG

Arnd
 
Ja DANKE :) :)

das "T" wars...

vielen vielen DANKE für deine Bemühungen

Trenox
 
Zurück
Oben