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:

/* 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