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.


Anmelden zum Antworten