tu dessine ta courbe dans un DC en mémoire. Lors du rafraîchissement, tu dessine ce DC à l'écran et tu y rajoute le reste.
1) dessin de la courbe dans un DC en mémoire,
// variables globales: int cxCourbe, int cyCourbe; HDC hDCCourbe; HBITMAP hBmpCourbe; HBITMAP hOldBmpCourbe;
void DessineCourbe(int cx, int cy) { cxCourbe=cx; cyCourbe=cy; HDC hdc = GetDC(NULL); hDCCourbe=CreateCompatibleDC(hdc); hBmpCourbe=CreateCompatibleBitmap(hdc, cx, cy); hOldBmpCourbe = (HBITMAP)SelectObject(hDCCourbe, hBmpCourbe); ReleaseDC(NULL, hdc);
// ici tu dessine ta courbe en utilisant hDCCourbe
}
2) Rafraîchissement de la fenêtre (hdc est le DC de la fenêtre, obtenu par BeginPaint dans OnPaint, ou GetDC) les autres paramètres sont la taille de la zone cliente où dessiner.
void Redraw(HDC hdc, int cxClient, int cyClient) { // DC en mémoire HDC hMemDC = CreateCompatibleDC(hdc); HBITMAP hMemBmp = CreateCompatibleBitmap(hdc, cxClient, cyClient); HBITMAP hOldBmp = (HBITMAP)SelectObject(hMemDC, hMemBmp);
// dessin de la courbe à la position xCourbe, yCourbe int xCourbe = 0; int yCourbe = 0; BitBlt(hMemDC, xCourbe, yCourbe, cxCourbe, cyCourbe, hDCCourbe, 0, 0, SRCCOPY);
// dessin du reste an utilisant hMemDC et pas hdc (curseurs...)
// recopie à l'écran BitBlt(hdc, 0, 0, cxClient, cyClient, hMemDC, 0, 0, SRCCOPY);
// libération mémoire SelectObject(hMemDC, hOldBmp); DeleteObject(hMemBmp); DeleteDC(hMemDC); }
3) libération courbe void FreeCourbe() { SelectObject(hDCCourbe, hOldBmpCourbe); DeleteObject(hBmpCourbe); DeleteDC(hDCCourbe); }
|