BeginPaint und EndPaint, wozu?
-
Hi!
Ich arbeite gerade mit einem Buch und im Window Processer gibt es unter der WM_PAINT message folgenden Eintrag:
case WM_PAINT: { hdc = BeginPaint(hwnd,&ps); EndPaint(hwnd,&ps); return(0); }break;
Was bewirkt das ganze? Ich hab das jetzt so verstanden das WM_PAINT immer dann aufgerufen wird wenn man die Fenstergröße ändert, halt immer dann wenn Teile des Fensters neu gezeichnet werden müssen.
Kommentier ich diese Funktionsaufrufe aber aus ändert sich gar nichts?!
Wozu dienen sie ?
-
moin meister ...
so wie der Code da steht hat er keinerlei Auswirkungen auf Dein Programm.
Wenn Du nicht selbst etwas in den ClientBereich zeichnen willst braucht Du
WM_PAINT auch nicht abfangen.Anders ist es wenn Du mit TextOut(...) eine Zeichenfolge in den ClientBereich
ausgeben willst.Hierfür brauchst Du den HDC und diesen bekommst Du mit BeginPaint(...).
Weil der HDC eine Resource ist welche auch wieder freigegeben werden muß folgt
als letztes Deiner Zeichenoperationen EndPaint.mfg
RB
-
Wenn du WM_PAINT bearbeitest ohne BeginPaint/EndPaint aufzurufen, verursachst du eine Endlosschleife.
WM_PAINT wird ja dann gesendet, wenn Windows meint, dein Fensterinhalt sei ungültig. Du bearbeitest WM_PAINT, da aber BeginPaint/EndPaint fehlt sagst du Windows nicht dass der Inhalt jetzt gültig ist. Also muss Windows davon ausgehen, dass der Inhalt des Fensters immer noch ungültig ist, folglich wird ein weiteres WM_PAINT gesendet. Dieses wird wieder nicht richtig abgearbeitet, usw. usw...Alternativ könntest du auch ValidateRect aufrufen.
-
Danke!