PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Winapi - Textfeld



Freeway Cola
16.07.2010, 11:26
Moin,

wie kann ich den Wert eines Textfeldes nach dem bestätigen mit einem Button in der Callbackfunktion einsehen/weiterverwenden?

EBFE
16.07.2010, 11:41
GetDlgItemText GetDlgItemText Function (Windows) (http://msdn.microsoft.com/en-us/library/ms645489%28VS.85%29.aspx)
GetDlgItemInt GetDlgItemInt Function (Windows) (http://msdn.microsoft.com/en-us/library/ms645485%28v=VS.85%29.aspx)
SendMessage mit WM_GETTEXT
SendMessage mit EM_GETSELTEXT (je nach Bedarf - z.B für makrierten Text)
GetWindowText GetWindowText Function (Windows) (http://msdn.microsoft.com/en-us/library/ms633520%28VS.85%29.aspx)

Freeway Cola
16.07.2010, 12:42
danke, habs mir angeguckt, aber nicht ganz verstanden, wie ich jetzt den Wert in einen Char array bekomme...

EBFE
16.07.2010, 13:01
Kommt darauf an, wie du nun deine GUI erstellst ("manuell" mit CreateWindow oder über Ressourcen/DlgBox)
ein Bsp:
C/C++ Forum :: GetWindowText (http://www.c-plusplus.de/forum/viewtopic-var-t-is-215461-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is--and-printview-is-1-and-start-is-0.html)
sonst solltest du schon die wesentlichen Codeteile posten (idealerweise compilierbaren Code)

Freeway Cola
16.07.2010, 13:11
ok, hier mal meine Callbackfunktion:


LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
char buf[256];
switch (message){
case WM_COMMAND:
if (HIWORD(wParam) == BN_CLICKED){
if (LOWORD(wParam) == 1){
MessageBox ( NULL, "Der Befehl wurde gesendet...", "Gesendet", MB_OK);
rc=send(connectedSocket,buf,sizeof(buf),0);
}
}
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}

Also ich habe wie man oben sieht einen Char array (buf) will, dass er den Wert des Textfeldes bekommt (was man im nächsten Spoiler sehen kann). Wenn ich buf manuell im Code einen Wert zuweise funktioniert das ganze, jetzt müsste ich einfach nur in buf den Inhalt des Textfeldes geben und dann dürfte das funktionieren.

Hier mal den Button und das Textfeld über CreateWindow()


CreateWindow("BUTTON","Senden", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 80,40 ,120,35,hwnd, (HMENU) 1, wincl.hInstance, NULL);
CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE, 50, 10, 180, 25, hwnd, (HMENU) 2, GetModuleHandle(NULL), NULL);

ShowWindow (hwnd, nCmdShow);

AlterHacker
16.07.2010, 13:32
UINT WINAPI GetDlgItemText(
__in HWND hDlg,
__in int nIDDlgItem,
__out LPTSTR lpString,
__in int nMaxCount
);

Also versuchs mal so:

GetDlgItemText ( hwnd, ***TEXTFELD-ID***, &buf, 255 );
buf[255] = 0;
//Ich glaub die ID ist in deinem Fall 2, bin mir aber nicht ganz sicher.
MfG

----------
EDIT:
Natürlich hat BlackBerry recht. Falsche funktion --.--' Ansonsten sollten die letzten beiden Parameter aber gleich bleiben.

blackberry
16.07.2010, 13:38
GetWindowText Function (Windows) (http://msdn.microsoft.com/en-us/library/ms633520%28VS.85%29.aspx)

Freeway Cola
16.07.2010, 13:58
danke, funktioniert