Programación General > Visual C++

 Redibujar Pantalla

(1/2) > >>

allisap:
Saludos  :D ...

estoy haciendo una aplicacion que lee datos desde un archivo de texto (cerca de 900 datos)

y los debe graficar en una ventana a una velocidad constante , esta parte ya funciona

pero tengo algunos problemas cuando otra ventana pasa por encima de la ventana de mi aplicacion, porque borra parte de la grafica que dibuje (la parte por la que paso encima la otra ventana )<_<  creo que el problema es el redibujo de la ventana , pero no se como arreglarlo... alguien tiene alguna idea

SteelX:
Bueno, primero estas dibujanto en el WM_PAINT o en EL WM_ERASEBKGND, en cual de los 2 estas dibujando.

Debes tener en cuenta que cada vez que hagas algun movimiento en la ventana se va redibujar con WM_PAINT

claro esta si por algun motivo.. un loop o algo asi esta interfiriendo con el dibujado puedes usar  UpdateWindow();

dejanos ver tu funcion OnPaint a ver que estas haciendo.

allisap:
Saludos :)

en realidad no estoy dibujando en el WM_PAINT o en EL WM_ERASEBKGND,
en lugar de eso, genere un timer, y cada que el timer expira leo un dato de mi vector y lo grafico, asi cada punto se grafica a un ritmo constante y la grafica se desplaza,

asi, en realizada estoy graficando en la funcion que llama el timer

void CALLBACK TimeProc(UINT uTimerID, UINT uMsg,
                        DWORD dwUser, DWORD dw1, DWORD dw2)
{
  /**
   * Timer Interruption
   */

   GraficaDatos();
}

SteelX:
Como mandas a Graficar en Windows sin El evento paint. Que usas MFC , ATL o WTL??

Si estas usando una Funcion que se llama OnPaint  De Igual Manera estas usando WM_PAINT para dibujar sencillamente porque estas usando macros MessageMap.

algo como esto en WTL

MESSAGE_HANDLER(WM_PAINT, OnPaint)

Mustrame como estas dibujando.


De Igual manera en tu funcion  GraficaDatos(), Puedes usar UpdateWindow() para forzar a que se repinte la ventana.

no llames UpdateWindow() dentro del evento WM_PAINT porque generaria un loop

allisap:
bueno el WM_PAINT solo lo uso para posicionarme por primera vez cuando arranca el programa y de ahi solo grafico cada punto en cada llamada al timer


--- Código: Text ---   case WM_PAINT:    hdc = BeginPaint(hWnd, &ps);    MoveToEx(hdc, Xg, Yg, (LPPOINT) NULL);     // TODO: Add any drawing code here...    EndPaint(hWnd, &ps);    break;  -

el codigo esta algo extenso asi que mejor lo adjunto

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa