WM_PAINT macht timer kaput!
-
und man wird nie eine messagebox sehen...
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static HDC hdc; switch(iMsg) { case WM_CREATE: SetTimer(hwnd,1,2000,TimerProc); return 0; case WM_PAINT: hdc = GetDC(hwnd); ReleaseDC(hwnd,hdc); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, iMsg, wParam, lParam); } void CALLBACK TimerProc (HWND hwnd, UINT message, UINT ID, DWORD time) { MessageBox(NULL,"hhh","hhh",NULL); }
man entferne die WM_PAINT und es funktioniert wunderbar... wieso
[ Dieser Beitrag wurde am 28.12.2002 um 03:54 Uhr von ein_brot editiert. ]
-
in WM_PAINT benutzt man BeginPaint und EndPaint
-
Original erstellt von <der_kot>:
in WM_PAINT benutzt man BeginPaint und EndPaintwie lustig..
(bezieht sich auf den nick)
aber er/sie/es hat recht damit gehts...
[ Dieser Beitrag wurde am 28.12.2002 um 03:35 Uhr von ein_brot editiert. ]
-
mach folgendes:
case WM_PAINT: BeginPaint....... hdc = GetWindowDC(hwnd); ReleaseDC(hwnd,hdc); EndPaint........ return 0;
-
*...* <- die bedeutet einfach nix
[ Dieser Beitrag wurde am 28.12.2002 um 04:01 Uhr von ein_brot editiert. ]
-
und was soll das jetzt heissen?
-
hdc = GetWindowDC(hwnd); ReleaseDC(hwnd,hdc);
Was soll das?
BeginPaint liefert doch schon den DC.
-
das hier könnte auch funzen:
case WM_PAINT: hdc = GetDC(hwnd); ReleaseDC(hwnd,hdc); ValidateRect(hwnd,NULL); break;
[ Dieser Beitrag wurde am 28.12.2002 um 06:32 Uhr von geeky editiert. ]
-
@geeky geht danke!
-
@Luckie
du hast recht. wenn man keine ahnung hat, sollte man keine postings erstellen.
-
FAKE
-
Noch zur Erklärung:
Windows sendet immer so lange WM_PAINT bis der Bereich, der neu-gezeichnet werden muss (z.B. weil ein Fenster drüber hergeschoben wurde..) bis der Bereich als "neu-gezeichnet" gekennzeichnet wird.
Als "neu-gezeichnet" kann man den Bereich einmal mit ValidateRect(FensterHandle,BereichAlsRect) markieren oder man benutzt BeginPaint/EndPaint, was das automatisch macht und deshalb bei WM_PAINT bevorzugt werden sollte...Die Nachricht WM_PAINT wird von Windows als wichtiger eingestuft als z.B. der Timer und da du in deinem WM_PAINT den Bereich nicht als neu-gezeichnet kennzeichnest, wird immer wieder die WM_PAINT-Message geschickt und der Timer kommt nicht dran...