Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++-winAPI] ottenere il testo contenuto in un editTEXT

    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)
    codice:
    int WINAPI WinMain( HINSTANCE hInstance, 
                        HINSTANCE hPrevInstance, 
                        LPSTR lpCmdLine, 
                        int nCmdShow)
    { 
      DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOGO),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
    codice:
    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;
    }

  2. #2

    Re: [C++-winAPI] ottenere il testo contenuto in un editTEXT

    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)
    codice:
    int WINAPI WinMain( HINSTANCE hInstance, 
                        HINSTANCE hPrevInstance, 
                        LPSTR lpCmdLine, 
                        int nCmdShow)
    { 
      DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOGO),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
    codice:
    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?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    ok, provo queste funzioni, è già meglio che mandare i vari messaggi...

  4. #4
    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)

  5. #5
    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
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.