Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/05/2006, 00:18
Nivel7
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 1 mes
Puntos: 2
El detalle esta en los eventos.

Si usas una rutina de dibujo fuera del evento Paint.
sear dificil que se repita cuando se envia el mensaje WM_PAINT:
ya que tu rutina en este caso se actualizaria solo con WM_COMMMAND y especificamente con un ID 110. de otra forma nunca se ejecutara esta rutina.

Lo ideal es no usar rutinas de dibujado fuera de WM_PAINT:
Sin embargo supongo que se puede hacer con SendMessage, al boton que activa la rutina grafica.(Su pongo que es un boton el que activa la rutina grafica).

Pero yo haria esto:
bool garfActivo = false;

case WM_COMMAND:
switch(LOWORD(wParam))
{
case 110:
{
RECT r;
grafActivo = true;
GetClientRect(hwnd, &r);
InvalidateRect(hwnd, &r, TRUE);
}
break;
}
break;
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
if(grafActivo)//solo para las rutinas de el comando 110
{
// instrucciones del function graf(); quitando GetDC y ReleaseDC
}
EndPaint(hwnd,ps);
break;

De esta forma puedes poner cualquier otro tipo de rutinas en WM_PAIN, pero las de la funcion graf() solo se dubujaran si ya se ha activado grafActivo, con el comando 110.

No he probado esta rutina pero supongo que no tendras problemas con el sobreposicionamiento de ventanas, de ser asi podrias agregar a tu clase de ventana CS_HREDRAW | CS_VREDRAW.

Saludos.