Merge pull request #1685 from ftphikari/master

sys/windows: add a couple of procedures and types
This commit is contained in:
Jeroen van Rijn
2022-04-02 12:55:51 +02:00
committed by GitHub
2 changed files with 106 additions and 2 deletions
+80
View File
@@ -30,6 +30,7 @@ HBRUSH :: distinct HANDLE
HGDIOBJ :: distinct HANDLE
HBITMAP :: distinct HANDLE
HGLOBAL :: distinct HANDLE
HHOOK :: distinct HANDLE
BOOL :: distinct b32
BYTE :: distinct u8
BOOLEAN :: distinct b8
@@ -199,6 +200,24 @@ TIMERPROC :: #type proc "stdcall" (HWND, UINT, UINT_PTR, DWORD)
WNDPROC :: #type proc "stdcall" (HWND, UINT, WPARAM, LPARAM) -> LRESULT
HOOKPROC :: #type proc "stdcall" (code: c_int, wParam: WPARAM, lParam: LPARAM) -> LRESULT
CWPRETSTRUCT :: struct {
lResult: LRESULT,
lParam: LPARAM,
wParam: WPARAM,
message: UINT,
hwnd: HWND,
}
KBDLLHOOKSTRUCT :: struct {
vkCode: DWORD,
scanCode: DWORD,
flags: DWORD,
time: DWORD,
dwExtraInfo: ULONG_PTR,
}
WNDCLASSA :: struct {
style: UINT,
lpfnWndProc: WNDPROC,
@@ -688,6 +707,23 @@ MK_MBUTTON :: 0x0010
MK_XBUTTON1 :: 0x0020
MK_XBUTTON2 :: 0x0040
// Value for rolling one detent
WHEEL_DELTA :: 120
// Setting to scroll one page for SPI_GET/SETWHEELSCROLLLINES
WHEEL_PAGESCROLL :: max(UINT)
// XButton values are WORD flags
XBUTTON1 :: 0x0001
XBUTTON2 :: 0x0002
// Were there to be an XBUTTON3, its value would be 0x0004
MAPVK_VK_TO_VSC :: 0
MAPVK_VSC_TO_VK :: 1
MAPVK_VK_TO_CHAR :: 2
MAPVK_VSC_TO_VK_EX :: 3
MAPVK_VK_TO_VSC_EX :: 4
TME_HOVER :: 0x00000001
TME_LEAVE :: 0x00000002
TME_NONCLIENT :: 0x00000010
@@ -698,6 +734,50 @@ HOVER_DEFAULT :: 0xFFFFFFFF
USER_TIMER_MAXIMUM :: 0x7FFFFFFF
USER_TIMER_MINIMUM :: 0x0000000A
// SetWindowsHook() codes
WH_MIN :: -1
WH_MSGFILTER :: -1
WH_JOURNALRECORD :: 0
WH_JOURNALPLAYBACK :: 1
WH_KEYBOARD :: 2
WH_GETMESSAGE :: 3
WH_CALLWNDPROC :: 4
WH_CBT :: 5
WH_SYSMSGFILTER :: 6
WH_MOUSE :: 7
WH_HARDWARE :: 8
WH_DEBUG :: 9
WH_SHELL :: 10
WH_FOREGROUNDIDLE :: 11
WH_CALLWNDPROCRET :: 12
WH_KEYBOARD_LL :: 13
WH_MOUSE_LL :: 14
WH_MAX :: 14
WH_MINHOOK :: WH_MIN
WH_MAXHOOK :: WH_MAX
// Hook Codes
HC_ACTION :: 0
HC_GETNEXT :: 1
HC_SKIP :: 2
HC_NOREMOVE :: 3
HC_NOREM :: HC_NOREMOVE
HC_SYSMODALON :: 4
HC_SYSMODALOFF :: 5
// CBT Hook Codes
HCBT_MOVESIZE :: 0
HCBT_MINMAX :: 1
HCBT_QS :: 2
HCBT_CREATEWND :: 3
HCBT_DESTROYWND :: 4
HCBT_ACTIVATE :: 5
HCBT_CLICKSKIPPED :: 6
HCBT_KEYSKIPPED :: 7
HCBT_SYSCOMMAND :: 8
HCBT_SETFOCUS :: 9
_IDC_APPSTARTING := rawptr(uintptr(32650))
_IDC_ARROW := rawptr(uintptr(32512))
_IDC_CROSS := rawptr(uintptr(32515))
+26 -2
View File
@@ -131,6 +131,14 @@ foreign user32 {
GetKeyState :: proc(nVirtKey: c_int) -> SHORT ---
GetAsyncKeyState :: proc(vKey: c_int) -> SHORT ---
MapVirtualKeyA :: proc(uCode: UINT, uMapType: UINT) -> UINT ---
MapVirtualKeyW :: proc(uCode: UINT, uMapType: UINT) -> UINT ---
SetWindowsHookExA :: proc(idHook: c_int, lpfn: HOOKPROC, hmod: HINSTANCE, dwThreadId: DWORD) -> HHOOK ---
SetWindowsHookExW :: proc(idHook: c_int, lpfn: HOOKPROC, hmod: HINSTANCE, dwThreadId: DWORD) -> HHOOK ---
UnhookWindowsHookEx :: proc(hhk: HHOOK) -> BOOL ---
CallNextHookEx :: proc(hhk: HHOOK, nCode: c_int, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
SetTimer :: proc(hWnd: HWND, nIDEvent: UINT_PTR, uElapse: UINT, lpTimerFunc: TIMERPROC) -> UINT_PTR ---
KillTimer :: proc(hWnd: HWND, uIDEvent: UINT_PTR) -> BOOL ---
@@ -223,6 +231,22 @@ when ODIN_ARCH == .amd64 {
SetWindowLongPtrW :: GetWindowLongW
}
GET_SC_WPARAM :: #force_inline proc(wparam: WPARAM) -> i32 {
return i32(wparam) & 0xFFF0
GET_SC_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> c_int {
return c_int(wParam) & 0xFFF0
}
GET_WHEEL_DELTA_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> c_short {
return cast(c_short)HIWORD(cast(DWORD)wParam)
}
GET_KEYSTATE_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> WORD {
return LOWORD(cast(DWORD)wParam)
}
GET_NCHITTEST_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> c_short {
return cast(c_short)LOWORD(cast(DWORD)wParam)
}
GET_XBUTTON_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> WORD {
return HIWORD(cast(DWORD)wParam)
}