Fenster reagiert nicht
-
Hi,
nachdem ich den Tipp mit WndProc->Klasse eingebaut habe, hab ich jetzt gleich das nächste Problem, das war aber glaub ich auch schon vorher da: Also mein Fenster reagiert einfach nicht, d.h. ich kann es nicht minimieren, nicht durch einen Klick auf das Kreuz schließen usw.
// Statische Callbackfunktion LRESULT CALLBACK CWindow::WindowProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) { CWindow *pWindowClass = (CWindow*)GetWindowLong(hWnd, GWL_WNDPROC); return pWindowClass->HandleMessage(hWnd, Message, wParam, lParam); } // ... die den Aufruf an diese hier weitergibt LRESULT CWindow::HandleMessage(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch (Message) { case WM_DESTROY: m_bFinished = true; PostQuitMessage(0); return 0; break; case WM_ACTIVATEAPP: m_bHasFocus = wParam; return 0; break; default: break; } return DefWindowProc(hWnd, Message, wParam, lParam); }
ChrisM
-
zeig mal die nachrichtenschleife!
-
void CWindow::ProcessMessages() { MSG Message; if (!m_bHasFocus) { while (PeekMessage(&Message, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&Message); DispatchMessage(&Message); } } else { while (GetMessage(&Message, NULL, 0, 0) && !m_bHasFocus) { TranslateMessage(&Message); DispatchMessage(&Message); } } }
Ich glaub an der liegts auch, weil nachdem ich GetMessage() eingebaut habe, falls das Programm nicht den Fokus hat und nichtmehr immer PeekMessage() verwende, tritt das Problem auf.
ChrisM
-
Hab meinen Fehler gefunden: Das ! vor m_bHasFocus muss natürlich weg!
Nur irgendwie geht das rausfinden, ob ich Fokus hab oder net, net richtig. Wie kann ich den wParam richtig in eine bool (nicht BOOL!) Variable kriegen?
ChrisM
-
Noch was: Das mit dem Fokus scheint jetzt zu gehen (verwendet dann GetMessage()), nur verwendet mein Programm immer noch PeekMessage, wenn es minimiert wird
Zählt Minimieren net als Fokusverlust?ChrisM
-
was hast du da überhaupt für eine kranke schleife?
-
Die ist net krank, hab nur ein Fenster (Direct3D-Ausgabe), die halt 100% CPU braucht und wenn sie keinen Fokus hat, hört sie so auf zu arbeiten und verhält sich wie ein "normales" Programm.
ChrisM