您的位置:首页 > 其它

WindowFromPoint()与ChildWindowFromPoint()的区别

2015-04-07 09:54 751 查看
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");
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: