C/Visual C - Ventana se queda parada

 
Vista:

Ventana se queda parada

Publicado por Juanma (1 intervención) el 15/03/2007 19:16:22
Tengo que hacer una pequeña aplicacion y probando visual creo una ventana y al comprobar como funciona se queda la ventana parada,no puedo ni cerrarla y la tengo que cerrar por el simbolo de sistema que me sale, el codigo es el siguiente

main(){

return DialogBox(NULL, MAKEINTRESOURCE(ID_Ventana), NULL, (DLGPROC)WndProc);

}


LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
{

switch(messg)
{

case WM_LBUTTONDOWN:
MessageBox(hWnd, "WM_LBUTTONDOWN: Se presiono el boton del mouse", "Evento", MB_OK);
break;
case WM_KEYDOWN:
MessageBox(hWnd, "WM_KEYDOWN: Se presiono una tecla", "Evento", MB_OK);
break;
case WM_CLOSE:
MessageBox(hWnd, "WM_DESTROY: La ventana se destruye", "Evento", MB_OK);
PostQuitMessage(0);
break;
default:

return(DefWindowProc(hWnd,messg,wParam,lParam));
break;
}
return 0;
}



Por lo que e podido averiguar el problemas es que se queda "pillado" en el default ejecutandolo permanetemente sin posibilidad de hacer nada.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ventana se queda parada

Publicado por fernando.gomez (1603 intervenciones) el 15/03/2007 23:21:02
¿Por qué empleas main en lugar de WinMain? ¿Y qué hace la función DialogBox?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ventana se queda parada

Publicado por Nelek (816 intervenciones) el 16/03/2007 07:48:02
Hola,

En primer lugar, un pequenio apunte. Cuando pones (ID_Ventana), en mi opinion seria mejor que usaras todo mayusculas, ya que las ID_XXX son constantes que se incluyen en el resource.h y queda mas claro de tal manera. Una cosa son clases y otra recursos.

Cuando dices que has probado con Visual te refiers a que intentas programar "a pelo" para crear una aplicacion? o que estas usando VC++ para crear la aplicacion en si? La pregunta viene porque si se sabe como, se puede programar una aplicacion entera sin necesidad de entrar en el VC++, creando los ficheros resource.h, MyApp.cpp,MyApp.res, etcetera.

Si estas en el primer caso (que es lo que parece por la estructura), no tengo tanta practica con el. Pero...

Si haces un return, ya te sales de la funcion en la que lo ejecutas, entonces... para que poner el break detras?

no deberia ser...????

LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
{

switch(messg)
{

case WM_LBUTTONDOWN:
MessageBox(hWnd, "WM_LBUTTONDOWN: Se presiono el boton del mouse", "Evento", MB_OK);
break;
case WM_KEYDOWN:
MessageBox(hWnd, "WM_KEYDOWN: Se presiono una tecla", "Evento", MB_OK);
break;
case WM_CLOSE:
MessageBox(hWnd, "WM_DESTROY: La ventana se destruye", "Evento", MB_OK);
PostQuitMessage(0);
break;
default:
break;
}
return(DefWindowProc(hWnd,messg,wParam,lParam));
}


A parte... lo que ha dicho Fernando... Si quieres hacer una aplicacion Win32, tendras que usar sus convenciones y llamar a las cosas correctamente. En VC++ el "main" cuelga de la clase CMyApp, donde en el "CMyApp::InitInstance" se ejecuta el codigo para crear el marco principal de la aplicacion, asignarle una ventana, etc...

Personalmente opino, que primero deberias utilizar un poco el VC++, usando el asistente (Fernando no me pegues :P), para acostumbrarte a la arquitectura, los nombres de las clases y demas. Luego ya meterte a programar sin usar el asistente y ahorrarte lineas de codigo que en muchas ocasiones no se usan.

Por ultimo...

Yo haria lo siguiente:
Te creas tu clase derivada del CWinApp, dejas al bucle de mensajes con su forma habitual, creas tu dialogo con una clase asociada y le metes alli los eventos con las macros BEGIN_MESSAGE_MAP(), END_MESSAGE_MAP ()
, DECLARE_MESSAGE_MAP()

Nota: Que conste que yo soy de los "profanos" que usan el asistente, asi que puede que mucho de lo que he dicho no sea aplicable para los casos de programacion "a pelo". Espero no haberme equivocado de lleno ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar