2010-12-16 7 views
1

Ich bin kürzlich in eine Situation geraten, in der ich einen nicht modalen Dialog in Win32 verwenden wollte.Win32: Was macht meine Nachrichtenschleife in diesem Beispiel falsch?

Win32: Toolbar dialog seems to never get focus and causes the main window to process slow!?

Und ich herausgefunden, dass diese Schleife meine Botschaft war:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { 
    // Doing required stuff here... 

    while (GetMessage(&Msg, hWnd, 0, 0) > 0) { 
     // Processing messages here... 
    } 
} 

In der Tat, diese Meldungsschleife in Ordnung, so lange funktioniert, wie ich keinen modalen Dialog habe , da es mit modalen Dialogen vollkommen funktioniert, da sie ihre eigene Nachrichtenschleife verarbeiten. Mein nicht modales Dialogfeld funktionierte einwandfrei, als ich die hWnd Instanz für NULL ersetzte. Ich verstehe nur nicht den Unterschied, außer dass es scheint, dass ich die Nachrichten nicht für ein bestimmtes Fenster bekomme.

Kann jemand erklären, was diese Nachrichtenschleife inkorrekt macht?

Wie diese:

while (GetMessage(&Msg, NULL, 0, 0) > 0) { 
    // Processing messages here... 
} 

funktioniert einwandfrei!

+1

Ja, ein bisschen zu offensichtlich. Ein modusunabhängiger Dialog erfordert auch IsDialogMessage() in der Nachrichtenschleife. –

+0

@Hans: Ja, tatsächlich. Ich hätte es in diese Probe geschrieben, ich habe es wie in meiner Frage in Link gezeigt, obwohl ich es hier nicht illustriert habe. Mein Fehler. –

Antwort

3

Der Unterschied ist ziemlich offensichtlich: Sie haben eine HWND in GetMessage angegeben. Sie verarbeiten also keine Nachrichten für andere Fenster, einschließlich Ihrer Symbolleiste. Siehe die Dokumentation für GetMessage

+0

Danke! Ich wollte sicherstellen, dass ich meinen Fehler richtig verstanden habe, und Ihre Antwort spiegelt wider, was ich dachte, obwohl ich mir nicht sicher war. =) –