2022-09-19 20:05:26 +02:00
|
|
|
|
using System;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using System.Runtime.Versioning;
|
|
|
|
|
|
2022-12-29 15:24:05 +01:00
|
|
|
|
namespace Ryujinx.Ava.UI.Helpers
|
2022-09-19 20:05:26 +02:00
|
|
|
|
{
|
|
|
|
|
[SupportedOSPlatform("windows")]
|
2022-12-15 18:07:31 +01:00
|
|
|
|
internal partial class Win32NativeInterop
|
2022-09-19 20:05:26 +02:00
|
|
|
|
{
|
|
|
|
|
[Flags]
|
|
|
|
|
public enum ClassStyles : uint
|
|
|
|
|
{
|
|
|
|
|
CS_CLASSDC = 0x40,
|
|
|
|
|
CS_OWNDC = 0x20,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Flags]
|
|
|
|
|
public enum WindowStyles : uint
|
|
|
|
|
{
|
|
|
|
|
WS_CHILD = 0x40000000
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public enum Cursors : uint
|
|
|
|
|
{
|
|
|
|
|
IDC_ARROW = 32512
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public enum WindowsMessages : uint
|
|
|
|
|
{
|
|
|
|
|
MOUSEMOVE = 0x0200,
|
|
|
|
|
LBUTTONDOWN = 0x0201,
|
|
|
|
|
LBUTTONUP = 0x0202,
|
|
|
|
|
LBUTTONDBLCLK = 0x0203,
|
|
|
|
|
RBUTTONDOWN = 0x0204,
|
|
|
|
|
RBUTTONUP = 0x0205,
|
|
|
|
|
RBUTTONDBLCLK = 0x0206,
|
|
|
|
|
MBUTTONDOWN = 0x0207,
|
|
|
|
|
MBUTTONUP = 0x0208,
|
|
|
|
|
MBUTTONDBLCLK = 0x0209,
|
|
|
|
|
MOUSEWHEEL = 0x020A,
|
|
|
|
|
XBUTTONDOWN = 0x020B,
|
|
|
|
|
XBUTTONUP = 0x020C,
|
|
|
|
|
XBUTTONDBLCLK = 0x020D,
|
|
|
|
|
MOUSEHWHEEL = 0x020E,
|
|
|
|
|
MOUSELAST = 0x020E
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
|
|
|
|
|
internal delegate IntPtr WindowProc(IntPtr hWnd, WindowsMessages msg, IntPtr wParam, IntPtr lParam);
|
|
|
|
|
|
2022-12-15 18:07:31 +01:00
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
2022-09-19 20:05:26 +02:00
|
|
|
|
public struct WNDCLASSEX
|
|
|
|
|
{
|
|
|
|
|
public int cbSize;
|
|
|
|
|
public ClassStyles style;
|
2022-12-15 18:07:31 +01:00
|
|
|
|
public IntPtr lpfnWndProc; // not WndProc
|
2022-09-19 20:05:26 +02:00
|
|
|
|
public int cbClsExtra;
|
|
|
|
|
public int cbWndExtra;
|
|
|
|
|
public IntPtr hInstance;
|
|
|
|
|
public IntPtr hIcon;
|
|
|
|
|
public IntPtr hCursor;
|
|
|
|
|
public IntPtr hbrBackground;
|
2022-12-15 18:07:31 +01:00
|
|
|
|
public IntPtr lpszMenuName;
|
|
|
|
|
public IntPtr lpszClassName;
|
2022-09-19 20:05:26 +02:00
|
|
|
|
public IntPtr hIconSm;
|
|
|
|
|
|
2022-12-15 18:07:31 +01:00
|
|
|
|
public WNDCLASSEX()
|
2022-09-19 20:05:26 +02:00
|
|
|
|
{
|
2022-12-15 18:07:31 +01:00
|
|
|
|
cbSize = Marshal.SizeOf<WNDCLASSEX>();
|
2022-09-19 20:05:26 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-15 18:07:31 +01:00
|
|
|
|
[LibraryImport("user32.dll", SetLastError = true, EntryPoint = "RegisterClassExW")]
|
|
|
|
|
public static partial ushort RegisterClassEx(ref WNDCLASSEX param);
|
2022-09-19 20:05:26 +02:00
|
|
|
|
|
2022-12-15 18:07:31 +01:00
|
|
|
|
[LibraryImport("user32.dll", SetLastError = true, EntryPoint = "UnregisterClassW")]
|
|
|
|
|
public static partial short UnregisterClass([MarshalAs(UnmanagedType.LPWStr)] string lpClassName, IntPtr instance);
|
2022-09-19 20:05:26 +02:00
|
|
|
|
|
2022-12-15 18:07:31 +01:00
|
|
|
|
[LibraryImport("user32.dll", EntryPoint = "DefWindowProcW")]
|
|
|
|
|
public static partial IntPtr DefWindowProc(IntPtr hWnd, WindowsMessages msg, IntPtr wParam, IntPtr lParam);
|
2022-09-19 20:05:26 +02:00
|
|
|
|
|
2022-12-15 18:07:31 +01:00
|
|
|
|
[LibraryImport("kernel32.dll", EntryPoint = "GetModuleHandleA")]
|
|
|
|
|
public static partial IntPtr GetModuleHandle([MarshalAs(UnmanagedType.LPStr)] string lpModuleName);
|
2022-09-19 20:05:26 +02:00
|
|
|
|
|
2022-12-15 18:07:31 +01:00
|
|
|
|
[LibraryImport("user32.dll", SetLastError = true)]
|
2022-09-19 20:05:26 +02:00
|
|
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
2022-12-15 18:07:31 +01:00
|
|
|
|
public static partial bool DestroyWindow(IntPtr hwnd);
|
2022-09-19 20:05:26 +02:00
|
|
|
|
|
2022-12-15 18:07:31 +01:00
|
|
|
|
[LibraryImport("user32.dll", SetLastError = true, EntryPoint = "LoadCursorA")]
|
|
|
|
|
public static partial IntPtr LoadCursor(IntPtr hInstance, IntPtr lpCursorName);
|
2022-09-19 20:05:26 +02:00
|
|
|
|
|
2022-12-15 18:07:31 +01:00
|
|
|
|
[LibraryImport("user32.dll", SetLastError = true, EntryPoint = "CreateWindowExW")]
|
|
|
|
|
public static partial IntPtr CreateWindowEx(
|
2022-09-19 20:05:26 +02:00
|
|
|
|
uint dwExStyle,
|
2022-12-15 18:07:31 +01:00
|
|
|
|
[MarshalAs(UnmanagedType.LPWStr)] string lpClassName,
|
|
|
|
|
[MarshalAs(UnmanagedType.LPWStr)] string lpWindowName,
|
2022-09-19 20:05:26 +02:00
|
|
|
|
WindowStyles dwStyle,
|
|
|
|
|
int x,
|
|
|
|
|
int y,
|
|
|
|
|
int nWidth,
|
|
|
|
|
int nHeight,
|
|
|
|
|
IntPtr hWndParent,
|
|
|
|
|
IntPtr hMenu,
|
|
|
|
|
IntPtr hInstance,
|
|
|
|
|
IntPtr lpParam);
|
|
|
|
|
}
|
|
|
|
|
}
|