Paint funktion



  • Hallo zusammen!

    Ich sitze gerade noch an einem C-Projekt als Windowsprogramm, in dem sich Punkte über den Bildschirm bewegen sollen. Ich soll hier die Timer- mit der Paint- Funtion kombinieren.

    Um eine Beliebige Anzahl von Punkten mit den gleichen Bewegungsformeln darzustellen will ich je Timersignal eine for-schleife ablaufen lassen.

    Jetzt mein Problem:
    Am ende der for-schleife steht mein unterprogramm, das die werte in eine grafik umwandelt. allerdings bleibt im endeffekt nur das bild des letzten durchlaufs der for- schleife stehen. Wie kann ich denn verhindern, dass er bei jedem durchlauf des zeichen unterprogrammes den bildschirm erst löscht?

    Hier noch der Quelltext:

    case WM_TIMER:
    switch (wParam)
    {
    case IDT_TIMER1:

    t=t+0.1;
    xa = (xbeschlt);
    ya = (ybeschl
    t);

    for (i=1; i<=anzahl; i++)
    {
    xres = x[i]+xa;
    start_xl_a[i] = start_xl_a[i]+xres;
    start_xl[i] = round(start_xl_a[i]);

    yres = y[i]+ya;
    start_yo_a[i] = start_yo_a[i]+yres;
    start_yo[i] = round(start_yo_a[i]);

    zeichnen (hwnd, &start_xl[i] , &start_yo[i]);
    }

    Zeichenprogramm:

    BOOL zeichnen (HWND hwnd, int *start_xl, int *start_yo)//, int xr, int yo )
    {
    int ScreenColor;
    int xl,yo;

    HDC hdc ;
    PAINTSTRUCT ps ;
    RECT Rect ;

    InvalidateRect (hwnd, NULL, TRUE) ;
    hdc = BeginPaint (hwnd, &ps) ;
    SetBkMode(hdc, TRANSPARENT);

    ScreenColor = RGB(0, 0, 255);
    SelectBrush(hdc, CreateSolidBrush(ScreenColor));

    xl=*start_xl;
    yo=*start_yo;

    Ellipse(hdc, (xl), (yo), (xl+8), (yo+8));

    EndPaint (hwnd, &ps) ;
    UpdateWindow(hwnd);
    return 1;
    }

    vielen dank im voraus,
    christian



  • Jedesmal, wenn dein Prog die Funktion "zeichnen" aufruft, führt sie erstmal "InvalidateRect()" aus. Damit wird der Bildschirm für ungültig erklärt und gelöscht.



  • vielen vielen Dank, ich hab die zeile jetzt einfach vor meine for- schleife gezogen und sie in dem zeichenprogramm auf TRUE gesetzt jetzt tut's wunderschön!

    Danke, nochmal!

    Christian



  • Aus der MSDN:

    An application should not call BeginPaint except in response to a WM_PAINT message.


Anmelden zum Antworten