2016-04-21 4 views
0

Mein denke, es ist irgendwie eine WM_QUIT Nachricht empfangen, denn das ist, was die while-Schleife dreht sich um (was nach dem proc immer dann, wenn eine WM_DESTROY Nachricht verarbeitet Funktion geschieht)Warum kann ich mit PeekMessage() keine erfolgreiche Nachrichtenschleife erstellen?

Das Fenster automatisch, wenn ich anstelle von GetMessage verwenden PeekMessage schließt im, mit PeekMessage, um die Schleife bei maximaler Geschwindigkeit

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, 
        LPSTR lpCmdLine, int nCmdShow) 
{ 
MSG msg; 
if(!CreateMainWindow(hinstance, nCmdShow)) 
    return false; 
//this works 
while (GetMessage(&msg, (HWND) NULL, 0 , 0)) 
{ 
    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
} 
return (int) msg.wParam; 
    UNREFERENCED_PARAMETER(lpCmdLine); 
}  

//this automatically closes the window 
int done = 0; 
while (!done) 
{ 
    if (PeekMessage (&msg, NULL, 0 ,0, PM_REMOVE)) 
    { 

     if (msg.message = WM_QUIT) 
      done = 1; 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
} 
return msg.wParam; 
    UNREFERENCED_PARAMETER(lpCmdLine); 

hier ist die einfache WinProc Funktion

LRESULT CALLBACK WinProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM 
lParam) 
{ 
switch(msg) 
{ 
     Case WM_DESTROY: 
     PostQuitMessage(0); 
     return 0; 
} 
return DefWindowProc (hWnd, msg, wParam, lParam); 
} 
+0

Ich rollte Ihre letzte Bearbeitung zurück, da Sie die Frage mit der Antwort überschrieben haben. Zwei Antworten ohne Frage sind für zukünftige Besucher nicht hilfreich. Da Sie dies nicht getan haben, überlegen Sie sich, die [Tour] zu nehmen. – IInspectable

+1

if (msg.message == WM_QUIT) –

+0

"* Ich benutze PeekMessage, um die Schleife mit maximaler Geschwindigkeit auszuführen *" - was Sie denken lässt, 'PeekMessage()' in einer Schleife aufzurufen ist schneller als 'GetMessage() aufzurufen 'in einer Schleife? –

Antwort

6

Sie zuweisen WM_QUI laufen T zu msg.message, anstatt es zu vergleichen.

+0

WOW, erstaunlich, wie eine einzige = den Code beeinflussen kann – hec

+1

Deshalb sollten Sie immer mit Warnungen aktiviert kompilieren. –

+2

... oder Warnungen nicht ignorieren! Das ist auch der Grund, warum manchmal Vergleiche empfohlen werden: "if (WM_QUIT == msg.message)". Wenn Sie den Vergleich versehentlich als Zuweisung (== as =) vergessen und codieren, wird der Compiler einen Fehler ausgeben. –