diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig index 72593b92c7..882e5dbedf 100644 --- a/lib/std/os/windows.zig +++ b/lib/std/os/windows.zig @@ -17,6 +17,7 @@ pub const ntdll = @import("windows/ntdll.zig"); pub const ole32 = @import("windows/ole32.zig"); pub const psapi = @import("windows/psapi.zig"); pub const shell32 = @import("windows/shell32.zig"); +pub const user32 = @import("windows/user32.zig"); pub const ws2_32 = @import("windows/ws2_32.zig"); pub usingnamespace @import("windows/bits.zig"); diff --git a/lib/std/os/windows/bits.zig b/lib/std/os/windows/bits.zig index 16cc6d7441..6d6f3644cc 100644 --- a/lib/std/os/windows/bits.zig +++ b/lib/std/os/windows/bits.zig @@ -27,8 +27,13 @@ pub const UCHAR = u8; pub const FLOAT = f32; pub const HANDLE = *c_void; pub const HCRYPTPROV = ULONG_PTR; +pub const HBRUSH = *@OpaqueType(); +pub const HCURSOR = *@OpaqueType(); +pub const HICON = *@OpaqueType(); pub const HINSTANCE = *@OpaqueType(); +pub const HMENU = *@OpaqueType(); pub const HMODULE = *@OpaqueType(); +pub const HWND = *@OpaqueType(); pub const FARPROC = *@OpaqueType(); pub const INT = c_int; pub const LPBYTE = *BYTE; @@ -65,6 +70,10 @@ pub const LONGLONG = i64; pub const HLOCAL = HANDLE; pub const LANGID = c_ushort; +pub const WPARAM = usize; +pub const LPARAM = ?*c_void; +pub const LRESULT = ?*c_void; + pub const va_list = *@OpaqueType(); pub const TRUE = 1; diff --git a/lib/std/os/windows/kernel32.zig b/lib/std/os/windows/kernel32.zig index 2e5214eb20..8cdf07c1aa 100644 --- a/lib/std/os/windows/kernel32.zig +++ b/lib/std/os/windows/kernel32.zig @@ -103,7 +103,9 @@ pub extern "kernel32" fn GetFileAttributesW(lpFileName: [*]const WCHAR) callconv pub extern "kernel32" fn GetModuleFileNameW(hModule: ?HMODULE, lpFilename: [*]u16, nSize: DWORD) callconv(.Stdcall) DWORD; -pub extern "kernel32" fn GetModuleHandleW(lpModuleName: ?[*]const WCHAR) callconv(.Stdcall) ?HMODULE; +pub extern "kernel32" fn GetModuleHandleA(lpModuleName: ?LPCSTR) callconv(.Stdcall) ?HMODULE; + +pub extern "kernel32" fn GetModuleHandleW(lpModuleName: ?[*:0]const WCHAR) callconv(.Stdcall) ?HMODULE; pub extern "kernel32" fn GetLastError() callconv(.Stdcall) Win32Error; diff --git a/lib/std/os/windows/user32.zig b/lib/std/os/windows/user32.zig new file mode 100644 index 0000000000..f24f20cfc8 --- /dev/null +++ b/lib/std/os/windows/user32.zig @@ -0,0 +1,37 @@ +usingnamespace @import("bits.zig"); + +pub const WNDPROC = fn (HWND, UINT, WPARAM, LPARAM) callconv(.Stdcall) LRESULT; + +pub const WNDCLASSEXA = extern struct { + cbSize: UINT = @sizeOf(WNDCLASSEXA), + style: UINT, + lpfnWndProc: WNDPROC, + cbClsExtra: i32, + cbWndExtra: i32, + hInstance: HINSTANCE, + hIcon: ?HICON, + hCursor: ?HCURSOR, + hbrBackground: ?HBRUSH, + lpszMenuName: ?LPCSTR, + lpszClassName: LPCSTR, + hIconSm: ?HICON, +}; + +pub extern "user32" fn CreateWindowExA( + dwExStyle: DWORD, + lpClassName: LPCSTR, + lpWindowName: LPCSTR, + dwStyle: DWORD, + X: i32, + Y: i32, + nWidth: i32, + nHeight: i32, + hWindParent: ?HWND, + hMenu: ?HMENU, + hInstance: HINSTANCE, + lpParam: ?LPVOID, +) callconv(.Stdcall) ?HWND; + +pub extern "user32" fn DefWindowProcA(HWND, Msg: UINT, WPARAM, LPARAM) callconv(.Stdcall) LRESULT; + +pub extern "user32" fn RegisterClassExA(*const WNDCLASSEXA) callconv(.Stdcall) c_ushort;