ScreenToClient (user32)
Last changed: sh0ber@Stack Overflow-24.127.131.201

.
Summary
The ScreenToClient function converts the screen coordinates of a specified point on the screen to client-area coordinates.

C# Signature:

[DllImport("user32.dll")]
static extern bool ScreenToClient(IntPtr hWnd, ref POINT lpPoint);

VB Signature:

    <DllImport("user32.dll", SetLastError:=True)> _
    Private Shared Function ScreenToClient(ByVal hWnd As IntPtr, ByRef lpPoint As POINT) As Boolean
    '
    End Function

User-Defined Types:

POINT

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

Context
using ScreenToClient to convert to a managed Rectangle. hWnd is assumed to be the handle to the form/control you need coords for

RECT rct;
POINT topLeft;
POINT bottomRight;

/** Getting a windows position **/
GetWindowRect(hWnd, out rct);

/** assign RECT coods to POINT **/
topLeft.X = rct.Left;
topLeft.Y = rct.Top;
bottomRight.X = rct.Right;
bottomRight.Y = rct.Bottom;

/** this takes the POINT, which is using screen coords (0,0 in top left screen) and converts them into coords inside specified window (0,0 from  top left of hWnd) **/
ScreenToClient(hWnd, ref topLeft);
ScreenToClient(hWnd, ref bottomRight);

int width = topLeft.X + bottomRight.X;
int height = topLeft.Y + bottomRight.Y;

Rectangle R = new Rectangle(topLeft.X, topLeft.Y, width, height);

Alternative Managed API:

Control.PointToClient

Documentation