PDA

Visualizza la versione completa : [C++] Win API: ottenere il testo contenuto in un editTEXT


suomi_viking_86
11-07-2005, 15:00
ciao, sto provando a fare un programmino con GUI con le winAPI ma ho qualche problema....
ho creato un dialogo e l'ho inizializzato con la main (tralascio gli include delle librerie e dei file delle risorse)


int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALO GO),0,DlgProc,0);
return 0;}

poi ho la seguente funzione di gestione degli eventi.
penso il mio problema stia nell'avere l'handle dell'EDIT oppure nel cast dei parametri passati ai messaggi


BOOL CALLBACK DlgProc( HWND hwndDlg,
UINT Msg,
WPARAM wParam,
LPARAM lParam)
{
if (Msg==WM_CLOSE) //se cliccata la X in alto a sinistra chiude il prog,
{ EndDialog(hwndDlg, 0);
return TRUE; }
if (Msg==WM_COMMAND) //gestione del comando
{
WORD wNotifica = HIWORD(wParam); //prendo i
WORD wId = LOWORD(wParam); //parametri
if (wNotifica == STN_CLICKED && wId == IDC_BUTTON)
//se premuto il bottone di mio interesse //cambio il testo del bottone, leggo il
//testo e setto l'edit come readonly
{ HWND hStat = (HWND)lParam;
//handle del bottone
const char* pTesto;
char*buff;
pTesto = "Disconnetti";
//cambio il testo, tutto OK
SendMessage( hStat, WM_SETTEXT, 0, (LPARAM)pTesto);
//questo non funziona
HWND Text =GetDlgItem(hwndDlg, IDC_USERID);
//ottengo l'handle del testo
SendMessage(Text, EM_GETLINE, (WPARAM)0, (LPARAM)(LPCSTR)buff); //leggo il testo.... non va(ho //provato a inviare il testo
//ottenuto //con una socket ma non funziona
SendMessage(Text, EM_SETREADONLY, 0, TRUE);
//setto readonly
//ma non va
return TRUE;
}
}
return FALSE;
}

unomichisiada
12-07-2005, 09:39
Originariamente inviato da suomi_viking_86
ciao, sto provando a fare un programmino con GUI con le winAPI ma ho qualche problema....
ho creato un dialogo e l'ho inizializzato con la main (tralascio gli include delle librerie e dei file delle risorse)


int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALO GO),0,DlgProc,0);
return 0;}

poi ho la seguente funzione di gestione degli eventi.
penso il mio problema stia nell'avere l'handle dell'EDIT oppure nel cast dei parametri passati ai messaggi


BOOL CALLBACK DlgProc( HWND hwndDlg,
UINT Msg,
WPARAM wParam,
LPARAM lParam)
{
if (Msg==WM_CLOSE) //se cliccata la X in alto a sinistra chiude il prog,
{ EndDialog(hwndDlg, 0);
return TRUE; }
if (Msg==WM_COMMAND) //gestione del comando
{
WORD wNotifica = HIWORD(wParam); //prendo i
WORD wId = LOWORD(wParam); //parametri
if (wNotifica == STN_CLICKED && wId == IDC_BUTTON)
//se premuto il bottone di mio interesse //cambio il testo del bottone, leggo il
//testo e setto l'edit come readonly
{ HWND hStat = (HWND)lParam;
//handle del bottone
const char* pTesto;
char*buff;
pTesto = "Disconnetti";
//cambio il testo, tutto OK
SendMessage( hStat, WM_SETTEXT, 0, (LPARAM)pTesto);
//questo non funziona
HWND Text =GetDlgItem(hwndDlg, IDC_USERID);
//ottengo l'handle del testo
SendMessage(Text, EM_GETLINE, (WPARAM)0, (LPARAM)(LPCSTR)buff); //leggo il testo.... non va(ho //provato a inviare il testo
//ottenuto //con una socket ma non funziona
SendMessage(Text, EM_SETREADONLY, 0, TRUE);
//setto readonly
//ma non va
return TRUE;
}
}
return FALSE;
}

Scusa ma non c' anche GetDlgItemText?O mi ricordo male?E getWindowText l'hai provata?

suomi_viking_86
12-07-2005, 15:21
ok, provo queste funzioni, gi meglio che mandare i vari messaggi...

suomi_viking_86
13-07-2005, 12:00
GetDlgItemText funziona alla perfezione e semplifica enormemente le cose.....
il mio errore per era l'uso di un ID duplicato (non un errore che il compilatore rileva, due costanti possono avere lo stesso valore...) che richiamava l'oggetto sbagliato (quello con lo stesso ID dell'EDIT)

unomichisiada
13-07-2005, 12:18
Originariamente inviato da suomi_viking_86
GetDlgItemText funziona alla perfezione e semplifica enormemente le cose.....

Non avevo dubbi

Originariamente inviato da suomi_viking_86
il mio errore per era l'uso di un ID duplicato (non un errore che il compilatore rileva, due costanti possono avere lo stesso valore...) che richiamava l'oggetto sbagliato (quello con lo stesso ID dell'EDIT)
Sono gli errori pi b.....di, il modo migliore per rilevarli smpre un debug passo passo.Ciao

Loading