当前位置:C++技术网 > 资讯 > 如何获取光标屏幕坐标下的窗口

如何获取光标屏幕坐标下的窗口

更新时间:2015-06-25 17:26:23浏览次数:1+次

    要获取屏幕坐标下的窗口,可以使用WindowFromPoint函数实现。
    函数原型:HWND WindowFromPoint(POINT Point);
    此函数只有一个参数,POINT结构体。此结构体只有两个成员,LONG x,LONG y。分别存放屏幕坐标的x,y。返回的值为这个坐标下的窗口的句柄。如果没有应用窗口(桌面窗口),则返回的值为NULL。如果坐标下为控件,则返回的是控件的句柄。一般在鼠标移动时,跟踪鼠标光标的坐标得到坐标点。这时响应WM_MOUSEMOVE即可,其他与坐标有关的都可以获得,看具体应用。
    代码使用如下:

HWND hWnd = WindowFromPoint(Point);// - Point有消息响应函数传入
TCHAR tcTitle[256]=_T("");
GetWindowText(hWnd,tcTitle,256);// - 获取坐标下窗口的标题

     以上是API版本的,如果在MFC中,在响应鼠标移动的消息函数中,代码如下:

CWnd* pWnd = WindowFromPoint(point);
CString strTitle;
pWnd->GetWindowText(strTitle);
     WindowFromPoint的传入的点坐标需要注意,有的是客户区的有的是屏幕坐标,这要看使用的环境,这点需要注意。还有,鼠标脱离自己响应鼠标移动的窗口后,就无法响应了。
    下面两个函数则是另外一个应用场景,函数都蛮简单,参数也少。如果感兴趣,可以查阅MSDN,也很容易理解。

    ChildWindowFromPoint 和 ChildWindowFromPointEx :
    获取父窗口客户区中特定点的所在的子窗口的句柄。后一个函数可以忽略不可见的、除能的、透明的子窗口,而前一个做不到。具体的使用,参考MSDN。