WinAPI: Edit Felder

hallo,
ich hab mal zwei fragen zu Edit Feldern:

1. Wie kann man abfragen ob Enter gedrückt wurde wenn das Feld den Fokus hat? WM_KEYDOWN geht dann ja nicht.

2. Wie kann man in einen string einen Zeilenvorschub einfügen. Also in der Konsole würde man ja einfach ein \n rein machen. das geht aber im edit feld irgendwie nich.


ich programmiere direkt mit der Winapi (kein mfc oder so). programmiersprache: c++

danke für eure hilfe,
nidda
 
. Wie kann man abfragen ob Enter gedrückt wurde wenn das Feld den Fokus hat? WM_KEYDOWN geht dann ja nicht.
Hm, je nach dem eignet sich Subclassing dafür ganz gut - einfach mal danach googeln (hab zwar Beispiele, aber die sind in falscher Sprache ;) ).
Oder Du legst bei den Editeigenschaften schon fest, dass Enter möglich ist (VC++ : Eigenschaften des Edits, "Return" möglich bzw. wenn Du Ressourcen "per Hand" erstellst:ES_WANTRETURN
EDITTEXT ID_EINGABE_EDIT,57,13,100+70,12,ES_WANTRETURN


2. Wie kann man in einen string einen Zeilenvorschub einfügen. Also in der Konsole würde man ja einfach ein \n rein machen. das geht aber im edit feld irgendwie nich.
genauso wie in der Konsole, bloß musst Du Mehrzeilen erlauben ;) (entweder im Ressourceneditor die Eigenschaft "Mehrzeilen" aktivieren oder eben ES_MULTILINE schreiben:
EDITTEXT ID_EINGABE_EDIT,57,13,100+70,12,ES_MULTILINE )
 
mh irgendwie klappt das noch nich so ganz (oder ich bin zu dumm ;))

also das editfeld indem ich abfragen will ob enter gedrück wurde is so erstellt:
Code:
hwnded = CreateWindow("edit", NULL, WS_CHILD | WS_VISIBLE | ES_LEFT | WS_MULTILINE |WS_BORDER | ES_AUTOVSCROLL | WS_VSCROLL | ES_WANTRETURN,
				5,  // X-Koordinate
				300,// Y-Koordinate
				450,// Breite
				50, // Höhe
				hwnd,(HMENU) ed1, ((LPCREATESTRUCT) lParam)->hInstance, NULL);

ES_WANTRETURN ist jetzt drin, aber welche message muss ich jetzt genau abfragen?


und in dem anderen feld ist auch WS_MULTILINE gesetzt aber wenn ich dem feld eine message schicke z.b. so einen string:
"Hallo\nwie gehts?"
dann wird da wo das '\n' ist einfach ein | gedruckt.
 
Ok. jetzt wissen wir schon mal, was Du willst ;)

ES_WANTRETURN Specifies that a carriage return be inserted when the user presses the ENTER key while entering text into a multiple-line edit control in a dialog box. Without this style, pressing the ENTER key has the same effect as pressing the dialog box?s default pushbutton. This style has no effect on a single-line edit control.
Wenns also expliziet die Abfrage der ENTER-Taste für irgendwas programmtechnisches gebraucht wird -> Subclassing. Hier wird Dir ein erfahrener C++, der bald vorbeikommt, sicherlich helfen können .

Außerdem hab ich bloß ES_MULTILINE bei mir in der Doku stehen ;) - allerdings denke ich mal dass Dein Compiler sich dann beschwert hätte.

genauso wie in der Konsole, bloß musst Du Mehrzeilen erlauben
war eine Fehlinformation, sorry ;) versuchs mit "\r\n". Das dürfte dann funktionieren (ich verwende auch immer CRLF bzw ASCII 13,10, hab bloß fälschlicherweise gedacht, dass \n dasselbe wäre)
 
ja danke,
das mit "\r\n" funktioniert!

das mit dem "dialog box?s default pushbutton" würde mir wahrscheinlich auch schon helfen. wie kann ich den einen button als default definieren?
 
das mit dem "dialog box?s default pushbutton" würde mir wahrscheinlich auch schon helfen. wie kann ich den einen button als default definieren?
In der RessourceDatei: DEFPUSHBUTTON
So wie Du es machst: BS_DEFPUSHBUTTON
Code:
CreateWindow("button", "7", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 1, 2,3, 4, hwnd usw.
 
Zurück
Oben