1

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

4

2 回答 2

4

WM_CLOSE每当请求以任何方式关闭窗口时,都会作为窗口消息发送。

SC_CLOSEWM_SYSCOMMAND当用户按下关闭按钮(或从窗口的控制菜单中选择关闭)时,作为消息的参数发送。

你听哪一个取决于你试图拦截/处理的动作。

于 2012-04-11T07:48:48.733 回答
1

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

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

WM_CLOSE本身就是一条消息。

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

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

更新(如果您想让用户优雅地关闭窗口):应用程序可以在销毁窗口之前提示用户确认,方法是处理 WM_CLOSE 消息并仅在用户确认选择时调用 DestroyWindow 函数。

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

于 2012-04-11T07:49:14.473 回答