From 929af320da564ff5ec739811920a16999afb6880 Mon Sep 17 00:00:00 2001 From: Fabian Sperber Date: Wed, 27 Jul 2022 22:49:08 +0200 Subject: [PATCH] Add more windows bindings --- core/sys/windows/user32.odin | 32 +++++++++++++++++++++- core/sys/windows/window_messages.odin | 39 +++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin index d0a0d5b0a..90961ba8c 100644 --- a/core/sys/windows/user32.odin +++ b/core/sys/windows/user32.odin @@ -42,6 +42,7 @@ foreign user32 { GetTopWindow :: proc(hWnd: HWND) -> HWND --- SetForegroundWindow :: proc(hWnd: HWND) -> BOOL --- GetForegroundWindow :: proc() -> HWND --- + UpdateWindow :: proc(hWnd: HWND) -> BOOL --- SetActiveWindow :: proc(hWnd: HWND) -> HWND --- GetActiveWindow :: proc() -> HWND --- @@ -95,6 +96,7 @@ foreign user32 { GetSystemMetrics :: proc(nIndex: c_int) -> c_int --- AdjustWindowRect :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL) -> BOOL --- AdjustWindowRectEx :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL, dwExStyle: DWORD) -> BOOL --- + AdjustWindowRectExForDpi :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL, dwExStyle: DWORD, dpi: UINT) -> BOOL --- SystemParametersInfoW :: proc(uiAction, uiParam: UINT, pvParam: PVOID, fWinIni: UINT) -> BOOL --- @@ -137,7 +139,19 @@ foreign user32 { SetCursor :: proc(hCursor: HCURSOR) -> HCURSOR --- EnumDisplaySettingsW :: proc(lpszDeviceName: LPCWSTR, iModeNum: DWORD, lpDevMode: ^DEVMODEW) -> BOOL --- - + + MonitorFromPoint :: proc(pt: POINT, dwFlags: Monitor_From_Flags) -> HMONITOR --- + MonitorFromRect :: proc(lprc: LPRECT, dwFlags: Monitor_From_Flags) -> HMONITOR --- + MonitorFromWindow :: proc(hwnd: HWND, dwFlags: Monitor_From_Flags) -> HMONITOR --- + EnumDisplayMonitors :: proc(hdc: HDC, lprcClip: LPRECT, lpfnEnum: Monitor_Enum_Proc, dwData: LPARAM) -> BOOL --- + + SetThreadDpiAwarenessContext :: proc(dpiContext: DPI_AWARENESS_CONTEXT) -> DPI_AWARENESS_CONTEXT --- + GetThreadDpiAwarenessContext :: proc() -> DPI_AWARENESS_CONTEXT --- + GetWindowDpiAwarenessContext :: proc(hwnd: HWND) -> DPI_AWARENESS_CONTEXT --- + GetDpiFromDpiAwarenessContext :: proc(value: DPI_AWARENESS_CONTEXT) -> UINT --- + GetDpiForWindow :: proc(hwnd: HWND) -> UINT --- + SetProcessDpiAwarenessContext :: proc(value: DPI_AWARENESS_CONTEXT) -> BOOL --- + BroadcastSystemMessageW :: proc( flags: DWORD, lpInfo: LPDWORD, @@ -247,3 +261,19 @@ GET_XBUTTON_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> WORD MAKEINTRESOURCEW :: #force_inline proc "contextless" (#any_int i: int) -> LPWSTR { return cast(LPWSTR)uintptr(WORD(i)) } + +Monitor_From_Flags :: enum DWORD { + MONITOR_DEFAULTTONULL = 0x00000000, // Returns NULL + MONITOR_DEFAULTTOPRIMARY = 0x00000001, // Returns a handle to the primary display monitor + MONITOR_DEFAULTTONEAREST = 0x00000002, // Returns a handle to the display monitor that is nearest to the window +} + +Monitor_Enum_Proc :: #type proc "stdcall" (HMONITOR, HDC, LPRECT, LPARAM) -> BOOL + +USER_DEFAULT_SCREEN_DPI :: 96 +DPI_AWARENESS_CONTEXT :: distinct HANDLE +DPI_AWARENESS_CONTEXT_UNAWARE :: DPI_AWARENESS_CONTEXT(~uintptr(0)) // -1 +DPI_AWARENESS_CONTEXT_SYSTEM_AWARE :: DPI_AWARENESS_CONTEXT(~uintptr(1)) // -2 +DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE :: DPI_AWARENESS_CONTEXT(~uintptr(2)) // -3 +DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 :: DPI_AWARENESS_CONTEXT(~uintptr(3)) // -4 +DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED :: DPI_AWARENESS_CONTEXT(~uintptr(4)) // -5 diff --git a/core/sys/windows/window_messages.odin b/core/sys/windows/window_messages.odin index d6b883916..7ce9e545c 100644 --- a/core/sys/windows/window_messages.odin +++ b/core/sys/windows/window_messages.odin @@ -153,6 +153,7 @@ BM_CLICK :: 0x00f5 BM_GETIMAGE :: 0x00f6 BM_SETIMAGE :: 0x00f7 BM_SETDONTCLICK :: 0x00f8 +WM_INPUT_DEVICE_CHANGE :: 0x00fe WM_INPUT :: 0x00ff WM_KEYDOWN :: 0x0100 WM_KEYFIRST :: 0x0100 @@ -165,6 +166,7 @@ WM_SYSCHAR :: 0x0106 WM_SYSDEADCHAR :: 0x0107 WM_UNICHAR :: 0x0109 WM_KEYLAST :: 0x0109 +UNICODE_NOCHAR :: 0xFFFF WM_WNT_CONVERTREQUESTEX :: 0x0109 WM_CONVERTREQUEST :: 0x010a WM_CONVERTRESULT :: 0x010b @@ -279,6 +281,27 @@ WM_ENTERSIZEMOVE :: 0x0231 WM_EXITSIZEMOVE :: 0x0232 WM_DROPFILES :: 0x0233 WM_MDIREFRESHMENU :: 0x0234 +WM_POINTERDEVICECHANGE :: 0x0238 +WM_POINTERDEVICEINRANGE :: 0x0239 +WM_POINTERDEVICEOUTOFRANGE :: 0x023a +WM_TOUCH :: 0x0240 +WM_NCPOINTERUPDATE :: 0x0241 +WM_NCPOINTERDOWN :: 0x0242 +WM_NCPOINTERUP :: 0x0243 +WM_POINTERUPDATE :: 0x0245 +WM_POINTERDOWN :: 0x0246 +WM_POINTERUP :: 0x0247 +WM_POINTERENTER :: 0x0249 +WM_POINTERLEAVE :: 0x024a +WM_POINTERACTIVATE :: 0x024b +WM_POINTERCAPTURECHANGED :: 0x024c +WM_TOUCHHITTESTING :: 0x024d +WM_POINTERWHEEL :: 0x024e +WM_POINTERHWHEEL :: 0x024f +DM_POINTERHITTEST :: 0x0250 +WM_POINTERROUTEDTO :: 0x0251 +WM_POINTERROUTEDAWAY :: 0x0252 +WM_POINTERROUTEDRELEASED :: 0x0253 WM_IME_REPORT :: 0x0280 WM_IME_SETCONTEXT :: 0x0281 WM_IME_NOTIFY :: 0x0282 @@ -295,6 +318,13 @@ WM_NCMOUSEHOVER :: 0x02a0 WM_MOUSEHOVER :: 0x02a1 WM_NCMOUSELEAVE :: 0x02a2 WM_MOUSELEAVE :: 0x02a3 +WM_WTSSESSION_CHANGE :: 0x02b1 +WM_TABLET_FIRST :: 0x02c0 +WM_TABLET_LAST :: 0x02df +WM_DPICHANGED :: 0x02e0 +WM_DPICHANGED_BEFOREPARENT :: 0x02e2 +WM_DPICHANGED_AFTERPARENT :: 0x02e3 +WM_GETDPISCALEDSIZE :: 0x02e4 WM_CUT :: 0x0300 WM_COPY :: 0x0301 WM_PASTE :: 0x0302 @@ -317,6 +347,15 @@ WM_HOTKEY :: 0x0312 WM_PRINT :: 0x0317 WM_PRINTCLIENT :: 0x0318 WM_APPCOMMAND :: 0x0319 +WM_THEMECHANGED :: 0x031A +WM_CLIPBOARDUPDATE :: 0x031D +WM_DWMCOMPOSITIONCHANGED :: 0x031E +WM_DWMNCRENDERINGCHANGED :: 0x031F +WM_DWMCOLORIZATIONCOLORCHANGED:: 0x0320 +WM_DWMWINDOWMAXIMIZEDCHANGE :: 0x0321 +WM_DWMSENDICONICTHUMBNAIL :: 0x0323 +WM_DWMSENDICONICLIVEPREVIEWBITMAP :: 0x0326 +WM_GETTITLEBARINFOEX :: 0x033F WM_HANDHELDFIRST :: 0x0358 WM_HANDHELDLAST :: 0x035f WM_AFXFIRST :: 0x0360