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 = (ybeschlt);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.