EndPaint() notwendig?



  • Hallo.
    Hab ein kleines Problem! Wenn ich ein Window erstelle muss ich ja was reinzeichnen .. so wenn dies nun getan ist und (in meinem Fall) einen SetTimer() erzeuge der dann in der WM_TIMER etwas in das Fenster zeichnen soll, dies aber nicht geht wenn ich in WM_PAINT mit EndPaint() schon abgeschlossen habe. Welche Möglichkeiten habe ich um dennoch was zu zeichnen? Ich habs mal damit versucht einfach EndPaint() weg zu lassen (was funktioniert) .. aber da muss es doch eine elegantere Lösung geben?!

    Danke für eure Hilfe im Voraus ;)!



  • Außerhalb von WM_PAINT bekommst du ein gültiges HDC mit der Funktion GetDC bzw. GetWindowDC. So wie für jeden BeginnPaint Aufruf EndPaint aufgerufen werden muss, muss für jeden Get(Window)DC Aufruf ReleaseDC aufgerufen werden.
    Also immer

    PAINTSTRUCT ps;
    HDC hdc=BeginPaint(hwnd, &ps);
    //zeichnen...
    EndPaint (hwnd, &ps);
    

    und äquivalent dazu

    HDC hdc=GetWindowDC(hwnd);
    //zeichnen...
    ReleaseDC(hwnd, hdc);
    

    verwenden.

    Übrignes wird das, was du mittels GetDC-ReleaseDC zeichnest nicht wieder neugezeichnet, sobald du z.B. das Fenster minimierst und dann wieder wiederherstellst!



  • Danke vielmals !!!


Anmelden zum Antworten