WindowFromPoint()与ChildWindowFromPoint()的区别

1. WindowFromPoint()

函数原型:HWND WindowFromPoint(POINT Point);

函数功能:该函数获得包含指定点的窗口的句柄,Point参数指屏幕坐标

参数:

Point:指定一个被检测的点的POINT结构。

返回值:

返回值为包含该点的窗口的句柄。如果不存在窗口包含这个点,则返回NULL。如果窗口无效或者隐藏,则返回NULL。

通过测试,发现获取部分控件句柄时,返回的都是父窗口的句柄。包括Static Text, GroupBox等等。

例如:

void CTestDlg::OnTest()
{
	POINT pt;
	GetCursorPos(&pt);//获取坐标

	HWND hHandle = ::WindowFromPoint(pt);
	if (hHandle == m_hWnd)
	{
		MessageBox("OK");
	}
}

2. ChildWindowFromPoint()

原型:

HWND ChildWindowFromPoint(

  HWND hWndParent,   //handle to parent window

  POINT Point      //the coordinates(relative to hWndParent) of the point to be checked

);

功能:返回包含这个点的窗口句柄,即使窗口隐藏或者处于无效状态。(需要指定某个容器窗体,返回该容器窗体中包含点的窗口句柄)

返回值:如果点不在父窗口内,则返回NULL,如果点在父窗口内,但不在任何子窗口上,则返回父窗口的句柄。

另外,特别要注意的是:参数Point不是屏幕坐标,而是相对于容器窗口的坐标。

例如:

当鼠标放在m_button上时,返回OK。
void CTestDlg::OnOK()
{
	POINT pt;
	GetCursorPos(&pt);

	BOOL bOK = ::ScreenToClient(m_hWnd, &pt);
	if (!bOK)
	{
		return;
	}

	HWND hHandle = ::ChildWindowFromPoint(m_hWnd, pt);
	if (hHandle == m_button.m_hWnd)
	{
		MessageBox("OK");
	}
}
时间: 2024-10-20 06:54:25

WindowFromPoint()与ChildWindowFromPoint()的区别的相关文章

QQ截图时窗口自动识别的原理(WindowFromPoint, ChildWindowFromPoint, ChildWindowFromPointEx,RealChildWindowFromPoint)

新版的QQ在截图时加入了窗口自动识别的功能,能根据鼠标的位置自动画出下面窗口的轮廓.今天有人在论坛上问起这个问题,下面我们来探讨这个功能的实现原理. 首先我们要明白截图软件的基本原理,截图时实际上是新建了一个全屏窗口,然后将当前桌面的截图画在上面,大部分截图软件,包括QQ都是这么做的.根据鼠标位置获取下层窗口,有好几个类似的API可以用(WindowFromPoint, ChildWindowFromPoint, ChildWindowFromPointEx,RealChildWindowFro

WindowFromPoint   ChildWindowFromPoint   ChildWindowFromPointEx

HWND WindowFromPoint(     POINT Point ); 功能:返回包含点的窗口句柄,Point参数指屏幕坐标. 如果不存在窗口包含这个点,则返回NULL.如果窗口无效或者隐藏,则返回NULL. 备注:WindowFromPoint函数不获取隐藏或禁止的窗口句柄,即使点在该窗口内.应用程序应该使用ChildWindowFromPoint函数进行无限制查询,这样就可以获得静态文本控件的句柄. 实例: void CTestDlg::OnTest()  {     POINT 

句柄和指针的区别和联系

所谓 句柄实际上是一个数据,是一个Long (整长型)的数据.句 柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等.WINDOWS句柄有点象C语言中的文件句柄. 从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人.从数据类型上来看它只是一个16位的无符号整数.应用程序几乎总是

GetCursorPos/WindowFromPoint/SendMessage

GetCursorPos/WindowFromPoint/SendMessage (用API函数向Edit框发送字符) GetCursorPos(mPoint); DTWND:=WindowFromPoint(mPoint); SendMessage(dtwnd, WM_IME_CHAR,ord('A'),1); 以上用到的三个函数介绍:GetCursorPos: 函数功能:该函数检取光标的位置,以屏幕坐标表示. 函数原型:BOOL GetCursorPos(LPPOlNT IpPoint):

句柄与指针的区别(一)

内存句柄与指针的区别 句柄其实就是指针,但是他和指针最大的不同是:给你一个指针,你可以通过这个指针做任何事情,也许是好事,也许是通过这个指针破坏内存,干一些捣乱的事情.这个我想大家都会碰到过,因为乱用指针导致程序崩溃    句柄就没有这个缺点,通过句柄,你只能干一些windows让你干的事情(调用一些api函数等等),没有了指针的坏处. 句柄是一些表的索引也就是指向指针的指针,句柄和指针都是地址,句柄是Windows编程的一个关键性的概念,编写Windows应用程序总是要和各种句柄打交道.   

WindowFromPoint -- 获得包含指定点的窗口的句柄

 WindowFromPoint 函数功能: 该函数获得包含指定点的窗口的句柄. 函数原型: HWND WindowFromPoint(POINT Point): 参数: Point:指定一个被检测的点的POINT结构. 返回值: 返回值为包含该点的窗口的句柄.如果包含指定点的窗口不存在,返回值为NULL.如果该点在静态文本控件之上,返回值是在该静态文本控件的下面的窗口的句柄. 备注: WindowFromPoint函数不获取隐藏或禁止的窗口句柄,即使点在该窗口内.应用程序应该使用Child

GetCursorPos() 与GetMessagePos()的区别

1. GetCursorPos() 函数原型:BOOL GetCursorPos(LPPOINT lpPoint); 函数功能:该函数检取光标的位置, 以屏幕坐标表示. 参      数:IpPoint:POINT结构指针, 该结构接收光标的屏幕坐标. 返 回  值:如果成功, 返回值非零; 如果失败, 返回值为零. 若想获得更多错误信息, 请调用GetLastError函数. 2. GetMessagePos() 函数原型:DWORD GetMessagePos(VOID) 函数功能:该函数返

Nginx 反代参数:$X-Real-Ip和$X-Forwarded-For的区别

## \$X-Real-Ip和$X-Forwarded-For的区别 标签(空格分隔): nignx 负载均衡 client-ip --- ####1.如果只有一层代理,这两个头的值就是一样的####2.多层代理> * X-Forwarded-For:  header包含这样一行        `*X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3*`> * X-Real-Ip:没有相关标准,上面的例子,如果配置了X-Read-IP,可能会有两种情况`// 最

C#中Convert和parse的区别

Convert.ToInt32()与int.Parse()的区别(1)这两个方法的最大不同是它们对null值的处理方法: Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常. 没搞清楚Convert.ToInt32和int.Parse()的细细微区别时千万别乱用,否则可能会产生无法预料的结果,举例来说:假如从url中取一个参数page的值,我们知道这个值是一个int,所以即可以用Convert.ToInt32(Request.Que