WindowFromPoint和ChildWindowFromPoint函数的使用

HWND WindowFromPoint(
    POINT Point
);

功能:返回包含点的窗口句柄,Point参数指屏幕坐标。

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

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

实例:

View Code
 1 void CTestDlg::OnTest() 
 2 {
 3     POINT pt;
 4     GetCursorPos(&pt);//获取坐标
 5 
 6     HWND hHandle = ::WindowFromPoint(pt);
 7 
 8         if (hHandle == m_hWnd)
 9     {
10         MessageBox("OK");
11     }
12 }

 

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。

View Code
 1 void CTestDlg::OnOK() 
 2 {
 3     POINT pt;
 4     GetCursorPos(&pt);
 5 
 6     BOOL bOK = ::ScreenToClient(m_hWnd, &pt);
 7     if (!bOK)
 8     {
 9         return;
10     }
11 
12     HWND hHandle = ::ChildWindowFromPoint(m_hWnd, pt);
13     if (hHandle == m_button.m_hWnd)
14     {
15         MessageBox("OK");
16     }
17 }

posted on 2012-06-04 14:00  ActiveChange  阅读(9418)  评论(0编辑  收藏  举报

导航