gpt4 book ai didi

c# - 如何判断鼠标是否在顶层窗口上?

转载 作者:太空狗 更新时间:2023-10-29 23:11:09 24 4
gpt4 key购买 nike

如何有效判断鼠标是否在顶层窗口上?

“越过”是指鼠标指针位于顶层窗口的客户端矩形内并且在我的窗口上方鼠标位置处没有其他顶层窗口指针。换句话说,如果用户单击事件将发送到我的顶级窗口(或其子窗口之一)。

我正在使用 Windows 窗体在 C# 中编写代码,但我不介意使用 p/invoke 进行 Win32 调用。

最佳答案

您可以使用 WinAPI 函数 WindowFromPoint .它的 C# 签名是:

[DllImport("user32.dll")]
static extern IntPtr WindowFromPoint(POINT Point);

请注意,此处的POINTSystem.Drawing.Point 不同,但PInvoke 提供了a declaration for POINT that includes an implicit conversion between the two。 .

如果您还不知道鼠标光标的位置,GetCursorPos找到它:

[DllImport("user32.dll")]
static extern bool GetCursorPos(out POINT lpPoint);

但是,WinAPI 将很多东西称为“窗口”:窗口内的控件也是“窗口”。因此,您可能无法获得直观意义上的顶级窗口(您可能获得单选按钮、面板或其他内容)。您可以迭代地应用 GetParent在 GUI 层次结构中向上移动的函数:

[DllImport("user32.dll", ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern IntPtr GetParent(IntPtr hWnd);

一旦找到没有父窗口的窗口,该窗口将成为顶级窗口。由于您最初传入的点属于一个未被其他窗口覆盖的控件,因此顶层窗口必然是该点所属的窗口。

关于c# - 如何判断鼠标是否在顶层窗口上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3901183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com