当相关点被另一个窗口遮挡时,PTVISIBLE始终返回true

时间:2019-03-07 23:44:28

标签: windows

我正在尝试确定鼠标光标是否在特定窗口上方以及在该特定点是否还有其他窗口遮挡该窗口。相关点通过鼠标钩在屏幕坐标中获得。然后,我使用ptVisible函数来确定这一点。我的代码是:

DC := GetDC(wnd);
try
  Result := PtVisible(DC, pt.X, pt.Y);
finally
  ReleaseDC(wnd, DC);
end;

即使没有任何东西遮盖wnd句柄表示的窗口,也总是返回false。

我在网络上发现很少使用ptVisible。谁能告诉我我使用不正确吗?

1 个答案:

答案 0 :(得分:0)

您没有正确使用它。在文档页面上,PtVisible()“确定指定的点是否在设备上下文的裁剪区域内。”这与鼠标位置或窗口内像素的位置无关。这具有特定的用途,用于检查该点是否在图形设备上下文的裁剪区域内。

如果要检查鼠标是否在某个窗口内,则可能要尝试检查鼠标坐标是否在GetWindowRect()内。然后要检查是否有任何窗口重叠,您需要先EnumWindows()然后再IntersectRect()