16

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

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

4

3 回答 3

24

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

您应该使用PostMessage而不是SendMessage. 不同的是,PostMessage简单地将消息放入消息队列并返回;SendMessage等待来自窗口的响应,在WM_CLOSE.

于 2013-08-09T21:41:05.883 回答
2

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

WM_CLOSE(见DefWindowProc)调用的默认实现DestroyWindow,因此,如果您没有WM_CLOSE专门处理,那么一个与另一个一样好。但是WM_CLOSE不一定要调用DestroyWindow,所以如果有问题的窗口处理它,那么它可以做其他事情。例如,它可能会弹出一个“你确定吗?”类型的消息框,或者干脆什么都不做。DestroyWindow将绕过所有这些。

于 2013-08-09T21:52:35.543 回答
0

要么PostMessageSendMessage WM_CLOSE

于 2013-08-09T21:35:56.767 回答