Inhalt von Editfeld auslesen und Variabele speichern

cTyp

Grünschnabel
Hi,

ich habe vor einiger Zeit angefangen C zuprogrammieren jetzt ,allerdings stelle ich mich langsam auf Winapi um ,damit ich von diesen schwarzen Dos / cmd Fenster wegkomme.
Nun bin ich soweit gekommen ,dass ich es schaffe Fenster mit Buttons und Editfelder
(ich hoffe ich bezeichne mit diesen Begriff den richtigen Bestandtei(ich meine dies Felder wie sie auch der editor nutzt usw. da wo man was reinschreiben kann ))zuerstellen.

Aber ich schaffe es nicht, die Eingabe die man in das Feld tätigen soll, in eine Variabele oder string zuspeichern.

Ich habe auch schon gegooglet, aber ich bin nur auf Funktion namens "text ->" gekommen.


Könnte mir deshalb jemand einen (simplen) Befehl nennen,und noch eine kleine Syntax, damit man Editfelder auslesen kann ?

Schon mal Danke im vorraus
 
Ich habe auch schon gegooglet, aber ich bin nur auf Funktion namens "text ->" gekommen.
Beschäftig dich bitte nochmal mit den Grundlagen der Objektorientierung.
Konkret: Klassen, Objekte und Pointer.
"text" dürfte hier im Kontext ein Pointer auf ein Objekt der Klasse CEdit (oder vergleichbares) sein.

Im Klartext hast du irgendwo sowas oder sowas ähnliches stehn:
Code:
CEdit *text = new CEdit();

Anyways, falls text eine Membervariable für dein Feld ist bzw. Deinem Feld korrekt zugeordnet ist kannst du bspw. auf die Funktion
"GetWindowText()" zurückgreifen.
(bin mir grad nicht sicher ob das MS standard ist oder ob wir die Funktion einfach kreiiert haben)

Dies würde dann bspw folgendermaßen aussehen:


Code:
CString strTmp; 
text->GetWindowText(strTmp);

strTmp sollte nun den Inhalt deines Feldes halten.
/e: Kurz angeschaut, die Methode "GetWindowTextA(CString &str)" existiert, damit sollte obiger Aufruf funktionieren.
Und noch ne Anmerkung: Falls "text" nicht als Pointer deklariert ist (also bspw als "CEdit text;" ), sollte es text.GetWindowText(strTmp); tun.
Wie gesagt lies unbedingt(!!) Nochmal Grundlagen zum Thema Objekte, Klassen, etc.in C++.

/e: Relevanz verloren:
Sollte dieser aufruf so nicht möglich sein halt dich an:
Code:
Syntax

 int GetWindowText(      
    HWND hWnd,
    LPTSTR lpString,
    int nMaxCount
);
Parameters

hWnd
[in] Handle to the window or control containing the text.
lpString
[out] Pointer to the buffer that will receive the text. If the string is as long or longer than the buffer, the string is truncated and terminated with a NULL character.
nMaxCount
[in] Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated.
 
Zuletzt bearbeitet:

cTyp

Grünschnabel
Ok,vielen Dank erst mal .

Aber das war nicht ganz das was ich gesucht habe,oder vlt. mache ich einen Fehler,denn wenn ich GetWindowsText benutze holte er immer den Namen des Fensters in dem das Editfeld ist und nicht den Inhalt bzw. meine Eingabe :confused:


PS:Die Objektorientirung werde ich mir nochmal ankucken :D
 
Uhm hast du das ding als Control oder als simple Membervariable angelegt? (Ich glaub da hab ich vorher etwas doof erklärt.)
Wenn du den Titel des Dings kriegst biste schon aufm richtigen Dampfer.

CWnd::GetWindowText()
schau hier mal drüber, achte auf "Remarks" ;)

Sollte dann gehn.
 

cTyp

Grünschnabel
Cwnd:: mag mein compliere nicht besonders, was daran liegen kann, dass ich es werde als memberfunktion noch als Contorl definiert habe

wie gesagt ich bin ein Anfänger in Winapi und als ich zumersten mal Win32-projekt gestartet habe...hat mir mein Compliere keine Klassen und so aufgemacht,
sondern hat im header nur die IDC vom fenster definiert und eine RC-datei erstellt wo man das noch weiter verfeinern konnte ... also habe ich daran weiter geknüpft ...


Code von resurce.h
#include <windows.h>


#define DLG_MAIN 101
#define IDC_BTN_OK 102
#define IDC_EDT 1001

Code von resource.rc
#include "resource.h"

DLG_MAIN DIALOGEX 6, 5, 150, 106

CAPTION "Identifizierung"

FONT 8, "MS Sans Serif", 0, 0, 1

STYLE 0x10CE0804

BEGIN


CONTROL "&Bestätigen", IDC_BTN_OK, "Button", 0x10010000, 60, 70, 46, 15

EDITTEXT IDC_EDT,10,30,130,15,NOT 0x100100000


END

aber in meinen DialogProc() habe ich das Fentser und die anderen Teile nicht mit WM_Create() erstellt, sondern einfach die Header und die Rc-datei includehiert und noch die WM_Close usw. definiert ...
 
Zuletzt bearbeitet: