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



我正在处理应用程序中的ESC密钥,收到该密钥后,我希望关闭当前窗口。

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

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

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

使用哪一种取决于您。Esc键的作用应该像单击关闭按钮一样,还是应该肯定会破坏窗口?

WM_CLOSE的默认实现(如DefWindowProc中所示)调用DestroyWindow,因此,如果您没有专门处理WM_CLOSE,那么一个和另一个一样好。但是WM_CLOSE不一定要调用DestroyWindow,所以如果有问题的窗口处理它,那么它可以做其他事情。例如,它可以弹出一个";你确定吗&quot-键入消息框,或者什么都不做。DestroyWindow将绕过所有这些。

PostMessageSendMessage WM_CLOSE

最新更新