2017-03-06 78 views

回答

6

您可以发送窗体的窗口WM_NCHITTEST消息,将鼠标的屏幕坐标传递给lParam值。如果返回值为HTCLOSE,则鼠标位于关闭按钮上方。

但是,仅仅因为鼠标位于关闭按钮上并不能保证用户实际上点击了按钮。例如,用户可以在按钮上移动鼠标,然后在键盘上输入Alt + F4,而不是(或Alt +空格键,箭头指向Close选项,然后按输入,它调用同样的动作作为Alt + F4)。

无论点击关闭按钮,或者使用键盘快捷键,同样WM_CLOSE消息被发送到窗口(触发窗体的OnCloseQueryOnClose事件),为什么被关闭窗口它不报告

如果您需要区分,您可以让您的窗体处理窗口消息WM_NCLBUTTONDOWN/WM_NCLBUTTONUPWM_SYSCOMMAND窗口消息。单击关闭按钮关闭窗口时,WM_CLOSE前面会有WM_NCLBUTTON...wParam设置为HTCLOSE。当通过键盘快捷键关闭窗口时,WM_CLOSE前面会有WM_SYSCOMMAND,其wParam设置为SC_CLOSE

+0

谢谢你雷米,这是为我工作 –