Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


No capturo eventos

Aqui programadores en la plataforma Win32 con Visual C++ de Microsoft...

Moderador: latindeveloper

No capturo eventos

Notapor jmcordoba el Mié May 14, 2008 8:40 am

Hola, tengo una aplicación que captura eventos normalmente como OnTimer (cada cierto tiempo) o OnPressF(cada vez que pulso una teclaF). Esta aplicación está basada en diálogos. En una parte de la misma cuando presiono uno de los botones entro en un bucle muy largo (puede llegar a horas) construido con un while. Es en este momento cuando la aplicación deja de detectarme las teclas F, no entra en OnTimer además de que si minimizo la aplicación y luego la máximizo no se me redibuja en la pantalla (esto no es problema ya que utilizao RedrawWindow y ya está solucionado) un último dato es que si abro el administrador de tareas la aplicación aparece como NoResponde aunque no es cierto porque se que trabaja.
Mi pregunta es si a alguien le ha ocurrido esto mismo y si tiene la solución.
Por otra parte, tengo una solución al tema y es crear un thread para hacer todos estos cálculos pesados de manera que el hilo del diálogo no va "tan cargado".
De todas formas me gustaría si alguien tiene alguna solución o idea para la cuestión que he planteado al principio.
Un saludo!
jmcordoba
Novato
Novato
 
Mensajes: 11
Registrado: Mié Nov 15, 2006 9:48 am

Re: No capturo eventos

Notapor ivancp el Vie May 16, 2008 9:04 am

Utilizar RedrawWindows es una solucion pero no la mas optima.

Puedes crear una funcion (como la sigue) para que puedas procesar los eventos que estan en cola (como refreso de pantalla, mover pantalla, mover mouse, etc. etc.):

Código: Seleccionar todo
void ProcesarEventos( HWND hWnd )
{
   MSG stMsg = { 0 };
   while( PeekMessage( &stMsg, hWnd, 0, 0, PM_REMOVE ))
   {
       PreTranslateMessage( &stMsg );   // sentencia correcta
       DispatchMessage( &stMsg );
    }
}


Puedes poner ese codigo en alguna parte de tu while:

Código: Seleccionar todo
while(siempre)
{
   ....
    ProcesarEventos( this->GetSafeHwnd() );
   ...
}


Saludos.
ivancp
Programador Experimentado
Programador Experimentado
 
Mensajes: 369
Registrado: Jue Sep 06, 2007 12:57 pm


Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados