Programación General > Visual C++
Redibujar Pantalla
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
[#] Página Siguiente
Ir a la versión completa