2011-04-16 10 views
5

He intentado esto:Obtener texto de un control de edición

int editlength; 
int buttonid = 3324; // id to button, the numbers dont mean anything 
int editid = 5652; // id to edit 

LPTSTR edittxt; 

HWND button; // created in wWinmain as a button 
HWND edit; // created in wWinMain as an edit control 

// LRESULT CALLBACK WindowProc 

switch(uMsg) 
{ 
    case WM_COMMAND: 
     if(wParam == buttonid) 
     { 
      filedit = GetDlgItem(hwnd, editid); // I tried with and without this 
      editlength = GetWindowTextLength(filedit); 
      GetWindowText(filedit, edittxt, editlength); 

      MessageBox(hwnd, edittxt, L"edit text", 0); 
     } 
     break; 
} 

Pero consigo no ver ningún texto en el cuadro de mensaje.

Respuesta

14

El último argumento para GetWindowText() es el tamaño de su búfer. Como lo configura a la longitud de la cadena, le está diciendo a la función que su memoria intermedia es demasiado pequeña porque no hay espacio para el terminador nulo. Y nada se copia.

Además, ya debe asignar el búfer para contener la copia del texto. ¿A qué se refiere el punto edittxt? Ni siquiera veo dónde lo inicializas.

Uso correcto sería algo como esto:

TCHAR buff[1024]; 
GetWindowText(hWndCtrl, buff, 1024); 
4

edittxt tiene que ser un puntero a un búfer que recibe el texto .. así probar este ...

char txt[1024]; 
.... 
GetWindowText(filedit, txt, sizeof(txt)); 

Es posible que tenga para ajustar el Unicode ... lo siento ha pasado un tiempo desde que hice raw win32.

+0

Gracias, pero creo que la respuesta aceptada debería ir a @jonathan, ya que llegó primero :) –

Cuestiones relacionadas