サンプルコード [ここをクリックすると内容が表示されます]
コード: 全て選択
void GetRealWindow(HWND *phWnd)
{
POINT ptPoint;
HWND hWndTop = NULL;
HWND hWndChild = NULL;
POINT ptCooChild = {0};
//先得到ptPoint指向的(子)窗口,再通过子窗口得到父窗口的句柄
GetCursorPos(&ptPoint);//得到鼠标的位置
hWndTop = ::WindowFromPoint(ptPoint);//获取鼠标包含指定点的窗口的句柄
ptCooChild = ptPoint;
*phWnd = GetParent(hWndTop); //用来获取最上层的父窗口的句柄
::ScreenToClient(*phWnd, &ptCooChild);//该函数将屏幕的一个坐标转换成客户区(窗口)的坐标
//从最上层的窗口开始外下找,只直到找到最地层的窗口
while (TRUE){
hWndChild = RealChildWindowFromPoint(*phWnd, ptCooChild);
if (hWndChild && (hWndChild != *phWnd))
*phWnd = hWndChild;
else
break;
}
}
書いたコード [ここをクリックすると内容が表示されます]
どなたかRealChildWindowFromPoint()関数に詳しい方いませんか?コード: 全て選択
Dim ptPoint As POINTAPI
Dim phWnd As HWND
Dim hWndTop=NULL As HWND
Dim hWndChild=NULL As HWND
Dim ptCooChild=NULL As POINTAPI
GetCursorPos(ptPoint)
hWndTop=WindowFromPoint(ptPoint.x,ptPoint.y)
ptCooChild=ptPoint
phWnd=GetWindowLong(hWndTop,GWL_HWNDPARENT)
ScreenToClient(phWnd,ptCooChild)
While TRUE
hWndChild=RealChildWindowFromPoint(phWnd,ptCooChild)
If (hWndChild And (hWndChild <> phWnd)) Then
phWnd = hWndChild
Else
Exit While
End If
Wend