| File: Windows\Win32\Foundation\Interop.PARAM.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms.Primitives\src\System.Windows.Forms.Primitives.csproj (System.Windows.Forms.Primitives) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Drawing; namespace Windows.Win32.Foundation; /// <summary> /// Helpers for creating W/LPARAM arguments for messages. /// </summary> internal static class PARAM { public static nint FromLowHigh(int low, int high) => ToInt(low, high); public static nint FromLowHighUnsigned(int low, int high) // Convert the int to an uint before converting it to a pointer type, // which ensures the high DWORD being zero for 64-bit pointers. // This corresponds to the logic of the MAKELPARAM/MAKEWPARAM/MAKELRESULT // macros. => (nint)(uint)ToInt(low, high); public static int ToInt(int low, int high) => (high << 16) | (low & 0xffff); public static int HIWORD(int n) => (n >> 16) & 0xffff; public static int LOWORD(int n) => n & 0xffff; public static int LOWORD(nint n) => LOWORD((int)n); public static int HIWORD(nint n) => HIWORD((int)n); public static int SignedHIWORD(nint n) => SignedHIWORD((int)n); public static int SignedLOWORD(nint n) => SignedLOWORD(unchecked((int)n)); public static int SignedHIWORD(int n) => (short)HIWORD(n); public static int SignedLOWORD(int n) => (short)LOWORD(n); public static nint FromBool(bool value) => (nint)(BOOL)(value); /// <summary> /// Hard casts to <see langword="int" /> without bounds checks. /// </summary> public static int ToInt(nint param) => (int)param; /// <summary> /// Hard casts to <see langword="uint" /> without bounds checks. /// </summary> public static uint ToUInt(nint param) => (uint)param; /// <summary> /// Packs a <see cref="Point"/> into a PARAM. /// </summary> public static nint FromPoint(Point point) => FromLowHigh(point.X, point.Y); /// <summary> /// Unpacks a <see cref="Point"/> from a PARAM. /// </summary> public static Point ToPoint(nint param) => new(SignedLOWORD(param), SignedHIWORD(param)); }