In win32 C++ - Programmierung um ein Fenster zu schließen, sollte ich call DestroyWindow(hWnd) selbst oder SendMessage(WM_CLOSE, hWnd, 0, 0)?
Ich bin Umgang mit ESC
Schlüssel in meiner Anwendung, und wenn diese Schlüssel empfangen wird, Wünsche ich zum schließen des aktuellen Fensters.
Soll ich einfach anrufen DestroyWindow(hWnd)
oder sollte ich SendMessage(WM_CLOSE, hWnd, 0, 0)
oder soll ich schließen das aktuelle Fenster in irgendeiner anderen Weise?
- Wenn alle Ihre
WM_CLOSE
handler ruftDestroyWindow()
dann gibt es keinen Grund, nicht einfach direkt aufrufen. Hängt davon ab, ob Sie wollen eine andere Verarbeitung (z.B. zeigen Sie ein "Sind Sie sicher, dass Sie beenden wollen?" - dialog). - Dank Jonathan. Ich nicht eine andere Verarbeitung, meine
WM_CLOSE
- handler ruft einfachDestroyWindow()
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie
PostMessage(hWnd, WM_CLOSE, 0, 0)
. Es stellt dieWM_CLOSE
Nachricht in das Fenster message-queue für die Verarbeitung, und die Fenster können richtig schließen, da die message-queue ist gelöscht.Sollten Sie verwenden
PostMessage
stattSendMessage
. Der Unterschied ist, dassPostMessage
stellt einfach die Nachricht in die message-queue und gibt;SendMessage
eine Antwort wartet aus dem Fenster, und Sie brauchen nicht zu tun, dass im Fall vonWM_CLOSE
.Es ist bis zu Ihnen, welche Sie verwenden. Sollten Sie die Esc-Taste handeln einfach wie das klicken auf die Schaltfläche schließen, oder sollte es auf jeden Fall zerstören die Fenster?
Die default-Implementierung von
WM_CLOSE
(wie inDefWindowProc
) fordertDestroyWindow
, so dass, wenn Sie nicht Umgang mitWM_CLOSE
speziell dann, eines ist so gut wie der andere. AberWM_CLOSE
nicht unbedingt nennenDestroyWindow
, obwohl, so dass, wenn das Fenster in Frage, behandelt er dann, es könnte etwas anderes tun. Zum Beispiel, es könnte ein Popup "Sind Sie sicher?"-Typ message-box, oder einfach gar nichts tun.DestroyWindow
werden alle von bypass.Sollten Sie verwenden PostQuitMessage.
Vom MSDN: nicht buchen, die WM_QUIT Nachricht mithilfe der PostMessage-Funktion verwenden PostQuitMessage.
Wenn du mit PostMessage, riskieren Sie senden die Nachricht an alle Fenster der obersten Ebene sollten die hWnd-Wert irgendwie zu HWND_BROADCAST.
Entweder PostMessage oder SendMessage WM_CLOSE
PostMessage
ist so gut wieSendMessage
,SendMessage
ist sicherlich das falsche Werkzeug.