PDA

Visualizza la versione completa : [C++] Ottenere valore di un controllo Edit


skjobax
08-01-2012, 18:01
Comincio col dire che ho esperienza 0 in C++ con GUI Win32 (quindi non visual c++) e utilizzo Code::blocks come IDE..
Se dico scemenze ditemelo...

Allora, ho visto su Internet questo codice:


case IDC_BTN_TEST:
// MessageBox(hwndDlg, "You clicked \"Test\" button!", "Information", MB_ICONINFORMATION);
char* szString;
GetDlgItemText(hwndDlg, IDC_EDIT1, szString, sizeof(char));
MessageBox(hwndDlg, szString, "Editbox content", MB_ICONINFORMATION);


Sia idc_btn_test che edit1 esistono nel resource.rc... comunque, quando provo ad eseguire l'applicazione, premendo su Test va in blocco (sia che il campo sia vuoto che scritto), facendo uscire il messaggio "L'applicazione Test C++ non risponde":


Process terminated with status -1073741819 (0 minutes, 13 seconds)


Qualche idea? :spy:

linoma
08-01-2012, 18:24
Se vuoi usare un'array dinamico dovresti prima avere la lunghezza del testo con WM_GETTEXTLENGTH (http://msdn.microsoft.com/en-us/library/windows/desktop/ms632628%28v=vs.85%29.aspx) e crearti l'array di char e poi prenderti il testo.
Nel tuo programma usi un puntatore nn inizializzato e crea problemi

skjobax
08-01-2012, 19:34
Ripeto che sono totalmente agli inizi e qualcosa potrebbe sfuggire...

Comunque grazie dell'aiuto, provvederò a modificare il codice e ti farò sapere

skjobax
08-01-2012, 19:55
:( Non riesco a capire come funziona!!
Nella pagina del MSDN che hai linkato c'è scritto che bisogna usare DefWindowProc con wparam e lparam settati a 0 ma non ho capito come...


// ????
char textln = DefWindowProc(hwndDlg, WM_GETTEXTLENGTH, 0, 0);

char szString[textln]; //???
GetDlgItemText(hwndDlg, IDC_EDIT1, szString, sizeof(char));
MessageBox(hwndDlg, szString, "Editbox content", MB_ICONINFORMATION);
return TRUE;


Se solo trovassi una buona guida... :facepalm:

linoma
08-01-2012, 20:35
int len;
char *string;

len = SendDlgItemMessage(hwndDlg,IDC_EDIT,WM_GETTEXTLENG TH,0,0);
string = new char[len+1]
GetDlgItemText(hwndDlg,IDC_IEDT1,string,len);


grosso modo il tuo codice dovrebbe essere questo.

skjobax
08-01-2012, 21:42
Grazie, funziona benissimo :D

Loading