OpenGl - Winapi (WM_PAINT)
-
HI
Also ich hab ein Programm geschrieben das nur mit gl.h funktionen und winapi arbeitet.
So wie es bei den meisten Spielprogammier tutorials es üblich ist, schreibt man ja eine Programmhauptschleife mit Messageschleife Kombiniert.
z.B:(oder ählich)
while(!EndeAusSchluss)
{
if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT) EndeAusSchluss = true;
else
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
//else tu was auf den Bildschirm
else
{
DoOpenGlPaint();
SwapBuffers (hDC);
}
}So nun wollte ich das Ganze Gepainte,aber nicht so machen, da ich kein Spiel programmier, wo ich 30fps brauch oder so, sondern es langt wenn ich nur was zeichne wenn sich was ändert oder eine WM_PAINT message kommt.
Also wollte ich die Funktionsaufrufe: DoOpenGlPaint(); SwapBuffers (hDC);
in die WM_PAINT stecken. Geht auch, aber FRAGE: Warum sendet dauernt(!) irgendwas die WM_PAINT message, auch wenn sich nix tut. Sobald mein fenster OpenGL fähig ist, hängt immer eine Wm_paint in der Warteschlange, egal obs nötig ist oder nicht. (Also ist das im endeffekt so wie vorher als hätt ich die Aufrufe in der Schleife gelassen)Kann mir irgendjemand sagen warum das so ist, und ob man das irgendwie abstellen kann??
Vielen Dank
Grüße Flow
-
Ich kenne OpenGL zwar nicht so gut, aber ich vermute du rufst BeginPaint/EndPaint nicht auf.
In deinem Fall ist ValidateRect angebracht.Setz also einfach ans Ende deiner WM_PAINT-Behandlung ValidateRect. Sonst kommt es zu der beschriebenen Endlosschleife.
-
Aha Danke
Ich dachte erst, das hat was Ogl zu tun.
Also windows erwartet, das ein BeginPaint aufgerufen wird, wenn es einen Teil der Fensterfläche für ungültig erklärt, sonst schickt es andauert die Wm_paint message.