Frage zu WM_TIMER
-
Hi.
Ich suche einen Weg, eine WM_PAINT Message ein Mal pro Sekunde zu aktualisieren und bin dabei auf die Timer-funktionen gestossen. So richtig will die Sache allerdings nicht funktionieren, also die Updates finden nicht statt.
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { static int nWidth,nHeight; case WM_CREATE: int res; res = SetTimer(hwnd, 1, 1000, NULL); if(res == 0) MessageBox(hwnd, "Could not SetTimer()!", "Error", MB_OK | MB_ICONEXCLAMATION); return 0; break; case WM_TIMER: UpdateWindow(hwnd); return 0; case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC = BeginPaint(hwnd, &ps); //Funktion Plot aufrufen if (nWidth<=nHeight) { Plot(hDC,(int)(nWidth/2.-30.),(int)(nWidth/2.),int (nHeight/2.)); } else { Plot(hDC,(int)(nHeight/2.-30.),(int)(nWidth/2.),int (nHeight/2.)); } EndPaint(hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage (0); break; case WM_SIZE: nWidth = LOWORD(lParam); // width of client area nHeight = HIWORD(lParam); // height of client area InvalidateRect(hwnd,NULL,1); UpdateWindow(hwnd); //Fenster updaten break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }So wie ich es im obenstehenden Quelltext gemacht habe, funzt es nicht. Hat jemand einen Tipp?
Thx, Patric.
-
Tausch das UpdateWindow mal gegen InvalidateRect aus.
-
Supi!
Danke fuer die schnelle Antwort, es hat funktioniert.
-
Grober schrieb:
Außerdem änderst du in WM_TIMER ja gar keine Variablen.
Das passiert dann in der PLOT-Funktion. Dort hole ich mir immer die aktuelle Uhrzeit.
Bin dabei c(++) zu ueben und versuch mich gerade an einer (wirklich einfachen) Zeigeruhr.