Cosa rarísima sucede al ejecutar mi pequeño programa

Iniciado por FMLTGRD, 29 Noviembre 2014, 05:13 AM

0 Miembros y 1 Visitante están viendo este tema.

FMLTGRD

Hola a todos, estoy haciendo un programa y para eso comencé con las bases que son saber como hacer una ventana, ponerle botones y una caja de texto.
Todo eso lo puedo hacer sin problema. Después para obtener los datos de la caja de texto use el mensaje EM_GETLINE. Esta solución me funciona bastante bien ya que después uso la función printf() para desplegar los datos.

En fin, lo raro es que cuando ejecuto el programa y escribo en la caja de texto: "Hola Mundo" el programa me imprime por pantalla el mensaje pero al final le añade una carita feliz. Si alguien pudiera explicarme este fenómeno y como evitarlo se lo agradecería.

Les dejo aquí un pedazo de código:

LRESULT CALLBACK Procedure(HWND hWindow, UINT message, WPARAM wParam, LPARAM lParam){

   static HWND button, caja;

switch(message){

   case WM_DESTROY:{

PostQuitMessage(0);
return 0;

   }

   case WM_CREATE:{

       button = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON", "BUTTON", WS_CHILD | WS_VISIBLE, 10, 10, 100, 50, hWindow, NULL, NULL, NULL);
       caja = CreateWindowEx(WS_EX_ACCEPTFILES, "EDIT", "", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, 10, 70, 100, 25, hWindow, NULL, NULL, NULL);
           break;

   }

   case WM_COMMAND:{

           char buffer[512];
           if((HWND)lParam == button){
               [b]SendMessage(caja, EM_GETLINE, 0, (LPARAM)buffer);
               printf("%d \n", strlen(buffer));
               printf("%s\n", buffer);[/b]
               return 0;
           }
       break;

   }

}

return DefWindowProc(hWindow, message, wParam, lParam);

}

engel lex

Usa etiquetas GeSHi para publicar codigo, modifica el tema y colocaselas...

La carita feliz se genera de un ascii mal interpretado por la consola (alt+1) posiblemente en  buffer (por no estar inicializado o por no pasarse a la funcion su largo correcto) esta conteniendo algo de basura inicial de la ram y mostrandose
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

FMLTGRD

Gracias por la recomendación voy a usarlas mas seguido.
¿Por otra parte como puedo evitar que eso pase? ¿Solo tengo que inicializar la variable con cualquier texto?

engel lex

El asunto es que tienes que saber la cantidad de caracteres a capturar... esto puede ayudarte

http://msdn.microsoft.com/en-us/library/windows/desktop/bb761613(v=vs.85).aspx

(PD: Usa el boton modificar y coloca en GeSHi el primer codigo publicado)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Eternal Idol

Ademas, EM_GETLINE message:

lParam
A pointer to the buffer that receives a copy of the line. Before sending the message, set the first word of this buffer to the size, in TCHARs, of the buffer. For ANSI text, this is the number of bytes; for Unicode text, this is the number of characters. The size in the first word is overwritten by the copied line.

Edit controls: The copied line does not contain a terminating null character.

Nunca viene mal usar ZeroMemory para inicializar las variables.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

FMLTGRD

Ya puse el codigo como se debe. Muchas gracias. Voy a usar sus recomendaciones y les aviso si me funciona.