WM_PAINT wird immer wieder aufgerufen
-
Hi! Ich habe ein Verhalten festgestellt, bei dem ich mir nicht sich bin, ob es korrekt ist.
Wenn ich WM_PAINT abfange, und 0 zurück gebe, erhalte ich ununterbrocken WM_PAINT-Nachrichten, obwohl es eigentlich keinen Grund gibt:
case WM_PAINT: std::clog << "WM_PAINT" << std::endl; return 0;Wie gesagt, bei dem obigen Beispiel läuft in der Konsole ununterbrocken die Ausgabe immer wieder durch. Ist das gesund?
Der nachfolgende Code spuckt WM_PAINT nur dann aus, wenn es nötig ist:
case WM_PAINT: std::clog << "WM_PAINT" << std::endl; return DefWindowProc(hwnd, msg, wParam, lParam);Habe ich irgendwo einen Fehler? Hat das was mit der Fensterklasse zu tun? Meine Styleparams:
dwStyle = WS_OVERLAPPEDWINDOW | WS_TABSTOP | WS_CLIPCHILDREN; dwExStyle = WS_EX_APPWINDOW;Normalerweise sollte doch WM_PAINT nur kommen, wenn wirklich was neu gezeichnet werden muß?!
-
wenn du in wm_paint nur 0 zurückgibst, erkennt Windows den zu aktualisierenden bereich immer noch als ungültig. erst durch einen aufruf von BeginPaint und ein nachfolgendes EndPaint lassen den Bereich wieder gültig werden.
-
Stimmt, hatte nämlich die ganze Zeit ein anderes HWND-Objekt mit BeginPaint() aktualisiert. Man muß also auf jeden Fall das in der Nachricht übergebene HWND mit aktualisieren. Danke!
-
Du musst als aller erstes BeginPaint aufrufen und am Ende EndPaint. Sonst bekommst du von Windows andauernt WM_PAINT Nachrichten, weil es denkt, es müsste noch gezeichnet werden.