aboutsummaryrefslogtreecommitdiff
path: root/core/sys
diff options
context:
space:
mode:
authorHolger Lindner <mole.coding@googlemail.com>2022-03-22 16:36:50 +0100
committerHolger Lindner <mole.coding@googlemail.com>2022-03-22 16:36:50 +0100
commit193822b45da0a3fab58edfa69fdb1f74ca389c8e (patch)
tree6790572dddace63bf918c1b49c8f9b3b2cea9922 /core/sys
parent43640a8b5989909386cd0492d36ca2daa42abe50 (diff)
parente48c0eee74b477d64d4c759f800906b95a6fc8f3 (diff)
Merge remote-tracking branch 'ftphikari/master'
Diffstat (limited to 'core/sys')
-rw-r--r--core/sys/windows/types.odin291
-rw-r--r--core/sys/windows/user32.odin326
2 files changed, 346 insertions, 271 deletions
diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin
index 1e6645f0d..23c74d1ed 100644
--- a/core/sys/windows/types.odin
+++ b/core/sys/windows/types.odin
@@ -21,6 +21,7 @@ HINSTANCE :: HANDLE
HMODULE :: distinct HINSTANCE
HRESULT :: distinct LONG
HWND :: distinct HANDLE
+HDC :: distinct HANDLE
HMONITOR :: distinct HANDLE
HICON :: distinct HANDLE
HCURSOR :: distinct HANDLE
@@ -41,12 +42,12 @@ SIZE_T :: uint
PSIZE_T :: ^SIZE_T
WORD :: u16
CHAR :: c_char
-UINT_PTR :: uint
ULONG_PTR :: uint
PULONG_PTR :: ^ULONG_PTR
LPULONG_PTR :: ^ULONG_PTR
DWORD_PTR :: ULONG_PTR
LONG_PTR :: int
+UINT_PTR :: uintptr
ULONG :: c_ulong
UCHAR :: BYTE
NTSTATUS :: c.long
@@ -186,6 +187,82 @@ GetFileExInfoStandard: GET_FILEEX_INFO_LEVELS : 0
GetFileExMaxInfoLevel: GET_FILEEX_INFO_LEVELS : 1
+WNDPROC :: #type proc "stdcall" (HWND, UINT, WPARAM, LPARAM) -> LRESULT
+
+WNDCLASSA :: struct {
+ style: UINT,
+ lpfnWndProc: WNDPROC,
+ cbClsExtra: c_int,
+ cbWndExtra: c_int,
+ hInstance: HINSTANCE,
+ hIcon: HICON,
+ hCursor: HCURSOR,
+ hbrBackground: HBRUSH,
+ lpszMenuName: LPCSTR,
+ lpszClassName: LPCSTR,
+}
+
+WNDCLASSW :: struct {
+ style: UINT,
+ lpfnWndProc: WNDPROC,
+ cbClsExtra: c_int,
+ cbWndExtra: c_int,
+ hInstance: HINSTANCE,
+ hIcon: HICON,
+ hCursor: HCURSOR,
+ hbrBackground: HBRUSH,
+ lpszMenuName: LPCWSTR,
+ lpszClassName: LPCWSTR,
+}
+
+WNDCLASSEXA :: struct {
+ cbSize: UINT,
+ style: UINT,
+ lpfnWndProc: WNDPROC,
+ cbClsExtra: c_int,
+ cbWndExtra: c_int,
+ hInstance: HINSTANCE,
+ hIcon: HICON,
+ hCursor: HCURSOR,
+ hbrBackground: HBRUSH,
+ lpszMenuName: LPCSTR,
+ lpszClassName: LPCSTR,
+ hIconSm: HICON,
+}
+
+WNDCLASSEXW :: struct {
+ cbSize: UINT,
+ style: UINT,
+ lpfnWndProc: WNDPROC,
+ cbClsExtra: c_int,
+ cbWndExtra: c_int,
+ hInstance: HINSTANCE,
+ hIcon: HICON,
+ hCursor: HCURSOR,
+ hbrBackground: HBRUSH,
+ lpszMenuName: LPCWSTR,
+ lpszClassName: LPCWSTR,
+ hIconSm: HICON,
+}
+
+MSG :: struct {
+ hwnd: HWND,
+ message: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ time: DWORD,
+ pt: POINT,
+}
+
+PAINTSTRUCT :: struct {
+ hdc: HDC,
+ fErase: BOOL,
+ rcPaint: RECT,
+ fRestore: BOOL,
+ fIncUpdate: BOOL,
+ rgbReserved: [32]BYTE,
+}
+
WIN32_FIND_DATAW :: struct {
dwFileAttributes: DWORD,
ftCreationTime: FILETIME,
@@ -199,6 +276,158 @@ WIN32_FIND_DATAW :: struct {
cAlternateFileName: [14]wchar_t,
}
+CREATESTRUCTA :: struct {
+ lpCreateParams: LPVOID,
+ hInstance: HINSTANCE,
+ hMenu: HMENU,
+ hwndParent: HWND,
+ cy: c_int,
+ cx: c_int,
+ y: c_int,
+ x: c_int,
+ style: LONG,
+ lpszName: LPCSTR,
+ lpszClass: LPCSTR,
+ dwExStyle: DWORD,
+}
+
+CREATESTRUCTW:: struct {
+ lpCreateParams: LPVOID,
+ hInstance: HINSTANCE,
+ hMenu: HMENU,
+ hwndParent: HWND,
+ cy: c_int,
+ cx: c_int,
+ y: c_int,
+ x: c_int,
+ style: LONG,
+ lpszName: LPCWSTR,
+ lpszClass: LPCWSTR,
+ dwExStyle: DWORD,
+}
+
+CS_VREDRAW : UINT : 0x0001
+CS_HREDRAW : UINT : 0x0002
+CS_DBLCLKS : UINT : 0x0008
+CS_OWNDC : UINT : 0x0020
+CS_CLASSDC : UINT : 0x0040
+CS_PARENTDC : UINT : 0x0080
+CS_NOCLOSE : UINT : 0x0200
+CS_SAVEBITS : UINT : 0x0800
+CS_BYTEALIGNCLIENT : UINT : 0x1000
+CS_BYTEALIGNWINDOW : UINT : 0x2000
+CS_GLOBALCLASS : UINT : 0x4000
+CS_DROPSHADOW : UINT : 0x0002_0000
+
+GWL_EXSTYLE : c_int : -20
+GWLP_HINSTANCE : c_int : -6
+GWLP_ID : c_int : -12
+GWL_STYLE : c_int : -16
+GWLP_USERDATA : c_int : -21
+GWLP_WNDPROC : c_int : -4
+
+WS_BORDER : UINT : 0x0080_0000
+WS_CAPTION : UINT : 0x00C0_0000
+WS_CHILD : UINT : 0x4000_0000
+WS_CHILDWINDOW : UINT : WS_CHILD
+WS_CLIPCHILDREN : UINT : 0x0200_0000
+WS_CLIPSIBLINGS : UINT : 0x0400_0000
+WS_DISABLED : UINT : 0x0800_0000
+WS_DLGFRAME : UINT : 0x0040_0000
+WS_GROUP : UINT : 0x0002_0000
+WS_HSCROLL : UINT : 0x0010_0000
+WS_ICONIC : UINT : 0x2000_0000
+WS_MAXIMIZE : UINT : 0x0100_0000
+WS_MAXIMIZEBOX : UINT : 0x0001_0000
+WS_MINIMIZE : UINT : 0x2000_0000
+WS_MINIMIZEBOX : UINT : 0x0002_0000
+WS_OVERLAPPED : UINT : 0x0000_0000
+WS_OVERLAPPEDWINDOW : UINT : WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
+WS_POPUP : UINT : 0x8000_0000
+WS_POPUPWINDOW : UINT : WS_POPUP | WS_BORDER | WS_SYSMENU
+WS_SIZEBOX : UINT : 0x0004_0000
+WS_SYSMENU : UINT : 0x0008_0000
+WS_TABSTOP : UINT : 0x0001_0000
+WS_THICKFRAME : UINT : 0x0004_0000
+WS_TILED : UINT : 0x0000_0000
+WS_TILEDWINDOW : UINT : WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE
+WS_VISIBLE : UINT : 0x1000_0000
+WS_VSCROLL : UINT : 0x0020_0000
+
+QS_ALLEVENTS : UINT : QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY
+QS_ALLINPUT : UINT : QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY | QS_SENDMESSAGE
+QS_ALLPOSTMESSAGE : UINT : 0x0100
+QS_HOTKEY : UINT : 0x0080
+QS_INPUT : UINT : QS_MOUSE | QS_KEY | QS_RAWINPUT
+QS_KEY : UINT : 0x0001
+QS_MOUSE : UINT : QS_MOUSEMOVE | QS_MOUSEBUTTON
+QS_MOUSEBUTTON : UINT : 0x0004
+QS_MOUSEMOVE : UINT : 0x0002
+QS_PAINT : UINT : 0x0020
+QS_POSTMESSAGE : UINT : 0x0008
+QS_RAWINPUT : UINT : 0x0400
+QS_SENDMESSAGE : UINT : 0x0040
+QS_TIMER : UINT : 0x0010
+
+PM_NOREMOVE : UINT : 0x0000
+PM_REMOVE : UINT : 0x0001
+PM_NOYIELD : UINT : 0x0002
+
+PM_QS_INPUT : UINT : QS_INPUT << 16
+PM_QS_PAINT : UINT : QS_PAINT << 16
+PM_QS_POSTMESSAGE : UINT : (QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16
+PM_QS_SENDMESSAGE : UINT : QS_SENDMESSAGE << 16
+
+SW_HIDE : c_int : 0
+SW_SHOWNORMAL : c_int : SW_NORMAL
+SW_NORMAL : c_int : 1
+SW_SHOWMINIMIZED : c_int : 2
+SW_SHOWMAXIMIZED : c_int : SW_MAXIMIZE
+SW_MAXIMIZE : c_int : 3
+SW_SHOWNOACTIVATE : c_int : 4
+SW_SHOW : c_int : 5
+SW_MINIMIZE : c_int : 6
+SW_SHOWMINNOACTIVE : c_int : 7
+SW_SHOWNA : c_int : 8
+SW_RESTORE : c_int : 9
+SW_SHOWDEFAULT : c_int : 10
+SW_FORCEMINIMIZE : c_int : 11
+
+CW_USEDEFAULT : c_int : -2147483648
+
+_IDC_APPSTARTING := rawptr(uintptr(32650))
+_IDC_ARROW := rawptr(uintptr(32512))
+_IDC_CROSS := rawptr(uintptr(32515))
+_IDC_HAND := rawptr(uintptr(32649))
+_IDC_HELP := rawptr(uintptr(32651))
+_IDC_IBEAM := rawptr(uintptr(32513))
+_IDC_ICON := rawptr(uintptr(32641))
+_IDC_NO := rawptr(uintptr(32648))
+_IDC_SIZE := rawptr(uintptr(32640))
+_IDC_SIZEALL := rawptr(uintptr(32646))
+_IDC_SIZENESW := rawptr(uintptr(32643))
+_IDC_SIZENS := rawptr(uintptr(32645))
+_IDC_SIZENWSE := rawptr(uintptr(32642))
+_IDC_SIZEWE := rawptr(uintptr(32644))
+_IDC_UPARROW := rawptr(uintptr(32516))
+_IDC_WAIT := rawptr(uintptr(32514))
+IDC_APPSTARTING := cstring(_IDC_APPSTARTING)
+IDC_ARROW := cstring(_IDC_ARROW)
+IDC_CROSS := cstring(_IDC_CROSS)
+IDC_HAND := cstring(_IDC_HAND)
+IDC_HELP := cstring(_IDC_HELP)
+IDC_IBEAM := cstring(_IDC_IBEAM)
+IDC_ICON := cstring(_IDC_ICON)
+IDC_NO := cstring(_IDC_NO)
+IDC_SIZE := cstring(_IDC_SIZE)
+IDC_SIZEALL := cstring(_IDC_SIZEALL)
+IDC_SIZENESW := cstring(_IDC_SIZENESW)
+IDC_SIZENS := cstring(_IDC_SIZENS)
+IDC_SIZENWSE := cstring(_IDC_SIZENWSE)
+IDC_SIZEWE := cstring(_IDC_SIZEWE)
+IDC_UPARROW := cstring(_IDC_UPARROW)
+IDC_WAIT := cstring(_IDC_WAIT)
+
WSA_FLAG_OVERLAPPED: DWORD : 0x01
WSA_FLAG_NO_HANDLE_INHERIT: DWORD : 0x80
@@ -792,17 +1021,17 @@ SYSTEM_INFO :: struct {
// https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_osversioninfoexw
OSVERSIONINFOEXW :: struct {
- dwOSVersionInfoSize: ULONG,
- dwMajorVersion: ULONG,
- dwMinorVersion: ULONG,
- dwBuildNumber: ULONG,
- dwPlatformId: ULONG,
- szCSDVersion: [128]WCHAR,
- wServicePackMajor: USHORT,
- wServicePackMinor: USHORT,
- wSuiteMask: USHORT,
- wProductType: UCHAR,
- wReserved: UCHAR,
+ dwOSVersionInfoSize: ULONG,
+ dwMajorVersion: ULONG,
+ dwMinorVersion: ULONG,
+ dwBuildNumber: ULONG,
+ dwPlatformId: ULONG,
+ szCSDVersion: [128]WCHAR,
+ wServicePackMajor: USHORT,
+ wServicePackMinor: USHORT,
+ wSuiteMask: USHORT,
+ wProductType: UCHAR,
+ wReserved: UCHAR,
}
// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-quota_limits
@@ -845,24 +1074,24 @@ PROFILEINFOW :: struct {
lpDefaultPath: LPWSTR,
lpServerName: LPWSTR,
lpPolicyPath: LPWSTR,
- hProfile: HANDLE,
+ hProfile: HANDLE,
}
// Used in LookupAccountNameW
SID_NAME_USE :: distinct DWORD
SID_TYPE :: enum SID_NAME_USE {
- User = 1,
- Group,
- Domain,
- Alias,
- WellKnownGroup,
- DeletedAccount,
- Invalid,
- Unknown,
- Computer,
- Label,
- LogonSession,
+ User = 1,
+ Group,
+ Domain,
+ Alias,
+ WellKnownGroup,
+ DeletedAccount,
+ Invalid,
+ Unknown,
+ Computer,
+ Label,
+ LogonSession,
}
SECURITY_MAX_SID_SIZE :: 68
@@ -877,7 +1106,7 @@ SID :: struct #packed {
#assert(size_of(SID) == SECURITY_MAX_SID_SIZE)
SID_IDENTIFIER_AUTHORITY :: struct #packed {
- Value: [6]u8,
+ Value: [6]u8,
}
// For NetAPI32
@@ -909,11 +1138,11 @@ USER_INFO_FLAG :: enum DWORD {
Passwd_Cant_Change = 6, // 1 << 6: 0x0040,
Encrypted_Text_Password_Allowed = 7, // 1 << 7: 0x0080,
- Temp_Duplicate_Account = 8, // 1 << 8: 0x0100,
- Normal_Account = 9, // 1 << 9: 0x0200,
- InterDomain_Trust_Account = 11, // 1 << 11: 0x0800,
- Workstation_Trust_Account = 12, // 1 << 12: 0x1000,
- Server_Trust_Account = 13, // 1 << 13: 0x2000,
+ Temp_Duplicate_Account = 8, // 1 << 8: 0x0100,
+ Normal_Account = 9, // 1 << 9: 0x0200,
+ InterDomain_Trust_Account = 11, // 1 << 11: 0x0800,
+ Workstation_Trust_Account = 12, // 1 << 12: 0x1000,
+ Server_Trust_Account = 13, // 1 << 13: 0x2000,
}
USER_INFO_FLAGS :: distinct bit_set[USER_INFO_FLAG]
@@ -1260,4 +1489,4 @@ SYSTEMTIME :: struct {
minute: WORD,
second: WORD,
milliseconds: WORD,
-} \ No newline at end of file
+}
diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin
index 5e374d1e5..588a618b8 100644
--- a/core/sys/windows/user32.odin
+++ b/core/sys/windows/user32.odin
@@ -1,256 +1,85 @@
// +build windows
package sys_windows
-foreign import user32 "system:User32.lib"
-
-WNDPROC :: proc "stdcall" (HWND, UINT, WPARAM, LPARAM) -> LRESULT
-
-CS_VREDRAW : UINT : 0x0001
-CS_HREDRAW : UINT : 0x0002
-CS_DBLCLKS : UINT : 0x0008
-CS_OWNDC : UINT : 0x0020
-CS_CLASSDC : UINT : 0x0040
-CS_PARENTDC : UINT : 0x0080
-CS_NOCLOSE : UINT : 0x0200
-CS_SAVEBITS : UINT : 0x0800
-CS_BYTEALIGNCLIENT : UINT : 0x1000
-CS_BYTEALIGNWINDOW : UINT : 0x2000
-CS_GLOBALCLASS : UINT : 0x4000
-CS_DROPSHADOW : UINT : 0x0002_0000
-
-GWL_EXSTYLE : c_int : -20
-GWLP_HINSTANCE : c_int : -6
-GWLP_ID : c_int : -12
-GWL_STYLE : c_int : -16
-GWLP_USERDATA : c_int : -21
-GWLP_WNDPROC : c_int : -4
-
-WS_BORDER : UINT : 0x0080_0000
-WS_CAPTION : UINT : 0x00C0_0000
-WS_CHILD : UINT : 0x4000_0000
-WS_CHILDWINDOW : UINT : WS_CHILD
-WS_CLIPCHILDREN : UINT : 0x0200_0000
-WS_CLIPSIBLINGS : UINT : 0x0400_0000
-WS_DISABLED : UINT : 0x0800_0000
-WS_DLGFRAME : UINT : 0x0040_0000
-WS_GROUP : UINT : 0x0002_0000
-WS_HSCROLL : UINT : 0x0010_0000
-WS_ICONIC : UINT : 0x2000_0000
-WS_MAXIMIZE : UINT : 0x0100_0000
-WS_MAXIMIZEBOX : UINT : 0x0001_0000
-WS_MINIMIZE : UINT : 0x2000_0000
-WS_MINIMIZEBOX : UINT : 0x0002_0000
-WS_OVERLAPPED : UINT : 0x0000_0000
-WS_OVERLAPPEDWINDOW : UINT : WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
-WS_POPUP : UINT : 0x8000_0000
-WS_POPUPWINDOW : UINT : WS_POPUP | WS_BORDER | WS_SYSMENU
-WS_SIZEBOX : UINT : 0x0004_0000
-WS_SYSMENU : UINT : 0x0008_0000
-WS_TABSTOP : UINT : 0x0001_0000
-WS_THICKFRAME : UINT : 0x0004_0000
-WS_TILED : UINT : 0x0000_0000
-WS_TILEDWINDOW : UINT : WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE
-WS_VISIBLE : UINT : 0x1000_0000
-WS_VSCROLL : UINT : 0x0020_0000
-
-QS_ALLEVENTS : UINT : QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY
-QS_ALLINPUT : UINT : QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY | QS_SENDMESSAGE
-QS_ALLPOSTMESSAGE : UINT : 0x0100
-QS_HOTKEY : UINT : 0x0080
-QS_INPUT : UINT : QS_MOUSE | QS_KEY | QS_RAWINPUT
-QS_KEY : UINT : 0x0001
-QS_MOUSE : UINT : QS_MOUSEMOVE | QS_MOUSEBUTTON
-QS_MOUSEBUTTON : UINT : 0x0004
-QS_MOUSEMOVE : UINT : 0x0002
-QS_PAINT : UINT : 0x0020
-QS_POSTMESSAGE : UINT : 0x0008
-QS_RAWINPUT : UINT : 0x0400
-QS_SENDMESSAGE : UINT : 0x0040
-QS_TIMER : UINT : 0x0010
-
-PM_NOREMOVE : UINT : 0x0000
-PM_REMOVE : UINT : 0x0001
-PM_NOYIELD : UINT : 0x0002
-
-PM_QS_INPUT : UINT : QS_INPUT << 16
-PM_QS_PAINT : UINT : QS_PAINT << 16
-PM_QS_POSTMESSAGE : UINT : (QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16
-PM_QS_SENDMESSAGE : UINT : QS_SENDMESSAGE << 16
-
-SW_HIDE : c_int : 0
-SW_SHOWNORMAL : c_int : SW_NORMAL
-SW_NORMAL : c_int : 1
-SW_SHOWMINIMIZED : c_int : 2
-SW_SHOWMAXIMIZED : c_int : SW_MAXIMIZE
-SW_MAXIMIZE : c_int : 3
-SW_SHOWNOACTIVATE : c_int : 4
-SW_SHOW : c_int : 5
-SW_MINIMIZE : c_int : 6
-SW_SHOWMINNOACTIVE : c_int : 7
-SW_SHOWNA : c_int : 8
-SW_RESTORE : c_int : 9
-SW_SHOWDEFAULT : c_int : 10
-SW_FORCEMINIMIZE : c_int : 11
-
-CW_USEDEFAULT : c_int : -2147483648
-
-WNDCLASSA :: struct {
- style: UINT,
- lpfnWndProc: WNDPROC,
- cbClsExtra: c_int,
- cbWndExtra: c_int,
- hInstance: HINSTANCE,
- hIcon: HICON,
- hCursor: HCURSOR,
- hbrBackground: HBRUSH,
- lpszMenuName: LPCSTR,
- lpszClassName: LPCSTR,
-}
-
-WNDCLASSW :: struct {
- style: UINT,
- lpfnWndProc: WNDPROC,
- cbClsExtra: c_int,
- cbWndExtra: c_int,
- hInstance: HINSTANCE,
- hIcon: HICON,
- hCursor: HCURSOR,
- hbrBackground: HBRUSH,
- lpszMenuName: LPCWSTR,
- lpszClassName: LPCWSTR,
-}
-
-WNDCLASSEXA :: struct {
- cbSize: UINT,
- style: UINT,
- lpfnWndProc: WNDPROC,
- cbClsExtra: c_int,
- cbWndExtra: c_int,
- hInstance: HINSTANCE,
- hIcon: HICON,
- hCursor: HCURSOR,
- hbrBackground: HBRUSH,
- lpszMenuName: LPCSTR,
- lpszClassName: LPCSTR,
- hIconSm: HICON,
-}
-
-WNDCLASSEXW :: struct {
- cbSize: UINT,
- style: UINT,
- lpfnWndProc: WNDPROC,
- cbClsExtra: c_int,
- cbWndExtra: c_int,
- hInstance: HINSTANCE,
- hIcon: HICON,
- hCursor: HCURSOR,
- hbrBackground: HBRUSH,
- lpszMenuName: LPCWSTR,
- lpszClassName: LPCWSTR,
- hIconSm: HICON,
-}
-
-MSG :: struct {
- hwnd: HWND,
- message: UINT,
- wParam: WPARAM,
- lParam: LPARAM,
- time: DWORD,
- pt: POINT,
- lPrivate: DWORD,
-}
-
-CREATESTRUCTA :: struct {
- lpCreateParams: LPVOID,
- hInstance: HINSTANCE,
- hMenu: HMENU,
- hwndParent: HWND,
- cy: c_int,
- cx: c_int,
- y: c_int,
- x: c_int,
- style: LONG,
- lpszName: LPCSTR,
- lpszClass: LPCSTR,
- dwExStyle: DWORD,
-}
-
-CREATESTRUCTW:: struct {
- lpCreateParams: LPVOID,
- hInstance: HINSTANCE,
- hMenu: HMENU,
- hwndParent: HWND,
- cy: c_int,
- cx: c_int,
- y: c_int,
- x: c_int,
- style: LONG,
- lpszName: LPCWSTR,
- lpszClass: LPCWSTR,
- dwExStyle: DWORD,
-}
-
-_IDC_APPSTARTING := rawptr(uintptr(32650))
-_IDC_ARROW := rawptr(uintptr(32512))
-_IDC_CROSS := rawptr(uintptr(32515))
-_IDC_HAND := rawptr(uintptr(32649))
-_IDC_HELP := rawptr(uintptr(32651))
-_IDC_IBEAM := rawptr(uintptr(32513))
-_IDC_ICON := rawptr(uintptr(32641))
-_IDC_NO := rawptr(uintptr(32648))
-_IDC_SIZE := rawptr(uintptr(32640))
-_IDC_SIZEALL := rawptr(uintptr(32646))
-_IDC_SIZENESW := rawptr(uintptr(32643))
-_IDC_SIZENS := rawptr(uintptr(32645))
-_IDC_SIZENWSE := rawptr(uintptr(32642))
-_IDC_SIZEWE := rawptr(uintptr(32644))
-_IDC_UPARROW := rawptr(uintptr(32516))
-_IDC_WAIT := rawptr(uintptr(32514))
-IDC_APPSTARTING := cstring(_IDC_APPSTARTING)
-IDC_ARROW := cstring(_IDC_ARROW)
-IDC_CROSS := cstring(_IDC_CROSS)
-IDC_HAND := cstring(_IDC_HAND)
-IDC_HELP := cstring(_IDC_HELP)
-IDC_IBEAM := cstring(_IDC_IBEAM)
-IDC_ICON := cstring(_IDC_ICON)
-IDC_NO := cstring(_IDC_NO)
-IDC_SIZE := cstring(_IDC_SIZE)
-IDC_SIZEALL := cstring(_IDC_SIZEALL)
-IDC_SIZENESW := cstring(_IDC_SIZENESW)
-IDC_SIZENS := cstring(_IDC_SIZENS)
-IDC_SIZENWSE := cstring(_IDC_SIZENWSE)
-IDC_SIZEWE := cstring(_IDC_SIZEWE)
-IDC_UPARROW := cstring(_IDC_UPARROW)
-IDC_WAIT := cstring(_IDC_WAIT)
+foreign import user32 "system:User32.lib"
@(default_calling_convention="stdcall")
foreign user32 {
-
GetClassInfoA :: proc(hInstance: HINSTANCE, lpClassNAme: LPCSTR, lpWndClass: ^WNDCLASSA) -> BOOL ---
GetClassInfoW :: proc(hInstance: HINSTANCE, lpClassNAme: LPCWSTR, lpWndClass: ^WNDCLASSW) -> BOOL ---
GetClassInfoExA :: proc(hInsatnce: HINSTANCE, lpszClass: LPCSTR, lpwcx: ^WNDCLASSEXA) -> BOOL ---
GetClassInfoExW :: proc(hInsatnce: HINSTANCE, lpszClass: LPCWSTR, lpwcx: ^WNDCLASSEXW) -> BOOL ---
+
GetClassLongPtrA :: proc(hWnd: HWND, nIndex: c_int) -> DWORD ---
GetClassLongPtrW :: proc(hWnd: HWND, nIndex: c_int) -> DWORD ---
+ SetClassLongPtrA :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG_PTR) -> ULONG_PTR ---
+ SetClassLongPtrW :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG_PTR) -> ULONG_PTR ---
+
GetClassNameA :: proc(hWnd: HWND, lpClassName: LPSTR, nMaxCount: c_int) -> c_int ---
GetClassNameW :: proc(hWnd: HWND, lpClassName: LPWSTR, nMaxCount: c_int) -> c_int ---
+
GetWindowLongPtrA :: proc(hWnd: HWND, nIndex: c_int) -> LONG_PTR ---
GetWindowLongPtrW :: proc(hWnd: HWND, nIndex: c_int) -> LONG_PTR ---
- RegisterClassA :: proc(^WNDCLASSA) -> ATOM ---
- RegisterClassW :: proc(^WNDCLASSW) -> ATOM ---
- RegisterClassExA :: proc(^WNDCLASSEXA) -> ATOM ---
- RegisterClassExW :: proc(^WNDCLASSEXW) -> ATOM ---
- SetClassLongPtrA :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG_PTR) -> ULONG_PTR ---
- SetClassLongPtrW :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG_PTR) -> ULONG_PTR ---
SetWindowLongPtrA :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG_PTR) -> LONG_PTR ---
SetWindowLongPtrW :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG_PTR) -> LONG_PTR ---
- UnregisterClassA :: proc(lpClassName: LPCSTR, hInstance: HINSTANCE) -> BOOL ---
- UnregisterClassW :: proc(lpClassName: LPCWSTR, hInstance: HINSTANCE) -> BOOL ---
- CreateWindowA :: proc(lpClassName: LPCSTR, lpWindowName: LPCSTR, dwStyle: DWORD, x: c_int, y: c_int, nWidth: c_int, nHeight: c_int, hWndParent: HWND, hMenu: HMENU, hInstance: HINSTANCE, lpParam: LPARAM) -> HWND ---
- CreateWindowW :: proc(lpClassName: LPCWSTR, lpWindowName: LPCWSTR, dwStyle: DWORD, x: c_int, y: c_int, nWidth: c_int, nHeight: c_int, hWndParent: HWND, hMenu: HMENU, hInstance: HINSTANCE, lpParam: LPARAM) -> HWND ---
- CreateWindowExA :: proc(dwExStyle: DWORD, lpClassName: LPCSTR, lpWindowName: LPCSTR, dwStyle: DWORD, x: c_int, y: c_int, nWidth: c_int, nHeight: c_int, hWndParent: HWND, hMenu: HMENU, hInstance: HINSTANCE, lpParam: LPARAM) -> HWND ---
- CreateWindowExW :: proc(dwExStyle: DWORD, lpClassName: LPCWSTR, lpWindowName: LPCWSTR, dwStyle: DWORD, x: c_int, y: c_int, nWidth: c_int, nHeight: c_int, hWndParent: HWND, hMenu: HMENU, hInstance: HINSTANCE, lpParam: LPARAM) -> HWND ---
+ RegisterClassA :: proc(lpWndClass: ^WNDCLASSA) -> ATOM ---
+ RegisterClassW :: proc(lpWndClass: ^WNDCLASSW) -> ATOM ---
+ RegisterClassExA :: proc(^WNDCLASSEXA) -> ATOM ---
+ RegisterClassExW :: proc(^WNDCLASSEXW) -> ATOM ---
+
+ CreateWindowA :: proc(
+ lpClassName: LPCSTR,
+ lpWindowName: LPCSTR,
+ dwStyle: DWORD,
+ X: c_int,
+ Y: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ hWndParent: HWND,
+ hMenu: HMENU,
+ hInstance: HINSTANCE,
+ lpParam: LPARAM) -> HWND ---
+ CreateWindowW :: proc(
+ lpClassName: LPCWSTR,
+ lpWindowName: LPCWSTR,
+ dwStyle: DWORD,
+ X: c_int,
+ Y: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ hWndParent: HWND,
+ hMenu: HMENU,
+ hInstance: HINSTANCE,
+ lpParam: LPARAM) -> HWND ---
+ CreateWindowExA :: proc(
+ dwExStyle: DWORD,
+ lpClassName: LPCSTR,
+ lpWindowName: LPCSTR,
+ dwStyle: DWORD,
+ X: c_int,
+ Y: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ hWndParent: HWND,
+ hMenu: HMENU,
+ hInstance: HINSTANCE,
+ lpParam: LPVOID,
+ ) -> HWND ---
+ CreateWindowExW :: proc(
+ dwExStyle: DWORD,
+ lpClassName: LPCWSTR,
+ lpWindowName: LPCWSTR,
+ dwStyle: DWORD,
+ X: c_int,
+ Y: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ hWndParent: HWND,
+ hMenu: HMENU,
+ hInstance: HINSTANCE,
+ lpParam: LPVOID,
+ ) -> HWND ---
DestroyWindow :: proc(hWnd: HWND) -> BOOL ---
@@ -258,26 +87,43 @@ foreign user32 {
GetMessageA :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT) -> BOOL ---
GetMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT) -> BOOL ---
- PeekMessageA :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL ---
- PeekMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL ---
TranslateMessage :: proc(lpMsg: ^MSG) -> BOOL ---
DispatchMessageA :: proc(lpMsg: ^MSG) -> LRESULT ---
DispatchMessageW :: proc(lpMsg: ^MSG) -> LRESULT ---
- PostQuitMessage :: proc(nExitCode: c_int) ---
+ PeekMessageA :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL ---
+ PeekMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL ---
PostMessageA :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> BOOL ---
PostMessageW :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> BOOL ---
-
SendMessageA :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
SendMessageW :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
+ PostThreadMessageA :: proc(idThread: DWORD, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> BOOL ---
+ PostThreadMessageW :: proc(idThread: DWORD, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> BOOL ---
+
+ PostQuitMessage :: proc(nExitCode: c_int) ---
+
GetQueueStatus :: proc(flags: UINT) -> DWORD ---
- DefWindowProcA :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParma: LPARAM) -> LRESULT ---
- DefWindowProcW :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParma: LPARAM) -> LRESULT ---
+ DefWindowProcA :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
+ DefWindowProcW :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
+
+ FindWindowExA :: proc(hWndParent: HWND, hWndChildAfter: HWND, lpszClass: LPCSTR, lpszWindow: LPCSTR) -> HWND ---
+ FindWindowExW :: proc(hWndParent: HWND, hWndChildAfter: HWND, lpszClass: LPCWSTR, lpszWindow: LPCWSTR) -> HWND ---
+ LoadIconA :: proc(hInstance: HINSTANCE, lpIconName: LPCSTR) -> HICON ---
+ LoadIconW :: proc(hInstance: HINSTANCE, lpIconName: LPCWSTR) -> HICON ---
LoadCursorA :: proc(hInstance: HINSTANCE, lpCursorName: LPCSTR) -> HCURSOR ---
LoadCursorW :: proc(hInstance: HINSTANCE, lpCursorName: LPCWSTR) -> HCURSOR ---
+
+ GetClientRect :: proc(hWnd: HWND, lpRect: ^RECT) -> BOOL ---
+
+ GetWindowDC :: proc(hWnd: HWND) -> HDC ---
+ GetDC :: proc(hWnd: HWND) -> HDC ---
+ ReleaseDC :: proc(hWnd: HWND, hDC: HDC) -> c_int ---
+
+ BeginPaint :: proc(hWnd: HWND, lpPaint: ^PAINTSTRUCT) -> HDC ---
+ EndPaint :: proc(hWnd: HWND, lpPaint: ^PAINTSTRUCT) -> BOOL ---
}