WindowFromPoint

WindowFromPointで、指定されたPOINT構造体の指す位置にあるウィンドウのハンドルを取得できる。

WindowFromPoint 関数 (winuser.h) - Win32 apps | Microsoft Learn

WindowFromPoint.cppにて、

メインとなるウィンドウ表示前に、ウィンドウハンドルを表示。

WM_CREATEで、子ウィンドウとなるボタンのハンドルも表示。

WM_LBUTTONDOWNでは、クリックした位置のスクリーン座標をWindowFromPointに渡して、ウィンドウハンドル取得。

ボタンの場合は、WM_LBUTTONDOWNに来ないので、WM_COMMANDで、ボタンのID(WM_APP + 1)のところに来た時に、GetCursorPosで取得した座標をWindowFromPointに渡して、ウィンドウハンドル取得。

ボタンはこれ
ボタンはこれ

ボタンはこれ。

ウィンドウはこれ
ウィンドウはこれ

ウィンドウはこれ。

ボタンを押した場合はこうなる
ボタンを押した場合はこうなる

ボタンを押した場合はこうなる。

クライアント領域のボタン以外のところを押したらこうなる。
クライアント領域のボタン以外のところを押したらこうなる。

クライアント領域のボタン以外のところを押したらこうなる。

Sample/winapi/WindowFromPoint/WindowFromPoint/src/WindowFromPoint at master · bg1bgst333/Sample · GitHub