//----按坐标查找窗口中的子窗口(控件)---------------------------------------------- //描述: 该函数为内部调用. //参数:hwnd:窗口句柄 // pt: 坐标点 //返回:查找到的子窗口(控件)句柄. //------------------------------------------------------------------------------ HWND GetChildWindowFromPoint(HWND hwnd,POINT *pt) { RECT rc; if(NULL!=hwnd) { hwnd =GetWindow(hwnd,GW_CHILD); while(NULL!=hwnd) { if(NULL!=hwnd->Child) { GetChildWindowFromPoint(hwnd->Child,pt); } GetWindowRect(hwnd,&rc); if(PtInRect(&rc,pt)) { return hwnd; } hwnd =GetWindow(hwnd,GW_HWNDNEXT); } } return NULL; }
//----按坐标查找窗口(主窗口或子窗口)---------------------------------------------- //描述: 略. //参数:pt:坐标点 //返回:查找到的窗口句柄. //------------------------------------------------------------------------------ HWND GetWindowFromPoint(POINT *pt) { HWND hwnd; HWND wnd=NULL;; hwnd =GetMainWindowFromPoint(pt); if(hwnd != GetDesktopWindow()) { wnd =GetChildWindowFromPoint(hwnd,pt); if(wnd != NULL) { hwnd =wnd; } } return hwnd; }
COXToolTipInfo* COXToolTipCtrl::FindToolFromPoint(POINT& pt) { ASSERT(m_pParentWnd); CWnd* pWnd = GetChildWindowFromPoint(pt); if (!pWnd /*|| pWnd->GetSafeHwnd() == m_pParentWnd->GetSafeHwnd()*/) return NULL; OXTOOLINFO ti; BOOL bHitTest = HitTest(pWnd->GetSafeHwnd(), pt, &ti); if (bHitTest) return GetToolInfoPtr(CWnd::FromHandle(ti.hwnd), ti.uId); else return NULL; }