WM_CLOSE和SC_CLOSE之间的区别

时间:2012-04-11 07:34:54

标签: .net winforms windows-messages

我只是想知道这两个消息传递常量之间的区别。在覆盖时,我应该在WndProc方法中使用哪一个来处理关闭按钮消息。

2 个答案:

答案 0 :(得分:3)

无论何时请求关闭窗口,

WM_CLOSE都会作为窗口消息发送。

当用户按下“关闭”按钮(或从窗口的控制菜单中选择“关闭”)时,

SC_CLOSE将作为WM_SYSCOMMAND消息的参数发送。

您倾听哪一个取决于您试图拦截/处理的操作。

答案 1 :(得分:1)

根据msdn,SC_CLOSE是WM_SYSCOMMAND消息的wParam值之一。

  

当用户从中选择命令时,窗口会收到此消息   窗口菜单(以前称为系统或控制菜单)或何时   用户选择最大化按钮,最小化按钮,恢复按钮,   或关闭按钮。

WM_CLOSE本身就是一条消息。

  

作为窗口或应用程序终止的信号发送。

因此,当窗口接收到参数值为SC_CLOSE的WM_SYSCOMMAND时,则可以关闭窗口(发送WM_CLOSE消息)。

UPDATE(如果你想让用户优雅地关闭窗口): 在破坏窗口之前,应用程序可以通过处理WM_CLOSE消息并仅在用户确认选择时调用DestroyWindow函数来提示用户进行确认。

顺便说一句,如果您使用C#,您可以处理FormClosing事件并在那里工作。如果您需要取消关闭,那么只需为事件参数设置e.Cancel = true