ScreenToClient/ClientToScreen baut irgendwie Mist.
Ich übergebe das MainWindow und er rechnet mit dem ersten Child... bei calc.exe zumindest.
Habe mit jetzt eigene Funktionen geschrieben. Geht wunderbar.
Delphi-Quellcode:
procedure ScreenToClient2(wnd: HWND; var pt: TPoint);
var
r: TRect;
begin
if GetWindowRect(wnd, r) then
begin
pt.X := pt.X - r.Left;
pt.Y := pt.Y - r.Top;
end;
end;
procedure ClientToScreen2(wnd: HWND; var pt: TPoint);
var
r: TRect;
begin
if GetWindowRect(wnd, r) then
begin
pt.X := pt.X + r.Left;
pt.Y := pt.Y + r.Top;
end;
end;
function WindowFromRelativePoint(wnd: HWND; pt: TPoint): HWND;
begin
ClientToScreen2(wnd,pt);
result := WindowFromPoint(pt);
end;