From 88e9eb7d0cde8d37a6d5e0bd6f04523807b52433 Mon Sep 17 00:00:00 2001 From: hikari Date: Thu, 9 Jun 2022 17:44:51 +0300 Subject: [PATCH] sys/windows: add functions and constants --- core/sys/windows/gdi32.odin | 11 ++ core/sys/windows/types.odin | 198 +++++++++++++++++++++++++++++++++++ core/sys/windows/user32.odin | 12 +++ 3 files changed, 221 insertions(+) diff --git a/core/sys/windows/gdi32.odin b/core/sys/windows/gdi32.odin index 898766361..d5b32e2a8 100644 --- a/core/sys/windows/gdi32.odin +++ b/core/sys/windows/gdi32.odin @@ -7,6 +7,8 @@ foreign import gdi32 "system:Gdi32.lib" foreign gdi32 { GetStockObject :: proc(i: c_int) -> HGDIOBJ --- SelectObject :: proc(hdc: HDC, h: HGDIOBJ) -> HGDIOBJ --- + DeleteObject :: proc(ho: HGDIOBJ) -> BOOL --- + SetBkColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF --- CreateDIBPatternBrush :: proc(h: HGLOBAL, iUsage: UINT) -> HBRUSH --- @@ -65,6 +67,15 @@ foreign gdi32 { SetDCBrushColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF --- GetDCBrushColor :: proc(hdc: HDC) -> COLORREF --- PatBlt :: proc(hdc: HDC, x, y, w, h: c_int, rop: DWORD) -> BOOL --- + Rectangle :: proc(hdc: HDC, left, top, right, bottom: c_int) -> BOOL --- + + CreateFontW :: proc( + cHeight, cWidth, cEscapement, cOrientation, cWeight: c_int, + bItalic, bUnderline, bStrikeOut, iCharSet, iOutPrecision: DWORD, + iClipPrecision, iQuality, iPitchAndFamily: DWORD, + pszFaceName: LPCWSTR, + ) -> HFONT --- + TextOutW :: proc(hdc: HDC, x, y: c_int, lpString: LPCWSTR, c: c_int) -> BOOL --- } RGB :: #force_inline proc "contextless" (r, g, b: u8) -> COLORREF { diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index de4253f91..b84af7a64 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -35,6 +35,7 @@ HGLOBAL :: distinct HANDLE HHOOK :: distinct HANDLE HKEY :: distinct HANDLE HDESK :: distinct HANDLE +HFONT :: distinct HANDLE BOOL :: distinct b32 BYTE :: distinct u8 BOOLEAN :: distinct b8 @@ -455,6 +456,201 @@ BROADCAST_QUERY_DENY :: 0x424D5144 HWND_BROADCAST :: HWND(uintptr(0xffff)) HWND_MESSAGE :: HWND(~uintptr(0) - 2) // -3 +// Color Types +CTLCOLOR_MSGBOX :: 0 +CTLCOLOR_EDIT :: 1 +CTLCOLOR_LISTBOX :: 2 +CTLCOLOR_BTN :: 3 +CTLCOLOR_DLG :: 4 +CTLCOLOR_SCROLLBAR :: 5 +CTLCOLOR_STATIC :: 6 +CTLCOLOR_MAX :: 7 + +COLOR_SCROLLBAR :: 0 +COLOR_BACKGROUND :: 1 +COLOR_ACTIVECAPTION :: 2 +COLOR_INACTIVECAPTION :: 3 +COLOR_MENU :: 4 +COLOR_WINDOW :: 5 +COLOR_WINDOWFRAME :: 6 +COLOR_MENUTEXT :: 7 +COLOR_WINDOWTEXT :: 8 +COLOR_CAPTIONTEXT :: 9 +COLOR_ACTIVEBORDER :: 10 +COLOR_INACTIVEBORDER :: 11 +COLOR_APPWORKSPACE :: 12 +COLOR_HIGHLIGHT :: 13 +COLOR_HIGHLIGHTTEXT :: 14 +COLOR_BTNFACE :: 15 +COLOR_BTNSHADOW :: 16 +COLOR_GRAYTEXT :: 17 +COLOR_BTNTEXT :: 18 +COLOR_INACTIVECAPTIONTEXT :: 19 +COLOR_BTNHIGHLIGHT :: 20 + +COLOR_3DDKSHADOW :: 21 +COLOR_3DLIGHT :: 22 +COLOR_INFOTEXT :: 23 +COLOR_INFOBK :: 24 +COLOR_HOTLIGHT :: 26 +COLOR_GRADIENTACTIVECAPTION :: 27 +COLOR_GRADIENTINACTIVECAPTION :: 28 +COLOR_MENUHILIGHT :: 29 +COLOR_MENUBAR :: 30 + +COLOR_DESKTOP :: COLOR_BACKGROUND +COLOR_3DFACE :: COLOR_BTNFACE +COLOR_3DSHADOW :: COLOR_BTNSHADOW +COLOR_3DHIGHLIGHT :: COLOR_BTNHIGHLIGHT +COLOR_3DHILIGHT :: COLOR_BTNHIGHLIGHT +COLOR_BTNHILIGHT :: COLOR_BTNHIGHLIGHT + +// Combo Box Notification Codes +CBN_ERRSPACE :: -1 +CBN_SELCHANGE :: 1 +CBN_DBLCLK :: 2 +CBN_SETFOCUS :: 3 +CBN_KILLFOCUS :: 4 +CBN_EDITCHANGE :: 5 +CBN_EDITUPDATE :: 6 +CBN_DROPDOWN :: 7 +CBN_CLOSEUP :: 8 +CBN_SELENDOK :: 9 +CBN_SELENDCANCEL :: 10 + +// Combo Box styles +CBS_SIMPLE :: 0x0001 +CBS_DROPDOWN :: 0x0002 +CBS_DROPDOWNLIST :: 0x0003 +CBS_OWNERDRAWFIXED :: 0x0010 +CBS_OWNERDRAWVARIABLE :: 0x0020 +CBS_AUTOHSCROLL :: 0x0040 +CBS_OEMCONVERT :: 0x0080 +CBS_SORT :: 0x0100 +CBS_HASSTRINGS :: 0x0200 +CBS_NOINTEGRALHEIGHT :: 0x0400 +CBS_DISABLENOSCROLL :: 0x0800 +CBS_UPPERCASE :: 0x2000 +CBS_LOWERCASE :: 0x4000 + +// User Button Notification Codes +BN_CLICKED :: 0 +BN_PAINT :: 1 +BN_HILITE :: 2 +BN_UNHILITE :: 3 +BN_DISABLE :: 4 +BN_DOUBLECLICKED :: 5 +BN_PUSHED :: BN_HILITE +BN_UNPUSHED :: BN_UNHILITE +BN_DBLCLK :: BN_DOUBLECLICKED +BN_SETFOCUS :: 6 +BN_KILLFOCUS :: 7 + +// Button Control Styles +BS_PUSHBUTTON :: 0x00000000 +BS_DEFPUSHBUTTON :: 0x00000001 +BS_CHECKBOX :: 0x00000002 +BS_AUTOCHECKBOX :: 0x00000003 +BS_RADIOBUTTON :: 0x00000004 +BS_3STATE :: 0x00000005 +BS_AUTO3STATE :: 0x00000006 +BS_GROUPBOX :: 0x00000007 +BS_USERBUTTON :: 0x00000008 +BS_AUTORADIOBUTTON :: 0x00000009 +BS_PUSHBOX :: 0x0000000A +BS_OWNERDRAW :: 0x0000000B +BS_TYPEMASK :: 0x0000000F +BS_LEFTTEXT :: 0x00000020 +BS_TEXT :: 0x00000000 +BS_ICON :: 0x00000040 +BS_BITMAP :: 0x00000080 +BS_LEFT :: 0x00000100 +BS_RIGHT :: 0x00000200 +BS_CENTER :: 0x00000300 +BS_TOP :: 0x00000400 +BS_BOTTOM :: 0x00000800 +BS_VCENTER :: 0x00000C00 +BS_PUSHLIKE :: 0x00001000 +BS_MULTILINE :: 0x00002000 +BS_NOTIFY :: 0x00004000 +BS_FLAT :: 0x00008000 +BS_RIGHTBUTTON :: BS_LEFTTEXT + +// Button Control Messages +BST_UNCHECKED :: 0x0000 +BST_CHECKED :: 0x0001 +BST_INDETERMINATE :: 0x0002 +BST_PUSHED :: 0x0004 +BST_FOCUS :: 0x0008 + +// Static Control Constants +SS_LEFT :: 0x00000000 +SS_CENTER :: 0x00000001 +SS_RIGHT :: 0x00000002 +SS_ICON :: 0x00000003 +SS_BLACKRECT :: 0x00000004 +SS_GRAYRECT :: 0x00000005 +SS_WHITERECT :: 0x00000006 +SS_BLACKFRAME :: 0x00000007 +SS_GRAYFRAME :: 0x00000008 +SS_WHITEFRAME :: 0x00000009 +SS_USERITEM :: 0x0000000A +SS_SIMPLE :: 0x0000000B +SS_LEFTNOWORDWRAP :: 0x0000000C +SS_OWNERDRAW :: 0x0000000D +SS_BITMAP :: 0x0000000E +SS_ENHMETAFILE :: 0x0000000F +SS_ETCHEDHORZ :: 0x00000010 +SS_ETCHEDVERT :: 0x00000011 +SS_ETCHEDFRAME :: 0x00000012 +SS_TYPEMASK :: 0x0000001F +SS_REALSIZECONTROL :: 0x00000040 +SS_NOPREFIX :: 0x00000080 +SS_NOTIFY :: 0x00000100 +SS_CENTERIMAGE :: 0x00000200 +SS_RIGHTJUST :: 0x00000400 +SS_REALSIZEIMAGE :: 0x00000800 +SS_SUNKEN :: 0x00001000 +SS_EDITCONTROL :: 0x00002000 +SS_ENDELLIPSIS :: 0x00004000 +SS_PATHELLIPSIS :: 0x00008000 +SS_WORDELLIPSIS :: 0x0000C000 +SS_ELLIPSISMASK :: 0x0000C000 + +// Edit Control Styles +ES_LEFT :: 0x0000 +ES_CENTER :: 0x0001 +ES_RIGHT :: 0x0002 +ES_MULTILINE :: 0x0004 +ES_UPPERCASE :: 0x0008 +ES_LOWERCASE :: 0x0010 +ES_PASSWORD :: 0x0020 +ES_AUTOVSCROLL :: 0x0040 +ES_AUTOHSCROLL :: 0x0080 +ES_NOHIDESEL :: 0x0100 +ES_OEMCONVERT :: 0x0400 +ES_READONLY :: 0x0800 +ES_WANTRETURN :: 0x1000 +ES_NUMBER :: 0x2000 + +// Font Weights +FW_DONTCARE :: 0 +FW_THIN :: 100 +FW_EXTRALIGHT :: 200 +FW_LIGHT :: 300 +FW_NORMAL :: 400 +FW_MEDIUM :: 500 +FW_SEMIBOLD :: 600 +FW_BOLD :: 700 +FW_EXTRABOLD :: 800 +FW_HEAVY :: 900 + +FW_ULTRALIGHT :: FW_EXTRALIGHT +FW_REGULAR :: FW_NORMAL +FW_DEMIBOLD :: FW_SEMIBOLD +FW_ULTRABOLD :: FW_EXTRABOLD +FW_BLACK :: FW_HEAVY + PTIMERAPCROUTINE :: #type proc "stdcall" (lpArgToCompletionRoutine: LPVOID, dwTimerLowValue, dwTimerHighValue: DWORD) TIMERPROC :: #type proc "stdcall" (HWND, UINT, UINT_PTR, DWORD) @@ -544,6 +740,8 @@ MSG :: struct { pt: POINT, } +LPMSG :: ^MSG + PAINTSTRUCT :: struct { hdc: HDC, fErase: BOOL, diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin index d5baacc91..9fe64a92c 100644 --- a/core/sys/windows/user32.odin +++ b/core/sys/windows/user32.odin @@ -161,6 +161,18 @@ foreign user32 { uTimeout: UINT, lpdwResult: PDWORD_PTR, ) -> LRESULT --- + + GetSysColor :: proc(nIndex: c_int) -> DWORD --- + GetSysColorBrush :: proc(nIndex: c_int) -> HBRUSH --- + SetSysColors :: proc(cElements: c_int, lpaElements: ^INT, lpaRgbValues: ^COLORREF) -> BOOL --- + MessageBeep :: proc(uType: UINT) -> BOOL --- + + IsDialogMessageW :: proc(hDlg: HWND, lpMsg: LPMSG) -> BOOL --- + GetWindowTextLengthW :: proc(hWnd: HWND) -> c_int --- + GetWindowTextW :: proc(hWnd: HWND, lpString: LPWSTR, nMaxCount: c_int) -> c_int --- + SetWindowTextW :: proc(hWnd: HWND, lpString: LPCWSTR) -> BOOL --- + CallWindowProcW :: proc(lpPrevWndFunc: WNDPROC, hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT --- + EnableWindow :: proc(hWnd: HWND, bEnable: BOOL) -> BOOL --- } CreateWindowW :: #force_inline proc "stdcall" (