在关闭窗口的win32 C ++编程中,我应该自己调用DestroyWindow(hWnd)还是调用SendMessage(WM_CLOSE,hWnd,0,0)?

时间:2013-08-09 21:34:15

标签: winapi

我在我的应用程序中处理ESC键,当收到此键时,我希望关闭当前窗口。

我应该简单地拨打DestroyWindow(hWnd)还是应该SendMessage(WM_CLOSE, hWnd, 0, 0),还是应该以某种不同的方式关闭当前窗口?

4 个答案:

答案 0 :(得分:16)

你应该PostMessage(hWnd, WM_CLOSE, 0, 0)。它将WM_CLOSE消息放入窗口的消息队列进行处理,窗口可以在消息队列清除时正常关闭。

您应该使用PostMessage代替SendMessage。区别在于PostMessage只是将消息放入消息队列并返回; SendMessage等待来自窗口的响应,并且在WM_CLOSE的情况下您不需要这样做。

答案 1 :(得分:2)

由您决定使用。 Esc键是否应该像点击关闭按钮一样,还是应该它会破坏窗口?

WM_CLOSE的默认实现(如DefWindowProc中所示)会调用DestroyWindow,因此,如果您没有专门处理WM_CLOSE,那么一个就像另一个一样好。但是WM_CLOSE并不一定要调用DestroyWindow,所以如果有问题的窗口处理它,那么它可以做其他事情。例如,it could pop up a "Are you sure?"-type message box,或者什么都不做。 DestroyWindow将绕过所有这些。

答案 2 :(得分:1)

你应该使用PostQuitMessage。

来自MSDN请勿使用PostMessage函数 PostQuitMessage发布 WM_QUIT 消息。

如果使用PostMessage,如果hWnd值以某种方式变为HWND_BROADCAST,则可能会将该消息发送到所有顶级窗口。

答案 3 :(得分:0)

PostMessage或SendMessage WM_CLOSE