出于某种原因,我需要检测用户何时实际单击了 X 按钮。我到目前为止是这样的:
protected override void WndProc(ref Message m)
{
if (m.Msg == (int)0xa1) //WM_NCLBUTTONDOWN
{
Point p = new Point((int)m.LParam);
p = this.PointToClient(p);
if (p.X > 680)
{
//do what I need to do...
}
}
base.WndProc(ref m);
}
基本上,我会注意“WM_NCLBUTTONDOWN”消息,即鼠标单击窗口的非客户区。然后,我从 LParam 获取 X 和 Y 坐标,最后将其转换为屏幕坐标。所以在这一点上,我知道用户点击了非客户区,我知道表单上的位置。
我的问题是,如何判断这些坐标是否在 X 按钮上。目前,我正在对 680 进行硬编码,因为这适用于当前窗口大小(它不是很大),但问题是我使用的是 Windows 7,它的 X 按钮比 XP 大,所以显然硬编码是不可行的选项。此外,我什至没有为 Y 坐标编码,所以如果有人点击窗口的右边缘,也会触发该代码。所以...有人有什么想法吗?