C/Visual C - Timers en Visual C++ 6.0

 
Vista:

Timers en Visual C++ 6.0

Publicado por José Manuel Gómez (1 intervención) el 31/01/2002 16:47:25
En una aplicación documento/vista de Visual C++ 6.0 quiero manejar un temporizador desde la clase de vista (NetmeterView.cpp). Para ello desde el ClassWizard añado el mensaje WM_TIMER en la clase CNetmeterView. Dentro del código de esta clase invoco a la función SetTimer sobre la ventana principal de la aplicación:

CWnd *pater=this->GetParent();
pater->SetTimer(1,1000,NULL)

También escribo el código correspondiente en la función CNetmeterView::OnTimer, pero este código no se llega a ejecutar nunca. ¿Alguien sabe qué está mal?
Para evitar este problema, indico la función que se debe ejecutar como respuesta al mensaje WM_TIMER como tercer parámetro de la función SetTimer:

pater->SetTimer(1,1000,TimerOut)

y en este caso sí que se ejecuta el código de la función TimerOut cuando toca. El prototipo de esta función es:

void CALLBACK EXPORT TimerOut(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT nIDEvent, // timer identification
DWORD dwTime // system time
)

Pero ahora aparece un nuevo problema. Lo que pretendo hacer con el temporizador es redibujar la ventana principal de la aplicación cada determinado intervalo de tiempo. Desde la función global TimerOut no tengo acceso a la ventana principal de la aplicación o al objeto de la clase CNetmeterView (no se puede utilizar el puntero this). Por tanto no tengo forma de redibujar la pantalla.
Tal vez se pudiera redibujar mediante el uso del handle hWnd, pero no tengo ni idea de cómo hacer eso.
¿Alguien me puede ayudar?
Gracias por adelantado.
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:Timers en Visual C++ 6.0

Publicado por Alvaro Mouat (122 intervenciones) el 04/02/2002 14:02:17
El handle (hWnd) de los parametros de la funcion del timer es el de la ventana a la que esta asociado el timer.
teniendolo puedes mandar el mensage WM_PAINT a esta ventana.
en el switch(message) {} de la funcion del dialogo deberias poner el codigo necesario para repintar la ventana.
si esta no es la ventana que quieres redibujar, sino la ventana que es padre de esta, la funcion GetParent() te entrega el handle del dialogo padre de la ventana en la que estas parado, así que podrias utilizar este para mandas el mensaje.
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