aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNotKyon <nocannedmeat@gmail.com>2025-02-09 03:11:13 -0800
committerNotKyon <nocannedmeat@gmail.com>2025-02-09 03:11:13 -0800
commita6188eda602a6e2f4ef453f34a0dadc085f9eb3a (patch)
tree3d77e01cc4d1ee86fd4ca2556373456b783b5bb6
parent963663b8e1dd84b4ed82e6db2aca8052f6c861e0 (diff)
Add common Windows control messages, constants, structures, macros, and support.
-rw-r--r--core/sys/windows/comctl32.odin2061
-rw-r--r--core/sys/windows/types.odin463
-rw-r--r--core/sys/windows/window_messages.odin170
3 files changed, 2694 insertions, 0 deletions
diff --git a/core/sys/windows/comctl32.odin b/core/sys/windows/comctl32.odin
index a863c25ee..5b7bfe4b0 100644
--- a/core/sys/windows/comctl32.odin
+++ b/core/sys/windows/comctl32.odin
@@ -32,3 +32,2064 @@ INITCOMMONCONTROLSEX :: struct {
dwSize: DWORD,
dwICC: DWORD,
}
+
+COMCTL32_VERSION :: 6
+HINST_COMMCTRL :: cast(HINSTANCE)(~uintptr(0))
+
+// Common Control Class Names
+WC_HEADER :: "SysHeader32"
+WC_LISTVIEW :: "SysListView32"
+WC_TREEVIEW :: "SysTreeView32"
+WC_COMBOBOXEX :: "ComboBoxEx32"
+WC_TABCONTROL :: "SysTabControl32"
+WC_IPADDRESS :: "SysIPAddress32"
+WC_PAGESCROLLER :: "SysPager"
+WC_NATIVEFONTCTL :: "NativeFontCtl"
+WC_BUTTON :: "Button"
+WC_STATIC :: "Static"
+WC_EDIT :: "Edit"
+WC_LISTBOX :: "ListBox"
+WC_COMBOBOX :: "ComboBox"
+WC_SCROLLBAR :: "ScrollBar"
+WC_LINK :: "SysLink"
+
+TOOLBARCLASSNAME :: "ToolbarWindow32"
+REBARCLASSNAME :: "ReBarWindow32"
+STATUSCLASSNAME :: "msctls_statusbar32"
+
+TOOLTIPS_CLASS :: "tooltips_class32"
+TRACKBAR_CLASS :: "msctls_trackbar32"
+UPDOWN_CLASS :: "msctls_updown32"
+PROGRESS_CLASS :: "msctls_progress32"
+HOTKEY_CLASS :: "msctls_hotkey32"
+ANIMATE_CLASS :: "SysAnimate32"
+MONTHCAL_CLASS :: "SysMonthCal32"
+DATETIMEPICK_CLASS :: "SysDateTimePick32"
+
+// Common Control Notification Code Ranges
+NM_FIRST :: 0
+NM_LAST :: ~DWORD(99 - 1)
+LVN_FIRST :: ~DWORD(100 - 1)
+LVN_LAST :: ~DWORD(199 - 1)
+HDN_FIRST :: ~DWORD(300 - 1)
+HDN_LAST :: ~DWORD(399 - 1)
+TVN_FIRST :: ~DWORD(400 - 1)
+TVN_LAST :: ~DWORD(499 - 1)
+TTN_FIRST :: ~DWORD(520 - 1)
+TTN_LAST :: ~DWORD(549 - 1)
+TCN_FIRST :: ~DWORD(550 - 1)
+TCN_LAST :: ~DWORD(580 - 1)
+CDN_FIRST :: ~DWORD(601 - 1)
+CDN_LAST :: ~DWORD(699 - 1)
+TBN_FIRST :: ~DWORD(700 - 1)
+TBN_LAST :: ~DWORD(720 - 1)
+UDN_FIRST :: ~DWORD(721 - 1)
+UDN_LAST :: ~DWORD(740 - 1)
+MCN_FIRST :: ~DWORD(750 - 1)
+MCN_LAST :: ~DWORD(759 - 1)
+DTN_FIRST :: ~DWORD(760 - 1)
+DTN_LAST :: ~DWORD(799 - 1)
+CBEN_FIRST :: ~DWORD(800 - 1)
+CBEN_LAST :: ~DWORD(830 - 1)
+RBN_FIRST :: ~DWORD(831 - 1)
+RBN_LAST :: ~DWORD(859 - 1)
+IPN_FIRST :: ~DWORD(860 - 1)
+IPN_LAST :: ~DWORD(879 - 1)
+SBN_FIRST :: ~DWORD(880 - 1)
+SBN_LAST :: ~DWORD(899 - 1)
+PGN_FIRST :: ~DWORD(900 - 1)
+PGN_LAST :: ~DWORD(950 - 1)
+WMN_FIRST :: ~DWORD(1000 - 1)
+WMN_LAST :: ~DWORD(1200 - 1)
+BCN_FIRST :: ~DWORD(1250 - 1)
+BCN_LAST :: ~DWORD(1350 - 1)
+
+// Common Control Constants
+MSGF_COMMCTRL_BEGINDRAG :: 0x4200
+MSGF_COMMCTRL_SIZEHEADER :: 0x4201
+MSGF_COMMCTRL_DRAGSELECT :: 0x4202
+MSGF_COMMCTRL_TOOLBARCUST :: 0x4203
+
+// Custom Draw Constants
+CDRF_DODEFAULT :: 0x00
+CDRF_NEWFONT :: 0x02
+CDRF_SKIPDEFAULT :: 0x04
+CDRF_NOTIFYPOSTPAINT :: 0x10
+CDRF_NOTIFYITEMDRAW :: 0x20
+CDRF_NOTIFYSUBITEMDRAW :: 0x20
+CDRF_NOTIFYPOSTERASE :: 0x40
+
+CDDS_PREPAINT :: 0x00001
+CDDS_POSTPAINT :: 0x00002
+CDDS_PREERASE :: 0x00003
+CDDS_POSTERASE :: 0x00004
+CDDS_ITEM :: 0x10000
+CDDS_ITEMPREPAINT :: (CDDS_ITEM | CDDS_PREPAINT)
+CDDS_ITEMPOSTPAINT :: (CDDS_ITEM | CDDS_POSTPAINT)
+CDDS_ITEMPREERASE :: (CDDS_ITEM | CDDS_PREERASE)
+CDDS_ITEMPOSTERASE :: (CDDS_ITEM | CDDS_POSTERASE)
+CDDS_SUBITEM :: 0x20000
+
+CDIS_SELECTED :: 0x001
+CDIS_GRAYED :: 0x002
+CDIS_DISABLED :: 0x004
+CDIS_CHECKED :: 0x008
+CDIS_FOCUS :: 0x010
+CDIS_DEFAULT :: 0x020
+CDIS_HOT :: 0x040
+CDIS_MARKED :: 0x080
+CDIS_INDETERMINATE :: 0x100
+CDIS_SHOWKEYBOARDCUES :: 0x200
+
+// Image Lists
+CLR_NONE :: 0xFFFFFFFF
+CLR_DEFAULT :: 0xFF000000
+
+ILC_MASK :: 0x00000001
+ILC_COLOR :: 0x00000000
+ILC_COLORDDB :: 0x000000FE
+ILC_COLOR4 :: 0x00000004
+ILC_COLOR8 :: 0x00000008
+ILC_COLOR16 :: 0x00000010
+ILC_COLOR24 :: 0x00000018
+ILC_COLOR32 :: 0x00000020
+ILC_PALETTE :: 0x00000800
+ILC_MIRROR :: 0x00002000
+ILC_PERITEMMIRROR :: 0x00008000
+ILC_ORIGINALSIZE :: 0x00010000
+ILC_HIGHQUALITYSCALE :: 0x00020000
+
+ILD_NORMAL :: 0x00000000
+ILD_TRANSPARENT :: 0x00000001
+ILD_MASK :: 0x00000010
+ILD_IMAGE :: 0x00000020
+ILD_ROP :: 0x00000040
+ILD_BLEND25 :: 0x00000002
+ILD_BLEND50 :: 0x00000004
+ILD_OVERLAYMASK :: 0x00000F00
+ILD_PRESERVEALPHA :: 0x00001000
+ILD_SCALE :: 0x00002000
+ILD_DPISCALE :: 0x00004000
+ILD_ASYNC :: 0x00008000
+
+ILD_SELECTED :: ILD_BLEND50
+ILD_FOCUS :: ILD_BLEND25
+ILD_BLEND :: ILD_BLEND50
+CLR_HILIGHT :: CLR_DEFAULT
+
+ILS_NORMAL :: 0x00000000
+ILS_GLOW :: 0x00000001
+ILS_SHADOW :: 0x00000002
+ILS_SATURATE :: 0x00000004
+ILS_ALPHA :: 0x00000008
+
+ILGT_NORMAL :: 0x00000000
+ILGT_ASYNC :: 0x00000001
+
+ILCF_MOVE :: 0x00000000
+ILCF_SWAP :: 0x00000001
+
+ILP_NORMAL :: 0
+ILP_DOWNLEVEL :: 1
+
+IMAGELISTDRAWPARAMS :: struct {
+ cbSize: DWORD,
+ himl: HIMAGELIST,
+ i: i32,
+ hdcDst: HDC,
+ x: i32,
+ y: i32,
+ cx: i32,
+ cy: i32,
+ xBitmap: i32,
+ yBitmap: i32,
+ rgbBk: COLORREF,
+ rgbFg: COLORREF,
+ fStyle: UINT,
+ dwRop: DWORD,
+ fState: DWORD,
+ Frame: DWORD,
+ crEffect: COLORREF,
+}
+LPIMAGELISTDRAWPARAMS :: ^IMAGELISTDRAWPARAMS
+
+IMAGEINFO :: struct {
+ hbmImage: HBITMAP,
+ hbmMask: HBITMAP,
+ Unused1: i32,
+ Unused2: i32,
+ rcImage: RECT,
+}
+LPIMAGEINFO :: ^IMAGEINFO
+
+@(default_calling_convention="system")
+foreign Comctl32 {
+ ImageList_Create :: proc(cx, cy: i32, flags: UINT, cInitial, cGrow: i32) -> HIMAGELIST ---
+ ImageList_Destroy :: proc(himl: HIMAGELIST) -> BOOL ---
+ ImageList_GetImageCount :: proc(himl: HIMAGELIST) -> i32 ---
+ ImageList_SetImageCount :: proc(himl: HIMAGELIST, uNewCount: UINT) -> BOOL ---
+ ImageList_Add :: proc(himl: HIMAGELIST, hbmImage, hbmMask: HBITMAP) -> i32 ---
+ ImageList_ReplaceIcon :: proc(himl: HIMAGELIST, i: i32, hicon: HICON) -> i32 ---
+ ImageList_SetBkColor :: proc(himl: HIMAGELIST, clrBk: COLORREF) -> COLORREF ---
+ ImageList_GetBkColor :: proc(himl: HIMAGELIST) -> COLORREF ---
+ ImageList_SetOverlayImage :: proc(himl: HIMAGELIST, iImage: i32, iOverlay: i32) -> BOOL ---
+ ImageList_Draw :: proc(himl: HIMAGELIST, i: i32, hdcDst: HDC, x, y: i32, fStyle: UINT) -> BOOL ---
+ ImageList_Replace :: proc(himl: HIMAGELIST, i: i32, hbmImage, hbmMask: HBITMAP) -> BOOL ---
+ ImageList_AddMasked :: proc(himl: HIMAGELIST, hbmImage: HBITMAP, crMask: COLORREF) -> i32 ---
+ ImageList_DrawEx :: proc(himl: HIMAGELIST, i: i32, hdcDst: HDC, x, y, dx, dy: i32, rgbBk, rgbFg: COLORREF, fStyle: UINT) -> BOOL ---
+ ImageList_DrawIndirect :: proc(pimldp: ^IMAGELISTDRAWPARAMS) -> BOOL ---
+ ImageList_Remove :: proc(himl: HIMAGELIST, i: i32) -> BOOL ---
+ ImageList_GetIcon :: proc(himl: HIMAGELIST, i: i32, flags: UINT) -> HICON ---
+ ImageList_LoadImageW :: proc(hi: HINSTANCE, lpbmp: LPCWSTR, cx, cgrow: i32, crMask: COLORREF, uType, uFlags: UINT) -> HIMAGELIST ---
+ ImageList_Copy :: proc(himlDst: HIMAGELIST, iDst: i32, himlSrc: HIMAGELIST, iSrc: i32, uFlags: UINT) -> BOOL ---
+ ImageList_BeginDrag :: proc(himlTrack: HIMAGELIST, iTrack, dxHotspot, dyHotspot: i32) -> BOOL ---
+ ImageList_EndDrag :: proc() ---
+ ImageList_DragEnter :: proc(hwndLock: HWND, x, y: i32) -> BOOL ---
+ ImageList_DragLeave :: proc(hwndLock: HWND) -> BOOL ---
+ ImageList_DragMove :: proc(x, y: i32) -> BOOL ---
+ ImageList_SetDragCursorImage :: proc(himlDrag: HIMAGELIST, iDrag, dxHotspot, dyHotspot: i32) -> BOOL ---
+ ImageList_DragShowNolock :: proc(fShow: BOOL) -> BOOL ---
+ ImageList_GetDragImage :: proc(ppt, pptHotspot: ^POINT) -> HIMAGELIST ---
+ ImageList_Read :: proc(pstm: ^IStream) -> HIMAGELIST ---
+ ImageList_Write :: proc(himl: HIMAGELIST, pstm: ^IStream) -> BOOL ---
+ ImageList_ReadEx :: proc(dwFlags: DWORD, pstm: ^IStream, riid: REFIID, ppv: PVOID) -> HRESULT ---
+ ImageList_WriteEx :: proc(himl: HIMAGELIST, dwFlags: DWORD, pstm: ^IStream) -> HRESULT ---
+ ImageList_GetIconSize :: proc(himl: HIMAGELIST, cx, cy: ^i32) -> BOOL ---
+ ImageList_SetIconSize :: proc(himl: HIMAGELIST, cx, cy: i32) -> BOOL ---
+ ImageList_GetImageInfo :: proc(himl: HIMAGELIST, i: i32, pImageInfo: ^IMAGEINFO) -> BOOL ---
+ ImageList_Merge :: proc(himl1: HIMAGELIST, i1: i32, himl2: HIMAGELIST, i2: i32, dx, dy: i32) -> HIMAGELIST ---
+ ImageList_Duplicate :: proc(himl: HIMAGELIST) -> HIMAGELIST ---
+ HIMAGELIST_QueryInterface :: proc(himl: HIMAGELIST, riid: REFIID, ppv: rawptr) -> HRESULT ---
+}
+
+ImageList_AddIcon :: #force_inline proc "system" (himl: HIMAGELIST, hicon: HICON) -> i32 {
+ return ImageList_ReplaceIcon(himl, -1, hicon)
+}
+ImageList_RemoveAll :: #force_inline proc "system" (himl: HIMAGELIST) -> BOOL {
+ return ImageList_Remove(himl, -1)
+}
+ImageList_ExtractIcon :: #force_inline proc "system" (hi: HINSTANCE, himl: HIMAGELIST, i: i32) -> HICON {
+ return ImageList_GetIcon(himl, i, 0)
+}
+ImageList_LoadBitmap :: #force_inline proc "system" (hi: HINSTANCE, lpbmp: LPCWSTR, cx, cGrow: i32, crMask: COLORREF) -> HIMAGELIST {
+ return ImageList_LoadImageW(hi, lpbmp, cx, cGrow, crMask, IMAGE_BITMAP, 0)
+}
+
+// Status Bar Control
+SBT_NOBORDERS :: 0x0100
+SBT_POPOUT :: 0x0200
+SBT_RTLREADING :: 0x0400
+SBT_NOTABPARSING :: 0x0800
+SBT_OWNERDRAW :: 0x1000
+
+SBN_SIMPLEMODECHANGE :: SBN_FIRST - 0
+
+SB_SIMPLEID :: 0xFF
+
+@(default_calling_convention="system")
+foreign Comctl32 {
+ DrawStatusTextW :: proc(hDC: HDC, lprc: ^RECT, pszText: LPCWSTR, uFlags: UINT) ---
+ CreateStatusWindowW :: proc(style: LONG, lpszText: LPCWSTR, hwndParent: HWND, wID: UINT) -> HWND ---
+}
+
+// Menu Help
+MINSYSCOMMAND :: SC_SIZE
+
+@(default_calling_convention="system")
+foreign Comctl32 {
+ MenuHelp :: proc(uMsg: UINT, wParam: WPARAM, lParam: LPARAM, hMainMenu: HMENU, hInst: HINSTANCE, hwndStatus: HWND, lpwIDs: ^UINT) ---
+ ShowHideMenuCtl :: proc(hWnd: HWND, uFlags: UINT_PTR, lpInfo: LPINT) -> BOOL ---
+ GetEffectiveClientRect :: proc(hWnd: HWND, lprc: LPRECT, lpInfo: ^INT) ---
+}
+
+// Drag List
+DL_CURSORSET :: 0
+DL_STOPCURSOR :: 1
+DL_COPYCURSOR :: 2
+DL_MOVECURSOR :: 3
+
+DRAGLISTMSGSTRING :: "commctrl_DragListMsg"
+
+@(default_calling_convention="system")
+foreign Comctl32 {
+ MakeDragList :: proc(hLB: HWND) -> BOOL ---
+ DrawInsert :: proc(handParent: HWND, hLB: HWND, nItem: c_int) ---
+ LBItemFromPt :: proc(hLB: HWND, pt: POINT, bAutoScroll: BOOL) -> c_int ---
+}
+
+// Header Control
+HDTEXTFILTERW :: struct {
+ pszText: LPWSTR,
+ cchTextMax: INT,
+}
+HD_TEXTFILTERW :: HDTEXTFILTERW
+LPHDTEXTFILTERW :: ^HDTEXTFILTERW
+LPHD_TEXTFILTERW :: LPHDTEXTFILTERW
+
+HDITEMW :: struct {
+ mask: UINT,
+ cxy: c_int,
+ pszText: LPWSTR,
+ hbm: HBITMAP,
+ cchTextMax: c_int,
+ fmt: c_int,
+ lParam: LPARAM,
+ iImage: c_int,
+ iOrder: c_int,
+ type: UINT,
+ pvFilter: rawptr,
+}
+HD_ITEMW :: HDITEMW
+LPHDITEMW :: ^HDITEMW
+LPHD_ITEMW :: LPHDITEMW
+
+HDLAYOUT :: struct {
+ prc: ^RECT,
+ pwpos: ^WINDOWPOS,
+}
+HD_LAYOUT :: HDLAYOUT
+LPHDLAYOUT :: ^HDLAYOUT
+LPHD_LAYOUT :: LPHDLAYOUT
+
+HDHITTESTINFO :: struct {
+ pt: POINT,
+ flags: UINT,
+ iItem: c_int,
+}
+HD_HITTESTINFO :: HDHITTESTINFO
+LPHDHITTESTINFO :: ^HDHITTESTINFO
+LPHD_HITTESTINFO :: LPHDHITTESTINFO
+
+Header_GetItemCount :: #force_inline proc "system" (hwndHD: HWND) -> c_int {
+ return cast(c_int)SendMessageW(hwndHD, HDM_GETITEMCOUNT, 0, 0)
+}
+Header_InsertItem :: #force_inline proc "system" (hwndHD: HWND, i: c_int, phdi: ^HD_ITEMW) -> c_int {
+ return cast(c_int)SendMessageW(hwndHD, HDM_INSERTITEMW, cast(WPARAM)i, cast(LPARAM)uintptr(phdi))
+}
+Header_DeleteItem :: #force_inline proc "system" (hwndHD: HWND, i: c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndHD, HDM_DELETEITEM, cast(WPARAM)i, 0)
+}
+Header_GetItem :: #force_inline proc "system" (hwndHD: HWND, i: c_int, phdi: ^HD_ITEMW) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndHD, HDM_GETITEMW, cast(WPARAM)i, cast(LPARAM)uintptr(phdi))
+}
+Header_SetItem :: #force_inline proc "system" (hwndHD: HWND, i: c_int, phdi: ^HD_ITEMW) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndHD, HDM_SETITEMW, cast(WPARAM)i, cast(LPARAM)uintptr(phdi))
+}
+Header_Layout :: #force_inline proc "system" (hwndHD: HWND, playout: ^HD_LAYOUT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndHD, HDM_LAYOUT, 0, cast(LPARAM)uintptr(playout))
+}
+
+Header_GetItemRect :: #force_inline proc "system" (hwnd: HWND, iItem: c_int, lprc: ^RECT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd,HDM_GETITEMRECT,cast(WPARAM)iItem,cast(LPARAM)uintptr(lprc))
+}
+Header_SetImageList :: #force_inline proc "system" (hwnd: HWND, himl: HIMAGELIST) -> HIMAGELIST {
+ return cast(HIMAGELIST)uintptr(SendMessageW(hwnd,HDM_SETIMAGELIST,0,cast(LPARAM)uintptr(himl)))
+}
+Header_GetImageList :: #force_inline proc "system" (hwnd: HWND) -> HIMAGELIST {
+ return cast(HIMAGELIST)uintptr(SendMessageW(hwnd,HDM_GETIMAGELIST,0,0))
+}
+Header_OrderToIndex :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> c_int {
+ return cast(c_int)SendMessageW(hwnd,HDM_ORDERTOINDEX,cast(WPARAM)i,0)
+}
+Header_CreateDragImage :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> HIMAGELIST {
+ return cast(HIMAGELIST)uintptr(SendMessageW(hwnd,HDM_CREATEDRAGIMAGE,cast(WPARAM)i,0))
+}
+Header_GetOrderArray :: #force_inline proc "system" (hwnd: HWND, iCount: c_int, lpi: ^c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd,HDM_GETORDERARRAY,cast(WPARAM)iCount,cast(LPARAM)uintptr(lpi))
+}
+Header_SetOrderArray :: #force_inline proc "system" (hwnd: HWND, iCount: c_int, lpi: ^c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd,HDM_SETORDERARRAY,cast(WPARAM)iCount,cast(LPARAM)uintptr(lpi))
+}
+Header_SetHotDivider :: #force_inline proc "system" (hwnd: HWND, fPos: BOOL, dw: DWORD) -> c_int {
+ return cast(c_int)SendMessageW(hwnd,HDM_SETHOTDIVIDER,cast(WPARAM)fPos,cast(LPARAM)dw)
+}
+Header_SetBitmapMargin :: #force_inline proc "system" (hwnd: HWND, iWidth: c_int) -> c_int {
+ return cast(c_int)SendMessageW(hwnd,HDM_SETBITMAPMARGIN,cast(WPARAM)iWidth,0)
+}
+Header_GetBitmapMargin :: #force_inline proc "system" (hwnd: HWND) -> c_int {
+ return cast(c_int)SendMessageW(hwnd,HDM_GETBITMAPMARGIN,0,0)
+}
+Header_SetUnicodeFormat :: #force_inline proc "system" (hwnd: HWND, fUnicode: BOOL) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd,HDM_SETUNICODEFORMAT,cast(WPARAM)fUnicode,0)
+}
+Header_GetUnicodeFormat :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd,HDM_GETUNICODEFORMAT,0,0)
+}
+Header_SetFilterChangeTimeout :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> c_int {
+ return cast(c_int)SendMessageW(hwnd,HDM_SETFILTERCHANGETIMEOUT,0,cast(LPARAM)i)
+}
+Header_EditFilter :: #force_inline proc "system" (hwnd: HWND, i: c_int, fDiscardChanges: BOOL) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd,HDM_EDITFILTER,cast(WPARAM)i,MAKELPARAM(fDiscardChanges,0))
+}
+Header_ClearFilter :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd,HDM_CLEARFILTER,cast(WPARAM)i,0)
+}
+Header_ClearAllFilters :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd,HDM_CLEARFILTER,~WPARAM(0),0)
+}
+
+// Toolbar Control
+COLORSCHEME :: struct {
+ dwSize: DWORD,
+ clrBtnHighlight: COLORREF,
+ clrBtnShadow: COLORREF,
+}
+LPCOLORSCHEME :: ^COLORSCHEME
+
+COLORMAP :: struct {
+ from: COLORREF,
+ to: COLORREF,
+}
+LPCOLORMAP :: ^COLORMAP
+
+TBBUTTON :: struct {
+ iBitmap: c_int,
+ idCommand: c_int,
+ fsState: BYTE,
+ fsStyle: BYTE,
+ bReserved: [size_of(uintptr) - 2]BYTE,
+ dwData: DWORD_PTR,
+ iString: INT_PTR,
+}
+PTBBUTTON :: ^TBBUTTON
+LPTBBUTTON :: ^TBBUTTON
+LPCTBBUTTON :: ^TBBUTTON
+
+TBADDBITMAP :: struct {
+ hInst: HINSTANCE,
+ nID: UINT_PTR,
+}
+LPTBADDBITMAP :: ^TBADDBITMAP
+
+TBSAVEPARAMSW :: struct {
+ hkr: HKEY,
+ pszSubKey: LPCWSTR,
+ pszValueName: LPCWSTR,
+}
+
+TBINSERTMARK :: struct {
+ iButton: c_int,
+ dwFlags: DWORD,
+}
+LPTBINSERTMARK :: ^TBINSERTMARK
+
+TBREPLACEBITMAP :: struct {
+ hInstOld: HINSTANCE,
+ nIDOld: UINT_PTR,
+ hInstNew: HINSTANCE,
+ nIDNew: UINT_PTR,
+ nButtons: c_int,
+}
+LPTBREPLACEBITMAP :: ^TBREPLACEBITMAP
+
+TBBUTTONINFOW :: struct {
+ cbSize: UINT,
+ dwMask: DWORD,
+ idCommand: c_int,
+ iImage: c_int,
+ fsState: BYTE,
+ fsStyle: BYTE,
+ cx: WORD,
+ lParam: DWORD_PTR,
+ pszText: LPWSTR,
+ cchText: c_int,
+}
+LPTBBUTTONINFOW :: ^TBBUTTONINFOW
+
+TBMETRICS :: struct {
+ cbSize: UINT,
+ dwMask: DWORD,
+ cxPad: c_int,
+ cyPad: c_int,
+ cxBarPad: c_int,
+ cyBarPad: c_int,
+ cxButtonSpacing: c_int,
+ cyButtonSpacing: c_int,
+}
+LPTBMETRICS :: ^TBMETRICS
+
+@(default_calling_convention="system")
+foreign Comctl32 {
+ CreateToolbarEx :: proc(hwnd: HWND, ws: DWORD, wID: UINT, nBitmaps: c_int, hBMInst: HINSTANCE, wBMID: UINT_PTR, lpButtons: LPCTBBUTTON, iNumButtons: c_int, dxButton,dyButton: c_int, dxBitmap,dyBitmap: c_int, uStructSize: UINT) -> HWND ---
+ CreateMappedBitmap :: proc(hInstance: HINSTANCE, idBitmap: INT_PTR, wFlags: UINT, lpColorMap: LPCOLORMAP, iNumMaps: c_int) -> HBITMAP ---
+}
+
+// Button Control
+BUTTON_IMAGELIST_ALIGN_LEFT :: 0
+BUTTON_IMAGELIST_ALIGN_RIGHT :: 1
+BUTTON_IMAGELIST_ALIGN_TOP :: 2
+BUTTON_IMAGELIST_ALIGN_BOTTOM :: 3
+BUTTON_IMAGELIST_ALIGN_CENTER :: 4
+
+BCSIF_GLYPH :: 0x0001
+BCSIF_IMAGE :: 0x0002
+BCSIF_STYLE :: 0x0004
+BCSIF_SIZE :: 0x0008
+
+BCSS_NOSPLIT :: 0x0001
+BCSS_STRETCH :: 0x0002
+BCSS_ALIGNLEFT :: 0x0004
+BCSS_IMAGE :: 0x0008
+
+BUTTON_IMAGELIST :: struct {
+ himl: HIMAGELIST,
+ margin: RECT,
+ uAlign: UINT,
+}
+PBUTTON_IMAGELIST :: ^BUTTON_IMAGELIST
+
+BUTTON_SPLITINFO :: struct {
+ mask: UINT,
+ himlGlyph: HIMAGELIST,
+ uSplitStyle: UINT,
+ size: SIZE,
+}
+PBUTTON_SPLITINFO :: ^BUTTON_SPLITINFO
+
+NMBCHOTITEM :: struct {
+ hdr: NMHDR,
+ dwFlags: DWORD,
+}
+LPNMBCHOTITEM :: ^NMBCHOTITEM
+
+// BCM_SETIMAGELIST value
+BCCL_NOGLYPH :: cast(HIMAGELIST)(~uintptr(0))
+
+Button_GetIdealSize :: #force_inline proc "system" (hwnd: HWND, psize: ^SIZE) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, BCM_GETIDEALSIZE, 0, cast(LPARAM)uintptr(psize))
+}
+Button_SetImageList :: #force_inline proc "system" (hwnd: HWND, pbuttonImagelist: PBUTTON_IMAGELIST) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, BCM_SETIMAGELIST, 0, cast(LPARAM)uintptr(pbuttonImagelist))
+}
+Button_GetImageList :: #force_inline proc "system" (hwnd: HWND, pbuttonImagelist: PBUTTON_IMAGELIST) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, BCM_GETIMAGELIST, 0, cast(LPARAM)uintptr(pbuttonImagelist))
+}
+Button_SetTextMargin :: #force_inline proc "system" (hwnd: HWND, pmargin: ^RECT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, BCM_SETTEXTMARGIN, 0, cast(LPARAM)uintptr(pmargin))
+}
+Button_GetTextMargin :: #force_inline proc "system" (hwnd: HWND, pmargin: ^RECT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, BCM_GETTEXTMARGIN, 0, cast(LPARAM)uintptr(pmargin))
+}
+Button_SetNote :: #force_inline proc "system" (hwnd: HWND, psz: LPCWSTR) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, BCM_SETNOTE, 0, cast(LPARAM)uintptr(psz))
+}
+Button_GetNote :: #force_inline proc "system" (hwnd: HWND, psz: LPCWSTR, pcc: ^c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, BCM_GETNOTE, cast(WPARAM)uintptr(pcc), cast(LPARAM)uintptr(psz))
+}
+Button_GetNoteLength :: #force_inline proc "system" (hwnd: HWND) -> LRESULT {
+ return cast(LRESULT)SendMessageW(hwnd, BCM_GETNOTELENGTH, 0, 0)
+}
+Button_SetElevationRequiredState :: #force_inline proc "system" (hwnd: HWND, fRequired: BOOL) -> LRESULT {
+ return cast(LRESULT)SendMessageW(hwnd, BCM_SETSHIELD, 0, cast(LPARAM)fRequired)
+}
+Button_SetDropDownState :: #force_inline proc "system" (hwnd: HWND, fDropDown: BOOL) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, BCM_SETDROPDOWNSTATE, cast(WPARAM)fDropDown, 0)
+}
+Button_SetSplitInfo :: #force_inline proc "system" (hwnd: HWND, psi: ^BUTTON_SPLITINFO) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, BCM_SETSPLITINFO, 0, cast(LPARAM)uintptr(psi))
+}
+Button_GetSplitInfo :: #force_inline proc "system" (hwnd: HWND, psi: ^BUTTON_SPLITINFO) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, BCM_GETSPLITINFO, 0, cast(LPARAM)uintptr(psi))
+}
+
+// Edit Control
+EDITBALLOONTIP :: struct {
+ cbStruct: DWORD,
+ pszTitle: LPCWSTR,
+ pszText: LPCWSTR,
+ ttiIcon: INT,
+}
+PEDITBALLOONTIP :: ^EDITBALLOONTIP
+
+Edit_SetCueBannerText :: #force_inline proc "system" (hwnd: HWND, lpcwText: LPCWSTR) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, EM_SETCUEBANNER, 0, cast(LPARAM)uintptr(lpcwText))
+}
+Edit_SetCueBannerTextFocused :: #force_inline proc "system" (hwnd: HWND, lpcwText: LPCWSTR, fDrawFocused: BOOL) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, EM_SETCUEBANNER, cast(WPARAM)fDrawFocused, cast(LPARAM)uintptr(lpcwText))
+}
+Edit_GetCueBannerText :: #force_inline proc "system" (hwnd: HWND, lpwText: LPWSTR, cchText: LONG) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, EM_GETCUEBANNER, cast(WPARAM)uintptr(lpwText), cast(LPARAM)cchText)
+}
+Edit_ShowBalloonTip :: #force_inline proc "system" (hwnd: HWND, peditballoontip: PEDITBALLOONTIP) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, EM_SHOWBALLOONTIP, 0, cast(LPARAM)uintptr(peditballoontip))
+}
+Edit_HideBalloonTip :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, EM_HIDEBALLOONTIP, 0, 0)
+}
+
+Edit_SetHilite :: #force_inline proc "system" (hwndCtl: HWND, ichStart: c_int, ichEnd: c_int) {
+ SendMessageW(hwndCtl, EM_SETHILITE, cast(WPARAM)ichStart, cast(LPARAM)ichEnd)
+}
+Edit_GetHilite :: #force_inline proc "system" (hwndCtl: HWND) -> DWORD {
+ return cast(DWORD)SendMessageW(hwndCtl, EM_GETHILITE, 0, 0)
+}
+
+Edit_NoSetFocus :: #force_inline proc "system" (hwndCtl: HWND) {
+ SendMessageW(hwndCtl, EM_NOSETFOCUS, 0, 0)
+}
+Edit_TakeFocus :: #force_inline proc "system" (hwndCtl: HWND) {
+ SendMessageW(hwndCtl, EM_TAKEFOCUS, 0, 0)
+}
+
+// Up Down Control
+@(default_calling_convention="system")
+foreign Comctl32 {
+ CreateUpDownControl :: proc(dwStyle: DWORD, x,y: c_int, cx,cy: c_int, hParent: HWND, nID: c_int, hInst: HINSTANCE, hBuddy: HWND, nUpper,nLower,nPos: c_int) -> HWND ---
+}
+
+// Progress Bar Control
+PBRANGE :: struct {
+ iLow: c_int,
+ iHigh: c_int,
+}
+PPBRANGE :: ^PBRANGE
+
+// Hot Key Control
+HOTKEYF_SHIFT :: 0x1
+HOTKEYF_CONTROL :: 0x2
+HOTKEYF_ALT :: 0x4
+HOTKEYF_EXT :: 0x8
+
+HKCOMB_NONE :: 0x01
+HKCOMB_S :: 0x02
+HKCOMB_C :: 0x04
+HKCOMB_A :: 0x08
+HKCOMB_SC :: 0x10
+HKCOMB_SA :: 0x20
+HKCOMB_CA :: 0x40
+HKCOMB_SCA :: 0x80
+
+// List View Control
+LVSIL_NORMAL :: 0
+LVSIL_SMALL :: 1
+LVSIL_STATE :: 2
+
+LVIF_TEXT :: 0x001
+LVIF_IMAGE :: 0x002
+LVIF_PARAM :: 0x004
+LVIF_STATE :: 0x008
+LVIF_INDENT :: 0x010
+LVIF_GROUPID :: 0x100
+LVIF_COLUMNS :: 0x200
+LVIF_NORECOMPUTE :: 0x800
+
+LVIS_FOCUSED :: 0x01
+LVIS_SELECTED :: 0x02
+LVIS_CUT :: 0x04
+LVIS_DROPHILITED :: 0x08
+LVIS_GLOW :: 0x10
+LVIS_ACTIVATING :: 0x20
+
+LVIS_OVERLAYMASK :: 0x0F00
+LVIS_STATEIMAGEMASK :: 0xF000
+
+LVNI_ALL :: 0x000
+LVNI_FOCUSED :: 0x001
+LVNI_SELECTED :: 0x002
+LVNI_CUT :: 0x004
+LVNI_DROPHILITED :: 0x008
+LVNI_ABOVE :: 0x100
+LVNI_BELOW :: 0x200
+LVNI_TOLEFT :: 0x400
+LVNI_TORIGHT :: 0x800
+
+LVFI_PARAM :: 0x01
+LVFI_STRING :: 0x02
+LVFI_PARTIAL :: 0x08
+LVFI_WRAP :: 0x20
+LVFI_NEARESTXY :: 0x40
+
+I_INDENTCALLBACK :: -1
+
+I_GROUPIDCALLBACK :: -1
+I_GROUPIDNONE :: -2
+
+LPSTR_TEXTCALLBACKW :: cast(LPWSTR)~uintptr(0)
+
+I_IMAGECALLBACK :: -1
+I_IMAGENONE :: -2
+
+I_COLUMNSCALLBACK :: ~UINT(0)
+
+LVIR_BOUNDS :: 0
+LVIR_ICON :: 1
+LVIR_LABEL :: 2
+LVIR_SELECTBOUNDS :: 3
+
+LVHT_NOWHERE :: 0x1
+LVHT_ONITEMICON :: 0x2
+LVHT_ONITEMLABEL :: 0x4
+LVHT_ONITEMSTATEICON :: 0x8
+LVHT_ONITEM :: LVHT_ONITEMICON | LVHT_ONITEMLABEL | LVHT_ONITEMSTATEICON
+
+LVHT_ABOVE :: 0x08
+LVHT_BELOW :: 0x10
+LVHT_TORIGHT :: 0x20
+LVHT_TOLEFT :: 0x40
+
+LVA_DEFAULT :: 0x0
+LVA_ALIGNLEFT :: 0x1
+LVA_ALIGNTOP :: 0x2
+LVA_SNAPTOGRID :: 0x5
+
+LVCF_FMT :: 0x001
+LVCF_WIDTH :: 0x002
+LVCF_TEXT :: 0x004
+LVCF_SUBITEM :: 0x008
+LVCF_IMAGE :: 0x010
+LVCF_ORDER :: 0x020
+LVCF_MINWIDTH :: 0x040
+LVCF_DEFAULTWIDTH :: 0x080
+LVCF_IDEALWIDTH :: 0x100
+
+LVCFMT_LEFT :: 0x0000000
+LVCFMT_RIGHT :: 0x0000001
+LVCFMT_CENTER :: 0x0000002
+LVCFMT_FIXED_WIDTH :: 0x0000100
+LVCFMT_IMAGE :: 0x0000800
+LVCFMT_BITMAP_ON_RIGHT :: 0x0001000
+LVCFMT_COL_HAS_IMAGES :: 0x0008000
+LVCFMT_NO_DPI_SCALE :: 0x0040000
+LVCFMT_FIXED_RATIO :: 0x0080000
+LVCFMT_LINE_BREAK :: 0x0100000
+LVCFMT_FILL :: 0x0200000
+LVCFMT_WRAP :: 0x0400000
+LVCFMT_NO_TITLE :: 0x0800000
+LVCFMT_SPLITBUTTON :: 0x1000000
+
+LVCFMT_JUSTIFYMASK :: 0x3
+LVCFMT_TILE_PLACEMENTMASK :: (LVCFMT_LINE_BREAK|LVCFMT_FILL)
+
+LVSCW_AUTOSIZE :: -1
+LVSCW_AUTOSIZE_USEHEADER :: -2
+
+LVSICF_NOINVALIDATEALL :: 0x1
+LVSICF_NOSCROLL :: 0x2
+
+LVS_EX_GRIDLINES :: 0x00000001
+LVS_EX_SUBITEMIMAGES :: 0x00000002
+LVS_EX_CHECKBOXES :: 0x00000004
+LVS_EX_TRACKSELECT :: 0x00000008
+LVS_EX_HEADERDRAGDROP :: 0x00000010
+LVS_EX_FULLROWSELECT :: 0x00000020
+LVS_EX_ONECLICKACTIVATE :: 0x00000040
+LVS_EX_TWOCLICKACTIVATE :: 0x00000080
+LVS_EX_FLATSB :: 0x00000100
+LVS_EX_REGIONAL :: 0x00000200
+LVS_EX_INFOTIP :: 0x00000400
+LVS_EX_UNDERLINEHOT :: 0x00000800
+LVS_EX_UNDERLINECOLD :: 0x00001000
+LVS_EX_MULTIWORKAREAS :: 0x00002000
+LVS_EX_LABELTIP :: 0x00004000
+LVS_EX_BORDERSELECT :: 0x00008000
+LVS_EX_DOUBLEBUFFER :: 0x00010000
+LVS_EX_HIDELABELS :: 0x00020000
+LVS_EX_SINGLEROW :: 0x00040000
+LVS_EX_SNAPTOGRID :: 0x00080000
+LVS_EX_SIMPLESELECT :: 0x00100000
+LVS_EX_JUSTIFYCOLUMNS :: 0x00200000
+LVS_EX_TRANSPARENTBKGND :: 0x00400000
+LVS_EX_TRANSPARENTSHADOWTEXT :: 0x00800000
+LVS_EX_AUTOAUTOARRANGE :: 0x01000000
+LVS_EX_HEADERINALLVIEWS :: 0x02000000
+LVS_EX_AUTOCHECKSELECT :: 0x08000000
+LVS_EX_AUTOSIZECOLUMNS :: 0x10000000
+LVS_EX_COLUMNSNAPPOINTS :: 0x40000000
+LVS_EX_COLUMNOVERFLOW :: 0x80000000
+
+LV_MAX_WORKAREAS :: 16
+
+LVBKIF_SOURCE_NONE :: 0x0
+LVBKIF_SOURCE_HBITMAP :: 0x1
+LVBKIF_SOURCE_URL :: 0x2
+LVBKIF_SOURCE_MASK :: 0x3
+
+LVBKIF_STYLE_NORMAL :: 0x00
+LVBKIF_STYLE_TILE :: 0x10
+LVBKIF_STYLE_MASK :: 0x10
+
+LVBKIF_FLAG_TILEOFFSET :: 0x100
+
+LVBKIF_TYPE_WATERMARK :: 0x10000000
+
+LV_VIEW_ICON :: 0x0
+LV_VIEW_DETAILS :: 0x1
+LV_VIEW_SMALLICON :: 0x2
+LV_VIEW_LIST :: 0x3
+LV_VIEW_TILE :: 0x4
+LV_VIEW_MAX :: 0x4
+
+LVGF_NONE :: 0x00
+LVGF_HEADER :: 0x01
+LVGF_FOOTER :: 0x02
+LVGF_STATE :: 0x04
+LVGF_ALIGN :: 0x08
+LVGF_GROUPID :: 0x10
+
+LVGS_NORMAL :: 0x0
+LVGS_COLLAPSED :: 0x1
+LVGS_HIDDEN :: 0x2
+
+LVGA_HEADER_LEFT :: 0x1
+LVGA_HEADER_CENTER :: 0x2
+LVGA_HEADER_RIGHT :: 0x4
+LVGA_FOOTER_LEFT :: 0x8
+LVGA_FOOTER_CENTER :: 0x10
+LVGA_FOOTER_RIGHT :: 0x20
+
+LVGMF_NONE :: 0x0
+LVGMF_BORDERSIZE :: 0x1
+LVGMF_BORDERCOLOR :: 0x2
+LVGMF_TEXTCOLOR :: 0x4
+
+LVTVIF_AUTOSIZE :: 0x0
+LVTVIF_FIXEDWIDTH :: 0x1
+LVTVIF_FIXEDHEIGHT :: 0x2
+LVTVIF_FIXEDSIZE :: 0x3
+
+LVTVIM_TILESIZE :: 0x1
+LVTVIM_COLUMNS :: 0x2
+LVTVIM_LABELMARGIN :: 0x4
+
+LVIM_AFTER :: 0x1
+
+LVKF_ALT :: 0x1
+LVKF_CONTROL :: 0x2
+LVKF_SHIFT :: 0x4
+
+LVCDI_ITEM :: 0x0
+LVCDI_GROUP :: 0x1
+
+LVCDRF_NOSELECT :: 0x10000
+LVCDRF_NOGROUPFRAME :: 0x20000
+
+LVN_ITEMCHANGING :: (LVN_FIRST-0)
+LVN_ITEMCHANGED :: (LVN_FIRST-1)
+LVN_INSERTITEM :: (LVN_FIRST-2)
+LVN_DELETEITEM :: (LVN_FIRST-3)
+LVN_DELETEALLITEMS :: (LVN_FIRST-4)
+LVN_BEGINLABELEDITA :: (LVN_FIRST-5)
+LVN_BEGINLABELEDITW :: (LVN_FIRST-75)
+LVN_ENDLABELEDITA :: (LVN_FIRST-6)
+LVN_ENDLABELEDITW :: (LVN_FIRST-76)
+LVN_COLUMNCLICK :: (LVN_FIRST-8)
+LVN_BEGINDRAG :: (LVN_FIRST-9)
+LVN_BEGINRDRAG :: (LVN_FIRST-11)
+LVN_ODCACHEHINT :: (LVN_FIRST-13)
+LVN_ODFINDITEMA :: (LVN_FIRST-52)
+LVN_ODFINDITEMW :: (LVN_FIRST-79)
+LVN_ITEMACTIVATE :: (LVN_FIRST-14)
+LVN_ODSTATECHANGED :: (LVN_FIRST-15)
+LVN_HOTTRACK :: (LVN_FIRST-21)
+LVN_GETDISPINFOA :: (LVN_FIRST-50)
+LVN_GETDISPINFOW :: (LVN_FIRST-77)
+LVN_SETDISPINFOA :: (LVN_FIRST-51)
+LVN_SETDISPINFOW :: (LVN_FIRST-78)
+LVN_KEYDOWN :: (LVN_FIRST-55)
+LVN_MARQUEEBEGIN :: (LVN_FIRST-56)
+LVN_GETINFOTIPA :: (LVN_FIRST-57)
+LVN_GETINFOTIPW :: (LVN_FIRST-58)
+LVN_BEGINSCROLL :: (LVN_FIRST-80)
+LVN_ENDSCROLL :: (LVN_FIRST-81)
+
+LVIF_DI_SETITEM :: 0x1000
+
+LVGIT_UNFOLDED :: 0x1
+
+LVITEMW :: struct {
+ mask: UINT,
+ iItem: c_int,
+ iSubItem: c_int,
+ state: UINT,
+ stateMask: UINT,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ lParam: LPARAM,
+ iIndent: c_int,
+ iGroupId: c_int,
+ cColumns: UINT,
+ puColumns: PUINT,
+}
+LV_ITEMW :: LVITEMW
+LPLVITEMW :: ^LVITEMW
+LPLV_ITEMW :: LPLVITEMW
+
+LVFINDINFOW :: struct {
+ flags: UINT,
+ psz: LPCWSTR,
+ lParam: LPARAM,
+ pt: POINT,
+ vkDirection: UINT,
+}
+LPFINDINFOW :: ^LVFINDINFOW
+LV_FINDINFOW :: LVFINDINFOW
+
+LVHITTESTINFO :: struct {
+ pt: POINT,
+ flags: UINT,
+ iItem: c_int,
+ iSubItem: c_int,
+}
+LV_HITTESTINFO :: LVHITTESTINFO
+LPLVHITTESTINFO :: ^LVHITTESTINFO
+LPLV_HITTESTINFO :: LPLVHITTESTINFO
+
+LVCOLUMNW :: struct {
+ mask: UINT,
+ fmt: c_int,
+ cx: c_int,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iSubItem: c_int,
+ iImage: c_int,
+ iOrder: c_int,
+ cxMin: c_int,
+ cxDefault: c_int,
+ cxIdeal: c_int,
+}
+LV_COLUMNW :: LVCOLUMNW
+LPLVCOLUMNW :: ^LVCOLUMNW
+LPLV_COLUMNW :: LPLVCOLUMNW
+
+LVBKIMAGEW :: struct {
+ ulFlags: ULONG,
+ hbm: HBITMAP,
+ pszImage: LPWSTR,
+ cchImageMax: UINT,
+ xOffsetPercent: c_int,
+ yOffsetPercent: c_int,
+}
+LV_BKIMAGEW :: LVBKIMAGEW
+LPLVBKIMAGEW :: ^LVBKIMAGEW
+LPLV_BKIMAGEW :: LPLVBKIMAGEW
+
+LVGROUP :: struct {
+ cbSize: UINT,
+ mask: UINT,
+ pszHeader: LPWSTR,
+ cchHeader: c_int,
+ pszFooter: LPWSTR,
+ cchFooter: c_int,
+ iGroupId: c_int,
+ stateMask: UINT,
+ state: UINT,
+ uAlign: UINT,
+}
+PLVGROUP :: ^LVGROUP
+
+LVGROUPMETRICS :: struct {
+ cbSize: UINT,
+ mask: UINT,
+ Left: UINT,
+ Top: UINT,
+ Right: UINT,
+ Bottom: UINT,
+ crLeft: COLORREF,
+ crTop: COLORREF,
+ crRight: COLORREF,
+ crBottom: COLORREF,
+ crHeader: COLORREF,
+ crFooter: COLORREF,
+}
+PLVGROUPMETRICS :: ^LVGROUPMETRICS
+
+LVINSERTGROUPSORTED :: struct {
+ pfnGroupCompare: PFNLVGROUPCOMPARE,
+ pvData: rawptr,
+ lvGroup: LVGROUP,
+}
+PLVINSERTGROUPSORTED :: ^LVINSERTGROUPSORTED
+
+LVTILEVIEWINFO :: struct {
+ cbSize: UINT,
+ dwMask: DWORD,
+ dwFlags: DWORD,
+ sizeTile: SIZE,
+ cLines: c_int,
+ rcLabelMargin: RECT,
+}
+PLVTILEVIEWINFO :: ^LVTILEVIEWINFO
+
+LVTILEINFO :: struct {
+ cbSize: UINT,
+ iItem: c_int,
+ cColumns: UINT,
+ puColumns: PUINT,
+}
+PLVTILEINFO :: ^LVTILEINFO
+
+LVINSERTMARK :: struct {
+ cbSize: UINT,
+ dwFlags: DWORD,
+ iItem: c_int,
+ dwReserved: DWORD,
+}
+LPLVINSERTMARK :: ^LVINSERTMARK
+
+LVSETINFOTIP :: struct {
+ cbSize: UINT,
+ dwFlags: DWORD,
+ pszText: LPWSTR,
+ iItem: c_int,
+ iSubItem: c_int,
+}
+PLVSETINFOTIP :: ^LVSETINFOTIP
+
+NMLISTVIEW :: struct {
+ hdr: NMHDR,
+ iItem: c_int,
+ iSubItem: c_int,
+ uNewState: UINT,
+ uOldState: UINT,
+ uChanged: UINT,
+ ptAction: POINT,
+ lParam: LPARAM
+}
+NM_LISTVIEW :: NMLISTVIEW
+LPNMLISTVIEW :: ^NMLISTVIEW
+LPNM_LISTVIEW :: LPNMLISTVIEW
+
+NMITEMACTIVATE :: struct {
+ hdr: NMHDR,
+ iItem: c_int,
+ iSubItem: c_int,
+ uNewState: UINT,
+ uOldState: UINT,
+ uChanged: UINT,
+ ptAction: POINT,
+ lParam: LPARAM,
+ uKeyFlags: UINT,
+}
+NM_ITEMACTIVATE :: NMITEMACTIVATE
+LPNMITEMACTIVATE :: ^NMITEMACTIVATE
+LPNM_ITEMACTIVATE :: LPNMITEMACTIVATE
+
+NMLVCUSTOMDRAW :: struct {
+ nmcd: NMCUSTOMDRAW,
+ clrText: COLORREF,
+ clrTextBk: COLORREF,
+ iSubItem: c_int,
+ dwItemType: DWORD,
+ clrFace: COLORREF,
+ iIconEffect: c_int,
+ iIconPhase: c_int,
+ iPartId: c_int,
+ iStateId: c_int,
+ rcText: RECT,
+ uAlign: UINT,
+}
+NMLV_CUSTOMDRAW :: NMLVCUSTOMDRAW
+LPNMLVCUSTOMDRAW :: ^NMLVCUSTOMDRAW
+LPNMLV_CUSTOMDRAW :: LPNMLVCUSTOMDRAW
+
+NMLVCACHEHINT :: struct {
+ hdr: NMHDR,
+ iFrom: c_int,
+ iTo: c_int,
+}
+LPNMLVCACHEHINT :: ^NMLVCACHEHINT
+NM_CACHEHINT :: NMLVCACHEHINT
+PNM_CACHEHINT :: LPNMLVCACHEHINT
+LPNM_CACHEHINT :: LPNMLVCACHEHINT
+
+NMLVFINDITEMW :: struct {
+ hdr: NMHDR,
+ iStart: c_int,
+ lvfi: LVFINDINFOW,
+}
+LPNMLVFINDITEMW :: ^NMLVFINDITEMW
+NM_FINDITEMW :: NMLVFINDITEMW
+PNM_FINDITEMW :: LPNMLVFINDITEMW
+LPNM_FINDITEMW :: LPNMLVFINDITEMW
+
+NMLVODSTATECHANGE :: struct {
+ hdr: NMHDR,
+ iFrom: c_int,
+ iTo: c_int,
+ uNewState: UINT,
+ uOldState: UINT,
+}
+LPNMLVODSTATECHANGE :: ^NMLVODSTATECHANGE
+NM_ODSTATECHANGE :: NMLVODSTATECHANGE
+PNM_ODSTATECHANGE :: NMLVODSTATECHANGE
+LPNM_ODSTATECHANGE :: LPNMLVODSTATECHANGE
+
+LVDISPINFOW :: struct {
+ hdr: NMHDR,
+ item: LVITEMW,
+}
+LV_DISPINFO :: LVDISPINFOW
+LPNMLVDISPINFOW :: ^LVDISPINFOW
+
+NMLVKEYDOWN :: struct #packed {
+ hdr: NMHDR,
+ wVKey: WORD,
+ flags: UINT,
+}
+LV_KEYDOWN :: NMLVKEYDOWN
+LPNMLVKEYDOWN :: ^NMLVKEYDOWN
+
+NMLVGETINFOTIPW :: struct {
+ hdr: NMHDR,
+ dwFlags: DWORD,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iItem: c_int,
+ iSubItem: c_int,
+ lParam: LPARAM,
+}
+LPNMLVGETINFOTIPW :: ^NMLVGETINFOTIPW
+
+NMLVSCROLL :: struct {
+ hdr: NMHDR,
+ dx: c_int,
+ dy: c_int,
+}
+LPNMLVSCROLL :: ^NMLVSCROLL
+
+PFNLVCOMPARE :: #type proc "system" (lpItem1,lpItem2: LPARAM, lpUser: LPARAM) -> c_int
+PFNLVGROUPCOMPARE :: #type proc "system" (item1,item2: c_int, user: rawptr) -> c_int
+
+INDEXTOSTATEIMAGEMASK :: #force_inline proc "system" (i: UINT) -> UINT {
+ return i << 12
+}
+
+ListView_GetItem :: #force_inline proc "system" (hwnd: HWND, pitem: ^LV_ITEMW) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_GETITEMW, 0, cast(LPARAM)uintptr(pitem))
+}
+ListView_SetItem :: #force_inline proc "system" (hwnd: HWND, pitem: ^LV_ITEMW) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_SETITEMW, 0, cast(LPARAM)uintptr(pitem))
+}
+ListView_InsertItem :: #force_inline proc "system" (hwnd: HWND, pitem: ^LV_ITEMW) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_INSERTITEMW, 0, cast(LPARAM)uintptr(pitem))
+}
+ListView_DeleteItem :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_DELETEITEM, cast(WPARAM)i, 0)
+}
+ListView_DeleteAllItems :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_DELETEALLITEMS, 0, 0)
+}
+ListView_GetCallbackMask :: #force_inline proc "system" (hwnd: HWND) -> UINT {
+ return cast(UINT)SendMessageW(hwnd, LVM_GETCALLBACKMASK, 0, 0)
+}
+ListView_SetCallbackMask :: #force_inline proc "system" (hwnd: HWND, mask: UINT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_SETCALLBACKMASK, cast(WPARAM)mask, 0)
+}
+ListView_GetNextItem :: #force_inline proc "system" (hwnd: HWND, i: c_int, flags: UINT) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_GETNEXTITEM, cast(WPARAM)i, MAKELPARAM(flags,0))
+}
+ListView_FindItem :: #force_inline proc "system" (hwnd: HWND, iStart: c_int, plvfi: ^LV_FINDINFOW) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_FINDITEMW, cast(WPARAM)iStart, cast(LPARAM)uintptr(plvfi))
+}
+ListView_GetItemRect :: #force_inline proc "system" (hwnd: HWND, i: c_int, prc: ^RECT, code: c_int) -> BOOL {
+ if prc != nil {
+ prc.left = code
+ }
+ return cast(BOOL)SendMessageW(hwnd, LVM_GETITEMRECT, cast(WPARAM)i, cast(LPARAM)uintptr(prc))
+}
+ListView_SetItemPosition :: #force_inline proc "system" (hwnd: HWND, i: c_int, x,y: c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_SETITEMPOSITION, cast(WPARAM)i, MAKELPARAM(x,y))
+}
+ListView_GetItemPosition :: #force_inline proc "system" (hwnd: HWND, i: c_int, ppt: ^POINT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_GETITEMPOSITION, cast(WPARAM)i, cast(LPARAM)uintptr(ppt))
+}
+ListView_GetStringWidth :: #force_inline proc "system" (hwndLV: HWND, psz: LPCWSTR) -> c_int {
+ return cast(c_int)SendMessageW(hwndLV, LVM_GETSTRINGWIDTHW, 0, cast(LPARAM)uintptr(psz))
+}
+ListView_HitTest :: #force_inline proc "system" (hwndLV: HWND, pinfo: ^LV_HITTESTINFO) -> c_int {
+ return cast(c_int)SendMessageW(hwndLV, LVM_HITTEST, 0, cast(LPARAM)uintptr(pinfo))
+}
+ListView_EnsureVisible :: #force_inline proc "system" (hwndLV: HWND, i: c_int, fPartialOK: BOOL) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndLV, LVM_ENSUREVISIBLE, cast(WPARAM)i, MAKELPARAM(fPartialOK,0))
+}
+ListView_Scroll :: #force_inline proc "system" (hwndLV: HWND, dx,dy: c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndLV, LVM_SCROLL, cast(WPARAM)dx, cast(LPARAM)dy)
+}
+ListView_RedrawItems :: #force_inline proc "system" (hwndLV: HWND, iFirst,iLast: c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndLV, LVM_REDRAWITEMS, cast(WPARAM)iFirst, cast(LPARAM)iLast)
+}
+ListView_Arrange :: #force_inline proc "system" (hwndLV: HWND, code: UINT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndLV, LVM_ARRANGE, cast(WPARAM)code, 0)
+}
+ListView_EditLabel :: #force_inline proc "system" (hwndLV: HWND, i: c_int) -> HWND {
+ return cast(HWND)uintptr(SendMessageW(hwndLV, LVM_EDITLABELW, cast(WPARAM)i, 0))
+}
+ListView_GetEditControl :: #force_inline proc "system" (hwndLV: HWND) -> HWND {
+ return cast(HWND)uintptr(SendMessageW(hwndLV, LVM_GETEDITCONTROL, 0, 0))
+}
+ListView_GetColumn :: #force_inline proc "system" (hwnd: HWND, iCol: c_int, pcol: ^LV_COLUMNW) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_GETCOLUMNW, cast(WPARAM)iCol, cast(LPARAM)uintptr(pcol))
+}
+ListView_SetColumn :: #force_inline proc "system" (hwnd: HWND, iCol: c_int, pcol: ^LV_COLUMNW) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_SETCOLUMNW, cast(WPARAM)iCol, cast(LPARAM)uintptr(pcol))
+}
+ListView_InsertColumn :: #force_inline proc "system" (hwnd: HWND, iCol: c_int, pcol: ^LV_COLUMNW) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_INSERTCOLUMNW, cast(WPARAM)iCol, cast(LPARAM)uintptr(pcol))
+}
+ListView_DeleteColumn :: #force_inline proc "system" (hwnd: HWND, iCol: c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_DELETECOLUMN, cast(WPARAM)iCol, 0)
+}
+ListView_GetColumnWidth :: #force_inline proc "system" (hwnd: HWND, iCol: c_int) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_GETCOLUMNWIDTH, cast(WPARAM)iCol, 0)
+}
+ListView_SetColumnWidth :: #force_inline proc "system" (hwnd: HWND, iCol: c_int, cx: c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_SETCOLUMNWIDTH, cast(WPARAM)iCol, MAKELPARAM(cx,0))
+}
+ListView_GetHeader :: #force_inline proc "system" (hwnd: HWND) -> HWND {
+ return cast(HWND)uintptr(SendMessageW(hwnd, LVM_GETHEADER, 0, 0))
+}
+ListView_CreateDragImage :: #force_inline proc "system" (hwnd: HWND, i: c_int, lpptUpLeft: LPPOINT) -> HIMAGELIST {
+ return cast(HIMAGELIST)uintptr(SendMessageW(hwnd, LVM_CREATEDRAGIMAGE, cast(WPARAM)i, cast(LPARAM)uintptr(lpptUpLeft)))
+}
+ListView_GetViewRect :: #force_inline proc "system" (hwnd: HWND, prc: ^RECT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_GETVIEWRECT, 0, cast(LPARAM)uintptr(prc))
+}
+ListView_GetTextColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, LVM_GETTEXTCOLOR, 0, 0)
+}
+ListView_SetTextColor :: #force_inline proc "system" (hwnd: HWND, clrText: COLORREF) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_SETTEXTCOLOR, 0, cast(LPARAM)clrText)
+}
+ListView_GetTextBkColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, LVM_GETTEXTBKCOLOR, 0, 0)
+}
+ListView_SetTextBkColor :: #force_inline proc "system" (hwnd: HWND, clrTextBk: COLORREF) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_SETTEXTBKCOLOR, 0, cast(LPARAM)clrTextBk)
+}
+ListView_GetTopIndex :: #force_inline proc "system" (hwndLV: HWND) -> c_int {
+ return cast(c_int)SendMessageW(hwndLV, LVM_GETTOPINDEX, 0, 0)
+}
+ListView_GetCountPerPage :: #force_inline proc "system" (hwndLV: HWND) -> c_int {
+ return cast(c_int)SendMessageW(hwndLV, LVM_GETCOUNTPERPAGE, 0, 0)
+}
+ListView_GetOrigin :: #force_inline proc "system" (hwndLV: HWND, ppt: ^POINT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndLV, LVM_GETORIGIN, 0, cast(LPARAM)uintptr(ppt))
+}
+ListView_Update :: #force_inline proc "system" (hwndLV: HWND, i: c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndLV, LVM_UPDATE, cast(WPARAM)i, 0)
+}
+ListView_SetItemState :: #force_inline proc "system" (hwndLV: HWND, i: c_int, data: UINT, mask: UINT) {
+ item := LV_ITEMW {
+ stateMask = mask,
+ state = data,
+ }
+ SendMessageW(hwndLV, LVM_SETITEMSTATE, cast(WPARAM)i, cast(LPARAM)uintptr(&item))
+}
+ListView_SetCheckState :: #force_inline proc "system" (hwndLV: HWND, i: c_int, fCheck: BOOL) {
+ ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK(2 if fCheck else 1), LVIS_STATEIMAGEMASK)
+}
+ListView_GetItemState :: #force_inline proc "system" (hwndLV: HWND, i: c_int, mask: UINT) -> UINT {
+ return cast(UINT)SendMessageW(hwndLV, LVM_GETITEMSTATE, cast(WPARAM)i, cast(LPARAM)mask)
+}
+ListView_GetCheckState :: #force_inline proc "system" (hwndLV: HWND, i: c_int) -> UINT {
+ return ((cast(UINT)SendMessageW(hwndLV, LVM_GETITEMSTATE, cast(WPARAM)i, cast(LPARAM)LVIS_STATEIMAGEMASK)) >> 12) - 1
+}
+ListView_GetItemText :: #force_inline proc "system" (hwndLV: HWND, i: c_int, iSubItem: c_int, pszText: LPWSTR, cchTextMax: c_int) {
+ item := LV_ITEMW {
+ iSubItem = iSubItem,
+ cchTextMax = cchTextMax,
+ pszText = pszText,
+ }
+ SendMessageW(hwndLV, LVM_GETITEMTEXTW, cast(WPARAM)i, cast(LPARAM)uintptr(&item))
+}
+ListView_SetItemText :: #force_inline proc "system" (hwndLV: HWND, i: c_int, iSubItem: c_int, pszText: LPWSTR) {
+ item := LV_ITEMW {
+ iSubItem = iSubItem,
+ pszText = pszText,
+ }
+ SendMessageW(hwndLV, LVM_SETITEMTEXTW, cast(WPARAM)i, cast(LPARAM)uintptr(&item))
+}
+ListView_SetItemCount :: #force_inline proc "system" (hwndLV: HWND, cItems: c_int) {
+ SendMessageW(hwndLV, LVM_SETITEMCOUNT, cast(WPARAM)cItems, 0)
+}
+ListView_SetItemCountEx :: #force_inline proc "system" (hwndLV: HWND, cItems: c_int, dwFlags: DWORD) {
+ SendMessageW(hwndLV, LVM_SETITEMCOUNT, cast(WPARAM)cItems, cast(LPARAM)dwFlags)
+}
+ListView_SortItems :: #force_inline proc "system" (hwndLV: HWND, pfnCompare: PFNLVCOMPARE, lpUser: LPARAM) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndLV, LVM_SORTITEMS, cast(WPARAM)lpUser, cast(LPARAM)transmute(uintptr)(pfnCompare))
+}
+ListView_SetItemPosition32 :: #force_inline proc "system" (hwndLV: HWND, i: c_int, x0,y0: c_int) {
+ ptNewPos := POINT {
+ x = x0,
+ y = y0,
+ }
+ SendMessageW(hwndLV, LVM_SETITEMPOSITION32, cast(WPARAM)i, cast(LPARAM)uintptr(&ptNewPos))
+}
+ListView_GetSelectedCount :: #force_inline proc "system" (hwndLV: HWND) -> UINT {
+ return cast(UINT)SendMessageW(hwndLV, LVM_GETSELECTEDCOUNT, 0, 0)
+}
+ListView_GetItemSpacing :: #force_inline proc "system" (hwndLV: HWND, fSmall: BOOL) -> DWORD {
+ return cast(DWORD)SendMessageW(hwndLV, LVM_GETITEMSPACING, cast(WPARAM)fSmall, 0)
+}
+ListView_GetISearchString :: #force_inline proc "system" (hwndLV: HWND, lpsz: LPWSTR) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndLV, LVM_GETISEARCHSTRINGW, 0, cast(LPARAM)uintptr(lpsz))
+}
+ListView_SetIconSpacing :: #force_inline proc "system" (hwndLV: HWND, cx,cy: c_int) -> DWORD {
+ return cast(DWORD)SendMessageW(hwndLV, LVM_SETICONSPACING, 0, cast(LPARAM)MAKELONG(cx,cy))
+}
+ListView_SetExtendedListViewStyle :: #force_inline proc "system" (hwndLV: HWND, dw: DWORD) -> DWORD {
+ return cast(DWORD)SendMessageW(hwndLV, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, cast(LPARAM)dw)
+}
+ListView_SetExtendedListViewStyleEx :: #force_inline proc "system" (hwndLV: HWND, dwMask: DWORD, dw: DWORD) -> DWORD {
+ return cast(DWORD)SendMessageW(hwndLV, LVM_SETEXTENDEDLISTVIEWSTYLE, cast(WPARAM)dwMask, cast(LPARAM)dw)
+}
+ListView_GetSubItemRect :: #force_inline proc "system" (hwnd: HWND, iItem: c_int, iSubItem: c_int, code: c_int, prc: LPRECT) -> BOOL {
+ if prc != nil {
+ prc.top = iSubItem
+ prc.left = code
+ }
+ return cast(BOOL)SendMessageW(hwnd, LVM_GETSUBITEMRECT, cast(WPARAM)iItem, cast(LPARAM)uintptr(prc))
+}
+ListView_SubItemHitTest :: #force_inline proc "system" (hwnd: HWND, plvhti: LPLVHITTESTINFO) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_SUBITEMHITTEST, 0, cast(LPARAM)uintptr(plvhti))
+}
+ListView_SetColumnOrderArray :: #force_inline proc "system" (hwnd: HWND, iCount: c_int, pi: LPINT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_SETCOLUMNORDERARRAY, cast(WPARAM)iCount, cast(LPARAM)uintptr(pi))
+}
+ListView_GetColumnOrderArray :: #force_inline proc "system" (hwnd: HWND, iCount: c_int, pi: LPINT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_GETCOLUMNORDERARRAY, cast(WPARAM)iCount, cast(LPARAM)uintptr(pi))
+}
+ListView_SetHotItem :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_SETHOTITEM, cast(WPARAM)i, 0)
+}
+ListView_GetHotItem :: #force_inline proc "system" (hwnd: HWND) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_GETHOTITEM, 0, 0)
+}
+ListView_SetHotCursor :: #force_inline proc "system" (hwnd: HWND, hcur: HCURSOR) -> HCURSOR {
+ return cast(HCURSOR)uintptr(SendMessageW(hwnd, LVM_SETHOTCURSOR, 0, cast(LPARAM)uintptr(hcur)))
+}
+ListView_GetHotCursor :: #force_inline proc "system" (hwnd: HWND) -> HCURSOR {
+ return cast(HCURSOR)uintptr(SendMessageW(hwnd, LVM_GETHOTCURSOR, 0, 0))
+}
+ListView_ApproximateViewRect :: #force_inline proc "system" (hwnd: HWND, iWidth,iHeight: c_int, iCount: c_int) -> DWORD {
+ return cast(DWORD)SendMessageW(hwnd, LVM_APPROXIMATEVIEWRECT, cast(WPARAM)iCount, MAKELPARAM(iWidth,iHeight))
+}
+ListView_SetWorkAreas :: #force_inline proc "system" (hwnd: HWND, nWorkAreas: UINT, prc: ^RECT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_SETWORKAREAS, cast(WPARAM)nWorkAreas, cast(LPARAM)uintptr(prc))
+}
+ListView_GetWorkAreas :: #force_inline proc "system" (hwnd: HWND, nWorkAreas: UINT, prc: ^RECT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_GETWORKAREAS, cast(WPARAM)nWorkAreas, cast(LPARAM)uintptr(prc))
+}
+ListView_GetNumberOfWorkAreas :: #force_inline proc "system" (hwnd: HWND, pnWorkAreas: ^UINT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_GETNUMBEROFWORKAREAS, 0, cast(LPARAM)uintptr(pnWorkAreas))
+}
+ListView_GetSelectionMark :: #force_inline proc "system" (hwnd: HWND) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_GETSELECTIONMARK, 0, 0)
+}
+ListView_SetSelectionMark :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_SETSELECTIONMARK, 0, cast(LPARAM)i)
+}
+ListView_SetHoverTime :: #force_inline proc "system" (hwndLV: HWND, dwHoverTimeMs: DWORD) -> DWORD {
+ return cast(DWORD)SendMessageW(hwndLV, LVM_SETHOVERTIME, 0, cast(LPARAM)dwHoverTimeMs)
+}
+ListView_GetHoverTime :: #force_inline proc "system" (hwndLV: HWND) -> DWORD {
+ return cast(DWORD)SendMessageW(hwndLV, LVM_GETHOVERTIME, 0, 0)
+}
+ListView_SetToolTips :: #force_inline proc "system" (hwndLV: HWND, hwndNewHwnd: HWND) -> HWND {
+ return cast(HWND)uintptr(SendMessageW(hwndLV, LVM_SETTOOLTIPS, cast(WPARAM)hwndNewHwnd, 0))
+}
+ListView_GetToolTips :: #force_inline proc "system" (hwndLV: HWND) -> HWND {
+ return cast(HWND)uintptr(SendMessageW(hwndLV, LVM_GETTOOLTIPS, 0, 0))
+}
+ListView_SortItemsEx :: #force_inline proc "system" (hwndLV: HWND, pfnCompare: PFNLVCOMPARE, lpUser: LPARAM) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndLV, LVM_SORTITEMSEX, cast(WPARAM)lpUser, cast(LPARAM)transmute(uintptr)(pfnCompare))
+}
+ListView_SetSelectedColumn :: #force_inline proc "system" (hwnd: HWND, iCol: c_int) {
+ SendMessageW(hwnd, LVM_SETSELECTEDCOLUMN, cast(WPARAM)iCol, 0)
+}
+ListView_SetView :: #force_inline proc "system" (hwnd: HWND, iView: DWORD) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_SETVIEW, cast(WPARAM)iView, 0)
+}
+ListView_GetView :: #force_inline proc "system" (hwnd: HWND) -> DWORD {
+ return cast(DWORD)SendMessageW(hwnd, LVM_GETVIEW, 0, 0)
+}
+ListView_InsertGroup :: #force_inline proc "system" (hwnd: HWND, index: c_int, pgrp: PLVGROUP) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_INSERTGROUP, cast(WPARAM)index, cast(LPARAM)uintptr(pgrp))
+}
+ListView_SetGroupInfo :: #force_inline proc "system" (hwnd: HWND, iGroupId: c_int, pgrp: PLVGROUP) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_SETGROUPINFO, cast(WPARAM)iGroupId, cast(LPARAM)uintptr(pgrp))
+}
+ListView_GetGroupInfo :: #force_inline proc "system" (hwnd: HWND, iGroupId: c_int, pgrp: PLVGROUP) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_GETGROUPINFO, cast(WPARAM)iGroupId, cast(LPARAM)uintptr(pgrp))
+}
+ListView_RemoveGroup :: #force_inline proc "system" (hwnd: HWND, iGroupId: c_int) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_REMOVEGROUP, cast(WPARAM)iGroupId, 0)
+}
+ListView_MoveGroup :: #force_inline proc "system" (hwnd: HWND, iGroupId: c_int, toIndex: c_int) {
+ SendMessageW(hwnd, LVM_MOVEGROUP, cast(WPARAM)iGroupId, cast(LPARAM)toIndex)
+}
+ListView_MoveItemToGroup :: #force_inline proc "system" (hwnd: HWND, idItemFrom: c_int, idGroupTo: c_int) {
+ SendMessageW(hwnd, LVM_MOVEITEMTOGROUP, cast(WPARAM)idItemFrom, cast(LPARAM)idGroupTo)
+}
+ListView_SetGroupMetrics :: #force_inline proc "system" (hwnd: HWND, pGroupMetrics: PLVGROUPMETRICS) {
+ SendMessageW(hwnd, LVM_SETGROUPMETRICS, 0, cast(LPARAM)uintptr(pGroupMetrics))
+}
+ListView_GetGroupMetrics :: #force_inline proc "system" (hwnd: HWND, pGroupMetrics: PLVGROUPMETRICS) {
+ SendMessageW(hwnd, LVM_GETGROUPMETRICS, 0, cast(LPARAM)uintptr(pGroupMetrics))
+}
+ListView_EnableGroupView :: #force_inline proc "system" (hwnd: HWND, fEnable: BOOL) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_ENABLEGROUPVIEW, cast(WPARAM)fEnable, 0)
+}
+ListView_SortGroups :: #force_inline proc "system" (hwnd: HWND, pfnGroupCompare: PFNLVGROUPCOMPARE, pUser: rawptr) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_SORTGROUPS, cast(WPARAM)transmute(uintptr)(pfnGroupCompare), cast(LPARAM)uintptr(pUser))
+}
+ListView_InsertGroupSorted :: #force_inline proc "system" (hwnd: HWND, structInsert: PLVINSERTGROUPSORTED) {
+ SendMessageW(hwnd, LVM_INSERTGROUPSORTED, cast(WPARAM)uintptr(structInsert), 0)
+}
+ListView_RemoveAllGroups :: #force_inline proc "system" (hwnd: HWND) {
+ SendMessageW(hwnd, LVM_REMOVEALLGROUPS, 0, 0)
+}
+ListView_HasGroup :: #force_inline proc "system" (hwnd: HWND, dwGroupId: c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_HASGROUP, cast(WPARAM)dwGroupId, 0)
+}
+ListView_SetTileViewInfo :: #force_inline proc "system" (hwnd: HWND, ptvi: PLVTILEVIEWINFO) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_SETTILEVIEWINFO, 0, cast(LPARAM)uintptr(ptvi))
+}
+ListView_GetTileViewInfo :: #force_inline proc "system" (hwnd: HWND, ptvi: PLVTILEVIEWINFO) {
+ SendMessageW(hwnd, LVM_GETTILEVIEWINFO, 0, cast(LPARAM)uintptr(ptvi))
+}
+ListView_SetTileInfo :: #force_inline proc "system" (hwnd: HWND, pti: PLVTILEINFO) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_SETTILEINFO, 0, cast(LPARAM)uintptr(pti))
+}
+ListView_GetTileInfo :: #force_inline proc "system" (hwnd: HWND, pti: PLVTILEINFO) {
+ SendMessageW(hwnd, LVM_GETTILEINFO, 0, cast(LPARAM)uintptr(pti))
+}
+ListView_SetInsertMark :: #force_inline proc "system" (hwnd: HWND, lvim: LPLVINSERTMARK) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_SETINSERTMARK, 0, cast(LPARAM)uintptr(lvim))
+}
+ListView_GetInsertMark :: #force_inline proc "system" (hwnd: HWND, lvim: LPLVINSERTMARK) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_GETINSERTMARK, 0, cast(LPARAM)uintptr(lvim))
+}
+ListView_InsertMarkHitTest :: #force_inline proc "system" (hwnd: HWND, point: LPPOINT, lvim: LPLVINSERTMARK) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_INSERTMARKHITTEST, cast(WPARAM)uintptr(point), cast(LPARAM)uintptr(lvim))
+}
+ListView_GetInsertMarkRect :: #force_inline proc "system" (hwnd: HWND, rc: LPRECT) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, LVM_GETINSERTMARKRECT, 0, cast(LPARAM)uintptr(rc))
+}
+ListView_SetInsertMarkColor :: #force_inline proc "system" (hwnd: HWND, color: COLORREF) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, LVM_SETINSERTMARKCOLOR, 0, cast(LPARAM)color)
+}
+ListView_GetInsertMarkColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, LVM_GETINSERTMARKCOLOR, 0, 0)
+}
+ListView_SetInfoTip :: #force_inline proc "system" (hwndLV: HWND, plvInfoTip: PLVSETINFOTIP) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndLV, LVM_SETINFOTIP, 0, cast(LPARAM)uintptr(plvInfoTip))
+}
+ListView_GetSelectedColumn :: #force_inline proc "system" (hwnd: HWND) -> UINT {
+ return cast(UINT)SendMessageW(hwnd, LVM_GETSELECTEDCOLUMN, 0, 0)
+}
+ListView_IsGroupViewEnabled :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_ISGROUPVIEWENABLED, 0, 0)
+}
+ListView_GetOutlineColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, LVM_GETOUTLINECOLOR, 0, 0)
+}
+ListView_SetOutlineColor :: #force_inline proc "system" (hwnd: HWND, color: COLORREF) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, LVM_SETOUTLINECOLOR, 0, cast(LPARAM)color)
+}
+ListView_CancelEditLabel :: #force_inline proc "system" (hwnd: HWND) {
+ SendMessageW(hwnd, LVM_CANCELEDITLABEL, 0, 0)
+}
+ListView_MapIndexToID :: #force_inline proc "system" (hwnd: HWND, index: UINT) -> UINT {
+ return cast(UINT)SendMessageW(hwnd, LVM_MAPINDEXTOID, cast(WPARAM)index, 0)
+}
+ListView_MapIDToIndex :: #force_inline proc "system" (hwnd: HWND, id: UINT) -> UINT {
+ return cast(UINT)SendMessageW(hwnd, LVM_MAPIDTOINDEX, cast(WPARAM)id, 0)
+}
+ListView_IsItemVisible :: #force_inline proc "system" (hwnd: HWND, index: UINT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, LVM_ISITEMVISIBLE, cast(WPARAM)index, 0)
+}
+
+// Tree View Control
+HTREEITEM :: distinct rawptr
+
+TVIF_TEXT :: 0x01
+TVIF_IMAGE :: 0x02
+TVIF_PARAM :: 0x04
+TVIF_STATE :: 0x08
+TVIF_HANDLE :: 0x10
+TVIF_SELECTEDIMAGE :: 0x20
+TVIF_CHILDREN :: 0x40
+TVIF_INTEGRAL :: 0x80
+
+TVIS_SELECTED :: 0x02
+TVIS_CUT :: 0x04
+TVIS_DROPHILITED :: 0x08
+TVIS_BOLD :: 0x10
+TVIS_EXPANDED :: 0x20
+TVIS_EXPANDEDONCE :: 0x40
+TVIS_EXPANDPARTIAL :: 0x80
+
+TVIS_OVERLAYMASK :: 0x0F00
+TVIS_STATEIMAGEMASK :: 0xF000
+TVIS_USERMASK :: 0xF000
+
+I_CHILDRENCALLBACK :: (-1)
+
+TVI_ROOT :: cast(HTREEITEM)~uintptr(0x10000 - 1)
+TVI_FIRST :: cast(HTREEITEM)~uintptr(0x0FFFF - 1)
+TVI_LAST :: cast(HTREEITEM)~uintptr(0x0FFFE - 1)
+TVI_SORT :: cast(HTREEITEM)~uintptr(0x0FFFD - 1)
+
+TVN_SELCHANGINGA :: (TVN_FIRST-1)
+TVN_SELCHANGINGW :: (TVN_FIRST-50)
+TVN_SELCHANGEDA :: (TVN_FIRST-2)
+TVN_SELCHANGEDW :: (TVN_FIRST-51)
+TVN_GETDISPINFOA :: (TVN_FIRST-3)
+TVN_GETDISPINFOW :: (TVN_FIRST-52)
+TVN_SETDISPINFOA :: (TVN_FIRST-4)
+TVN_SETDISPINFOW :: (TVN_FIRST-53)
+TVN_ITEMEXPANDINGA :: (TVN_FIRST-5)
+TVN_ITEMEXPANDINGW :: (TVN_FIRST-54)
+TVN_ITEMEXPANDEDA :: (TVN_FIRST-6)
+TVN_ITEMEXPANDEDW :: (TVN_FIRST-55)
+TVN_BEGINDRAGA :: (TVN_FIRST-7)
+TVN_BEGINDRAGW :: (TVN_FIRST-56)
+TVN_BEGINRDRAGA :: (TVN_FIRST-8)
+TVN_BEGINRDRAGW :: (TVN_FIRST-57)
+TVN_DELETEITEMA :: (TVN_FIRST-9)
+TVN_DELETEITEMW :: (TVN_FIRST-58)
+TVN_BEGINLABELEDITA :: (TVN_FIRST-10)
+TVN_BEGINLABELEDITW :: (TVN_FIRST-59)
+TVN_ENDLABELEDITA :: (TVN_FIRST-11)
+TVN_ENDLABELEDITW :: (TVN_FIRST-60)
+TVN_KEYDOWN :: (TVN_FIRST-12)
+TVN_GETINFOTIPA :: (TVN_FIRST-13)
+TVN_GETINFOTIPW :: (TVN_FIRST-14)
+TVN_SINGLEEXPAND :: (TVN_FIRST-15)
+
+TVC_UNKNOWN :: 0x0
+TVC_BYMOUSE :: 0x1
+TVC_BYKEYBOARD :: 0x2
+
+TVIF_DI_SETITEM :: 0x1000
+
+TVNRET_DEFAULT :: 0
+TVNRET_SKIPOLD :: 1
+TVNRET_SKIPNEW :: 2
+
+TVCDRF_NOIMAGES :: 0x10000
+
+TVITEMW :: struct {
+ mask: UINT,
+ hItem: HTREEITEM,
+ state: UINT,
+ stateMask: UINT,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ iSelectedImage: c_int,
+ cChildren: c_int,
+ lParam: LPARAM,
+}
+TV_ITEMW :: TVITEMW
+LPTVITEMW :: ^TVITEMW
+LPTV_ITEMW :: LPTVITEMW
+
+TVITEMEXW :: struct {
+ mask: UINT,
+ hItem: HTREEITEM,
+ state: UINT,
+ stateMask: UINT,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ iSelectedImage: c_int,
+ cChildren: c_int,
+ lParam: LPARAM,
+ iIntegral: c_int,
+}
+TV_ITEMEXW :: TVITEMEXW
+LPTVITEMEXW :: ^TVITEMEXW
+LPTV_ITEMEXW :: LPTVITEMEXW
+
+TVINSERTSTRUCTW :: struct {
+ hParent: HTREEITEM,
+ hInsertAfter: HTREEITEM,
+ _: struct #raw_union {
+ itemex: TVITEMEXW,
+ item: TV_ITEMW,
+ }
+}
+TV_INSERTSTRUCTW :: TVINSERTSTRUCTW
+LPTVINSERTSTRUCTW :: ^TVINSERTSTRUCTW
+LPTV_INSERTSTRUCTW :: LPTVINSERTSTRUCTW
+
+TVHITTESTINFO :: struct {
+ pt: POINT,
+ flags: UINT,
+ hItem: HTREEITEM,
+}
+TV_HITTESTINFO :: TVHITTESTINFO
+LPTVHITTESTINFO :: ^TVHITTESTINFO
+LPTV_HITTESTINFO :: LPTVHITTESTINFO
+
+TVSORTCB :: struct {
+ hParent: HTREEITEM,
+ lpfnCompare: PFNTVCOMPARE,
+ lParam: LPARAM,
+}
+TV_SORTCB :: TVSORTCB
+LPTVSORTCB :: ^TVSORTCB
+LPTV_SORTCB :: LPTVSORTCB
+
+NMTREEVIEWW :: struct {
+ hdr: NMHDR,
+ action: UINT,
+ itemOld: TVITEMW,
+ itemNew: TVITEMW,
+ ptDrag: POINT,
+}
+NM_TREEVIEWW :: NMTREEVIEWW
+LPNMTREEVIEWW :: ^NMTREEVIEWW
+LPNM_TREEVIEWW :: LPNMTREEVIEWW
+
+NMTVDISPINFOW :: struct {
+ hdr: NMHDR,
+ item: TVITEMW,
+}
+TV_DISPINFOW :: NMTVDISPINFOW
+LPNMTVDISPINFOW :: ^NMTVDISPINFOW
+
+NMTVDISPINFOEXW :: struct {
+ hdr: NMHDR,
+ item: TVITEMEXW,
+}
+TV_DISPINFOEXW :: NMTVDISPINFOEXW
+LPNMTVDISPINFOEXW :: ^NMTVDISPINFOEXW
+
+NMTVKEYDOWN :: struct #packed {
+ hdr: NMHDR,
+ wVKey: WORD,
+ flags: UINT,
+}
+TV_KEYDOWN :: NMTVKEYDOWN
+LPNMTVKEYDOWN :: ^NMTVKEYDOWN
+
+NMTVCUSTOMDRAW :: struct {
+ nmcd: NMCUSTOMDRAW,
+ clrText: COLORREF,
+ clrTextBk: COLORREF,
+ iLevel: c_int,
+}
+LPNMTVCUSTOMDRAW :: ^NMTVCUSTOMDRAW
+
+NMTVGETINFOTIPW :: struct {
+ hdr: NMHDR,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ hItem: HTREEITEM,
+ lParam: LPARAM,
+}
+TV_GETINFOTIPW :: NMTVGETINFOTIPW
+LPNMTVGETINFOTIPW :: ^NMTVGETINFOTIPW
+
+PFNTVCOMPARE :: #type proc "system" (lParam1,lParam2: LPARAM, lParamSort: LPARAM) -> c_int
+
+TreeView_InsertItem :: #force_inline proc "system" (hwnd: HWND, lpis: LPTV_INSERTSTRUCTW) -> HTREEITEM {
+ return cast(HTREEITEM)uintptr(SendMessageW(hwnd, TVM_INSERTITEMW, 0, cast(LPARAM)uintptr(lpis)))
+}
+TreeView_DeleteItem :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_DELETEITEM, 0, cast(LPARAM)uintptr(hitem))
+}
+TreeView_DeleteAllItems :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_DELETEITEM, 0, cast(LPARAM)transmute(uintptr)(TVI_ROOT))
+}
+TreeView_Expand :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM, code: UINT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_EXPAND, cast(WPARAM)code, cast(LPARAM)uintptr(hitem))
+}
+TreeView_GetItemRect :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM, prc: ^RECT, code: UINT) -> BOOL {
+ alias: struct #raw_union {
+ rc: ^RECT,
+ hitem: ^HTREEITEM,
+ }
+
+ alias.rc = prc
+ alias.hitem^ = hitem
+
+ return cast(BOOL)SendMessageW(hwnd, TVM_GETITEMRECT, cast(WPARAM)code, cast(LPARAM)uintptr(prc))
+}
+TreeView_GetCount :: #force_inline proc "system" (hwnd: HWND) -> UINT {
+ return cast(UINT)SendMessageW(hwnd, TVM_GETCOUNT, 0, 0)
+}
+TreeView_GetIndent :: #force_inline proc "system" (hwnd: HWND) -> UINT {
+ return cast(UINT)SendMessageW(hwnd, TVM_GETINDENT, 0, 0)
+}
+TreeView_SetIndent :: #force_inline proc "system" (hwnd: HWND, indent: UINT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_SETINDENT, cast(WPARAM)indent, 0)
+}
+TreeView_GetImageList :: #force_inline proc "system" (hwnd: HWND, iImage: INT) -> HIMAGELIST {
+ return cast(HIMAGELIST)uintptr(SendMessageW(hwnd, TVM_GETIMAGELIST, cast(WPARAM)iImage, 0))
+}
+TreeView_SetImageList :: #force_inline proc "system" (hwnd: HWND, himl: HIMAGELIST, iImage: INT) -> HIMAGELIST {
+ return cast(HIMAGELIST)uintptr(SendMessageW(hwnd, TVM_SETIMAGELIST, cast(WPARAM)iImage, cast(LPARAM)uintptr(himl)))
+}
+TreeView_GetNextItem :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM, code: UINT) -> HTREEITEM {
+ return cast(HTREEITEM)uintptr(SendMessageW(hwnd, TVM_GETNEXTITEM, cast(WPARAM)code, cast(LPARAM)uintptr(hitem)))
+}
+TreeView_GetChild :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HTREEITEM {
+ return TreeView_GetNextItem(hwnd, hitem, TVGN_CHILD)
+}
+TreeView_GetNextSibling :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HTREEITEM {
+ return TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT)
+}
+TreeView_GetPrevSibling :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HTREEITEM {
+ return TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUS)
+}
+TreeView_GetParent :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HTREEITEM {
+ return TreeView_GetNextItem(hwnd, hitem, TVGN_PARENT)
+}
+TreeView_GetFirstVisible :: #force_inline proc "system" (hwnd: HWND) -> HTREEITEM {
+ return TreeView_GetNextItem(hwnd, nil, TVGN_FIRSTVISIBLE)
+}
+TreeView_GetNextVisible :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HTREEITEM {
+ return TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE)
+}
+TreeView_GetPrevVisible :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HTREEITEM {
+ return TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE)
+}
+TreeView_GetSelection :: #force_inline proc "system" (hwnd: HWND) -> HTREEITEM {
+ return TreeView_GetNextItem(hwnd, nil, TVGN_CARET)
+}
+TreeView_GetDropHilight :: #force_inline proc "system" (hwnd: HWND) -> HTREEITEM {
+ return TreeView_GetNextItem(hwnd, nil, TVGN_DROPHILITE)
+}
+TreeView_GetRoot :: #force_inline proc "system" (hwnd: HWND) -> HTREEITEM {
+ return TreeView_GetNextItem(hwnd, nil, TVGN_ROOT)
+}
+TreeView_GetLastVisible :: #force_inline proc "system" (hwnd: HWND) -> HTREEITEM {
+ return TreeView_GetNextItem(hwnd, nil, TVGN_LASTVISIBLE)
+}
+TreeView_Select :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM, code: UINT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_SELECTITEM, cast(WPARAM)code, cast(LPARAM)uintptr(hitem))
+}
+TreeView_SelectItem :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> BOOL {
+ return TreeView_Select(hwnd, hitem, TVGN_CARET)
+}
+TreeView_SelectDropTarget :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> BOOL {
+ return TreeView_Select(hwnd, hitem, TVGN_DROPHILITE)
+}
+TreeView_SelectSetFirstVisible :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> BOOL {
+ return TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE)
+}
+TreeView_GetItem :: #force_inline proc "system" (hwnd: HWND, pitem: ^TV_ITEMW) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_GETITEMW, 0, cast(LPARAM)uintptr(pitem))
+}
+TreeView_SetItem :: #force_inline proc "system" (hwnd: HWND, pitem: ^TV_ITEMW) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_SETITEMW, 0, cast(LPARAM)uintptr(pitem))
+}
+TreeView_EditLabel :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HWND {
+ return cast(HWND)uintptr(SendMessageW(hwnd, TVM_EDITLABELW, 0, cast(LPARAM)uintptr(hitem)))
+}
+TreeView_GetEditControl :: #force_inline proc "system" (hwnd: HWND) -> HWND {
+ return cast(HWND)uintptr(SendMessageW(hwnd, TVM_GETEDITCONTROL, 0, 0))
+}
+TreeView_GetVisibleCount :: #force_inline proc "system" (hwnd: HWND) -> UINT {
+ return cast(UINT)SendMessageW(hwnd, TVM_GETVISIBLECOUNT, 0, 0)
+}
+TreeView_HitTest :: #force_inline proc "system" (hwnd: HWND, lpht: LPTV_HITTESTINFO) -> HTREEITEM {
+ return cast(HTREEITEM)uintptr(SendMessageW(hwnd, TVM_HITTEST, 0, cast(LPARAM)uintptr(lpht)))
+}
+TreeView_CreateDragImage :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HIMAGELIST {
+ return cast(HIMAGELIST)uintptr(SendMessageW(hwnd, TVM_CREATEDRAGIMAGE, 0, cast(LPARAM)uintptr(hitem)))
+}
+TreeView_SortChildren :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM, recurse: BOOL) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_SORTCHILDREN, cast(WPARAM)recurse, cast(LPARAM)uintptr(hitem))
+}
+TreeView_EnsureVisible :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_ENSUREVISIBLE, 0, cast(LPARAM)uintptr(hitem))
+}
+TreeView_SortChildrenCB :: #force_inline proc "system" (hwnd: HWND, psort: LPTVSORTCB, recurse: BOOL) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_SORTCHILDRENCB, cast(WPARAM)recurse, cast(LPARAM)uintptr(psort))
+}
+TreeView_EndEditLabelNow :: #force_inline proc "system" (hwnd: HWND, fCancel: BOOL) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_ENDEDITLABELNOW, cast(WPARAM)fCancel, 0)
+}
+TreeView_SetToolTips :: #force_inline proc "system" (hwnd: HWND, hwndTT: HWND) -> HWND {
+ return cast(HWND)uintptr(SendMessageW(hwnd, TVM_SETTOOLTIPS, cast(WPARAM)uintptr(hwndTT), 0))
+}
+TreeView_GetToolTips :: #force_inline proc "system" (hwnd: HWND) -> HWND {
+ return cast(HWND)uintptr(SendMessageW(hwnd, TVM_GETTOOLTIPS, 0, 0))
+}
+TreeView_GetISearchString :: #force_inline proc "system" (hwnd: HWND, lpsz: LPWSTR) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_GETISEARCHSTRINGW, 0, cast(LPARAM)uintptr(lpsz))
+}
+TreeView_SetInsertMark :: #force_inline proc "system" (hwnd: HWND, hItem: HTREEITEM, fAfter: BOOL) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_SETINSERTMARK, cast(WPARAM)fAfter, cast(LPARAM)uintptr(hItem))
+}
+TreeView_SetUnicodeFormat :: #force_inline proc "system" (hwnd: HWND, fUnicode: BOOL) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_SETUNICODEFORMAT, cast(WPARAM)fUnicode, 0)
+}
+TreeView_GetUnicodeFormat :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TVM_GETUNICODEFORMAT, 0, 0)
+}
+TreeView_SetItemHeight :: #force_inline proc "system" (hwnd: HWND, iHeight: c_int) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, TVM_SETITEMHEIGHT, cast(WPARAM)iHeight, 0)
+}
+TreeView_GetItemHeight :: #force_inline proc "system" (hwnd: HWND) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, TVM_GETITEMHEIGHT, 0, 0)
+}
+TreeView_SetBkColor :: #force_inline proc "system" (hwnd: HWND, clr: COLORREF) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, TVM_SETBKCOLOR, 0, cast(LPARAM)clr)
+}
+TreeView_SetTextColor :: #force_inline proc "system" (hwnd: HWND, clr: COLORREF) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, TVM_SETTEXTCOLOR, 0, cast(LPARAM)clr)
+}
+TreeView_GetBkColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, TVM_GETBKCOLOR, 0, 0)
+}
+TreeView_GetTextColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, TVM_GETTEXTCOLOR, 0, 0)
+}
+TreeView_SetScrollTime :: #force_inline proc "system" (hwnd: HWND, uTime: UINT) -> UINT {
+ return cast(UINT)SendMessageW(hwnd, TVM_SETSCROLLTIME, cast(WPARAM)uTime, 0)
+}
+TreeView_GetScrollTime :: #force_inline proc "system" (hwnd: HWND) -> UINT {
+ return cast(UINT)SendMessageW(hwnd, TVM_GETSCROLLTIME, 0, 0)
+}
+TreeView_SetInsertMarkColor :: #force_inline proc "system" (hwnd: HWND, clr: COLORREF) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, TVM_SETINSERTMARKCOLOR, 0, cast(LPARAM)clr)
+}
+TreeView_GetInsertMarkColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, TVM_GETINSERTMARKCOLOR, 0, 0)
+}
+TreeView_SetItemState :: #force_inline proc "system" (hwndTV: HWND, hti: HTREEITEM, data: UINT, mask: UINT) {
+ item := TVITEMW {
+ mask = TVIF_STATE,
+ hItem = hti,
+ stateMask = mask,
+ state = data,
+ }
+ SendMessageW(hwndTV, TVM_SETITEMW, 0, cast(LPARAM)uintptr(&item))
+}
+TreeView_SetCheckState :: #force_inline proc "system" (hwndTV: HWND, hti: HTREEITEM, fCheck: BOOL) {
+ TreeView_SetItemState(hwndTV, hti, INDEXTOSTATEIMAGEMASK(2 if fCheck else 1), TVIS_STATEIMAGEMASK)
+}
+TreeView_GetItemState :: #force_inline proc "system" (hwndTV: HWND, hti: HTREEITEM, mask: UINT) -> UINT {
+ return cast(UINT)SendMessageW(hwndTV, TVM_GETITEMSTATE, cast(WPARAM)uintptr(hti), cast(LPARAM)mask)
+}
+TreeView_GetCheckState :: #force_inline proc "system" (hwndTV: HWND, hti: HTREEITEM) -> UINT {
+ return ((cast(UINT)SendMessageW(hwndTV, TVM_GETITEMSTATE, cast(WPARAM)uintptr(hti), cast(LPARAM)TVIS_STATEIMAGEMASK)) >> 12) - 1
+}
+TreeView_SetLineColor :: #force_inline proc "system" (hwnd: HWND, clr: COLORREF) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, TVM_SETLINECOLOR, 0, cast(LPARAM)clr)
+}
+TreeView_GetLineColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
+ return cast(COLORREF)SendMessageW(hwnd, TVM_GETLINECOLOR, 0, 0)
+}
+TreeView_MapAccIDToHTREEITEM :: #force_inline proc "system" (hwnd: HWND, id: UINT) -> HTREEITEM {
+ return cast(HTREEITEM)uintptr(SendMessageW(hwnd, TVM_MAPACCIDTOHTREEITEM, cast(WPARAM)id, 0))
+}
+TreeView_MapHTREEITEMToAccID :: #force_inline proc "system" (hwnd: HWND, htreeitem: HTREEITEM) -> UINT {
+ return cast(UINT)SendMessageW(hwnd, TVM_MAPHTREEITEMTOACCID, cast(WPARAM)uintptr(htreeitem), 0)
+}
+
+// Combo Box Ex Control
+CBEIF_TEXT :: 0x01
+CBEIF_IMAGE :: 0x02
+CBEIF_SELECTEDIMAGE :: 0x04
+CBEIF_OVERLAY :: 0x08
+CBEIF_INDENT :: 0x10
+CBEIF_LPARAM :: 0x20
+
+CBEIF_DI_SETITEM :: 0x10000000
+
+CBES_EX_NOEDITIMAGE :: 0x01
+CBES_EX_NOEDITIMAGEINDENT :: 0x02
+CBES_EX_PATHWORDBREAKPROC :: 0x04
+CBES_EX_NOSIZELIMIT :: 0x08
+CBES_EX_CASESENSITIVE :: 0x10
+
+CBEN_GETDISPINFOA :: (CBEN_FIRST - 0)
+CBEN_INSERTITEM :: (CBEN_FIRST - 1)
+CBEN_DELETEITEM :: (CBEN_FIRST - 2)
+CBEN_BEGINEDIT :: (CBEN_FIRST - 4)
+CBEN_ENDEDITA :: (CBEN_FIRST - 5)
+CBEN_ENDEDITW :: (CBEN_FIRST - 6)
+CBEN_GETDISPINFOW :: (CBEN_FIRST - 7)
+CBEN_DRAGBEGINA :: (CBEN_FIRST - 8)
+CBEN_DRAGBEGINW :: (CBEN_FIRST - 9)
+
+CBENF_KILLFOCUS :: 1
+CBENF_RETURN :: 2
+CBENF_ESCAPE :: 3
+CBENF_DROPDOWN :: 4
+
+CBEMAXSTRLEN :: 260
+
+COMBOBOXEXITEMW :: struct {
+ mask: UINT,
+ iItem: INT_PTR,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ iSelectedImage: c_int,
+ iOverlay: c_int,
+ iIndent: c_int,
+ lParam: LPARAM,
+}
+PCOMBOBOXEXITEMW :: ^COMBOBOXEXITEMW
+PCCOMBOBOXEXITEMW :: ^COMBOBOXEXITEMW
+
+NMCOMBOBOXEXW :: struct {
+ hdr: NMHDR,
+ ceItem: COMBOBOXEXITEMW,
+}
+PNMCOMBOBOXEXW :: ^NMCOMBOBOXEXW
+
+NMCBEDRAGBEGINW :: struct {
+ hdr: NMHDR,
+ iItemId: c_int,
+ szText: [CBEMAXSTRLEN]WCHAR,
+}
+PNMCBEDRAGBEGINW :: ^NMCBEDRAGBEGINW
+LPNMCBEDRAGBEGINW :: PNMCBEDRAGBEGINW
+
+NMCBEENDEDITW :: struct {
+ hdr: NMHDR,
+ fChanged: BOOL,
+ iNewSelection: c_int,
+ szText: [CBEMAXSTRLEN]WCHAR,
+ iWhy: c_int,
+}
+PNMCBEENDEDITW :: ^NMCBEENDEDITW
+LPNMCBEENDEDITW :: PNMCBEENDEDITW
+
+// Tab Control
+TCS_EX_FLATSEPARATORS :: 0x1
+TCS_EX_REGISTERDROP :: 0x2
+
+TCN_KEYDOWN :: TCN_FIRST - 0
+TCN_SELCHANGE :: TCN_FIRST - 1
+TCN_SELCHANGING :: TCN_FIRST - 2
+TCN_GETOBJECT :: TCN_FIRST - 3
+TCN_FOCUSCHANGE :: TCN_FIRST - 4
+
+TCITEMHEADERW :: struct {
+ mask: UINT,
+ lpReserved1: UINT,
+ lpReserved2: UINT,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+}
+TC_ITEMHEADERW :: TCITEMHEADERW
+LPTCITEMHEADERW :: ^TCITEMHEADERW
+LPTC_ITEMHEADERW :: LPTCITEMHEADERW
+
+TCITEMW :: struct {
+ mask: UINT,
+ dwState: DWORD,
+ dwStateMask: DWORD,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ lParam: LPARAM,
+}
+TC_ITEMW :: TCITEMW
+LPTCITEMW :: ^TCITEMW
+LPTC_ITEMW :: LPTCITEMW
+
+TCHITTESTINFO :: struct {
+ pt: POINT,
+ flags: UINT,
+}
+TC_HITTESTINFO :: TCHITTESTINFO
+LPTCHITTESTINFO :: ^TCHITTESTINFO
+LPTC_HITTESTINFO :: LPTCHITTESTINFO
+
+NMTCKEYDOWN :: struct #packed {
+ hdr: NMHDR,
+ wVKey: WORD,
+ flags: UINT,
+}
+TC_KEYDOWN :: NMTCKEYDOWN
+
+TabCtrl_GetImageList :: #force_inline proc "system" (hwnd: HWND) -> HIMAGELIST {
+ return cast(HIMAGELIST)uintptr(SendMessageW(hwnd, TCM_GETIMAGELIST, 0, 0))
+}
+TabCtrl_SetImageList :: #force_inline proc "system" (hwnd: HWND, himl: HIMAGELIST) -> HIMAGELIST {
+ return cast(HIMAGELIST)uintptr(SendMessageW(hwnd, TCM_SETIMAGELIST, 0, cast(LPARAM)uintptr(himl)))
+}
+TabCtrl_GetItemCount :: #force_inline proc "system" (hwnd: HWND) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, TCM_GETITEMCOUNT, 0, 0)
+}
+TabCtrl_GetItem :: #force_inline proc "system" (hwnd: HWND, iItem: c_int, pitem: ^TC_ITEMW) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TCM_GETITEMW, cast(WPARAM)iItem, cast(LPARAM)uintptr(pitem))
+}
+TabCtrl_SetItem :: #force_inline proc "system" (hwnd: HWND, iItem: c_int, pitem: ^TC_ITEMW) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TCM_SETITEMW, cast(WPARAM)iItem, cast(LPARAM)uintptr(pitem))
+}
+TabCtrl_InsertItem :: #force_inline proc "system" (hwnd: HWND, iItem: c_int, pitem: ^TC_ITEMW) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, TCM_INSERTITEMW, cast(WPARAM)iItem, cast(LPARAM)uintptr(pitem))
+}
+TabCtrl_DeleteItem :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TCM_DELETEITEM, cast(WPARAM)i, 0)
+}
+TabCtrl_DeleteAllItems :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TCM_DELETEALLITEMS, 0, 0)
+}
+TabCtrl_GetItemRect :: #force_inline proc "system" (hwnd: HWND, i: c_int, prc: ^RECT) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TCM_GETITEMRECT, cast(WPARAM)i, cast(LPARAM)uintptr(prc))
+}
+TabCtrl_GetCurSel :: #force_inline proc "system" (hwnd: HWND) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, TCM_GETCURSEL, 0, 0)
+}
+TabCtrl_SetCurSel :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, TCM_SETCURSEL, cast(WPARAM)i, 0)
+}
+TabCtrl_HitTest :: #force_inline proc "system" (hwndTC: HWND, pinfo: ^TC_HITTESTINFO) -> c_int {
+ return cast(c_int)SendMessageW(hwndTC, TCM_HITTEST, 0, cast(LPARAM)uintptr(pinfo))
+}
+TabCtrl_SetItemExtra :: #force_inline proc "system" (hwndTC: HWND, cb: c_int) -> BOOL {
+ return cast(BOOL)SendMessageW(hwndTC, TCM_SETITEMEXTRA, cast(WPARAM)cb, 0)
+}
+TabCtrl_AdjustRect :: #force_inline proc "system" (hwnd: HWND, bLarger: BOOL, prc: ^RECT) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, TCM_ADJUSTRECT, cast(WPARAM)bLarger, cast(LPARAM)uintptr(prc))
+}
+TabCtrl_SetItemSize :: #force_inline proc "system" (hwnd: HWND, x,y: c_int) -> DWORD {
+ return cast(DWORD)SendMessageW(hwnd, TCM_SETITEMSIZE, 0, MAKELPARAM(x,y))
+}
+TabCtrl_RemoveImage :: #force_inline proc "system" (hwnd: HWND, i: c_int) {
+ SendMessageW(hwnd, TCM_REMOVEIMAGE, cast(WPARAM)i, 0)
+}
+TabCtrl_SetPadding :: #force_inline proc "system" (hwnd: HWND, cx,cy: c_int) {
+ SendMessageW(hwnd, TCM_SETPADDING, 0, MAKELPARAM(cx,cy))
+}
+TabCtrl_GetRowCount :: #force_inline proc "system" (hwnd: HWND) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, TCM_GETROWCOUNT, 0, 0)
+}
+TabCtrl_GetToolTips :: #force_inline proc "system" (hwnd: HWND) -> HWND {
+ return cast(HWND)uintptr(SendMessageW(hwnd, TCM_GETTOOLTIPS, 0, 0))
+}
+TabCtrl_SetToolTips :: #force_inline proc "system" (hwnd: HWND, hwndTT: HWND) {
+ SendMessageW(hwnd, TCM_SETTOOLTIPS, cast(WPARAM)uintptr(hwndTT), 0)
+}
+TabCtrl_GetCurFocus :: #force_inline proc "system" (hwnd: HWND) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, TCM_GETCURFOCUS, 0, 0)
+}
+TabCtrl_SetCurFocus :: #force_inline proc "system" (hwnd: HWND, i: c_int) {
+ SendMessageW(hwnd, TCM_SETCURFOCUS, cast(WPARAM)i, 0)
+}
+TabCtrl_SetMinTabWidth :: #force_inline proc "system" (hwnd: HWND, x: c_int) -> c_int {
+ return cast(c_int)SendMessageW(hwnd, TCM_SETMINTABWIDTH, 0, cast(LPARAM)x)
+}
+TabCtrl_DeselectAll :: #force_inline proc "system" (hwnd: HWND, fExcludeFocus: BOOL) {
+ SendMessageW(hwnd, TCM_DESELECTALL, cast(WPARAM)fExcludeFocus, 0)
+}
+TabCtrl_HighlightItem :: #force_inline proc "system" (hwnd: HWND, i: c_int, fHighlight: BOOL) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TCM_HIGHLIGHTITEM, cast(WPARAM)i, cast(LPARAM)MAKELONG(fHighlight,0))
+}
+TabCtrl_SetExtendedStyle :: #force_inline proc "system" (hwnd: HWND, dw: DWORD) -> DWORD {
+ return cast(DWORD)SendMessageW(hwnd, TCM_SETEXTENDEDSTYLE, 0, cast(LPARAM)dw)
+}
+TabCtrl_GetExtendedStyle :: #force_inline proc "system" (hwnd: HWND) -> DWORD {
+ return cast(DWORD)SendMessageW(hwnd, TCM_GETEXTENDEDSTYLE, 0, 0)
+}
+TabCtrl_SetUnicodeFormat :: #force_inline proc "system" (hwnd: HWND, fUnicode: BOOL) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TCM_SETUNICODEFORMAT, cast(WPARAM)fUnicode, 0)
+}
+TabCtrl_GetUnicodeFormat :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
+ return cast(BOOL)SendMessageW(hwnd, TCM_GETUNICODEFORMAT, 0, 0)
+}
diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin
index 8069659c9..b53103d44 100644
--- a/core/sys/windows/types.odin
+++ b/core/sys/windows/types.odin
@@ -66,6 +66,7 @@ PULONG_PTR :: ^ULONG_PTR
LPULONG_PTR :: ^ULONG_PTR
DWORD_PTR :: ULONG_PTR
LONG_PTR :: int
+INT_PTR :: int
UINT_PTR :: uintptr
ULONG :: c_ulong
ULONGLONG :: c_ulonglong
@@ -624,6 +625,10 @@ BST_INDETERMINATE :: 0x0002
BST_PUSHED :: 0x0004
BST_FOCUS :: 0x0008
+// Button Control Notification Codes
+BCN_HOTITEMCHANGE :: (BCN_FIRST + 0x0001)
+BCN_DROPDOWN :: (BCN_FIRST + 0x0002)
+
// Static Control Constants
SS_LEFT :: 0x00000000
SS_CENTER :: 0x00000001
@@ -686,6 +691,416 @@ EN_VSCROLL :: 0x0602
EN_ALIGN_LTR_EC :: 0x0700
EN_ALIGN_RTL_EC :: 0x0701
+// Toolbar Styles
+TBS_AUTOTICKS :: 0x001
+TBS_VERT :: 0x002
+TBS_HORZ :: 0x000
+TBS_TOP :: 0x004
+TBS_BOTTOM :: 0x000
+TBS_LEFT :: 0x004
+TBS_RIGHT :: 0x000
+TBS_BOTH :: 0x008
+TBS_NOTICKS :: 0x010
+TBS_ENABLESELRANGE :: 0x020
+TBS_FIXEDLENGTH :: 0x040
+TBS_NOTHUMB :: 0x080
+TBS_TOOLTIPS :: 0x100
+TBS_REVERSED :: 0x200
+TBS_DOWNISLEFT :: 0x400
+
+// Toolbar Button Styles
+TBSTYLE_BUTTON :: 0x0000
+TBSTYLE_SEP :: 0x0001
+TBSTYLE_CHECK :: 0x0002
+TBSTYLE_GROUP :: 0x0004
+TBSTYLE_CHECKGROUP :: (TBSTYLE_GROUP | TBSTYLE_CHECK)
+TBSTYLE_DROPDOWN :: 0x0008
+TBSTYLE_AUTOSIZE :: 0x0010
+TBSTYLE_NOPREFIX :: 0x0020
+TBSTYLE_TOOLTIPS :: 0x0100
+TBSTYLE_WRAPABLE :: 0x0200
+TBSTYLE_ALTDRAG :: 0x0400
+TBSTYLE_FLAT :: 0x0800
+TBSTYLE_LIST :: 0x1000
+TBSTYLE_CUSTOMERASE :: 0x2000
+TBSTYLE_REGISTERDROP :: 0x4000
+TBSTYLE_TRANSPARENT :: 0x8000
+
+// Toolbar Button Styles (Aliases)
+BTNS_BUTTON :: TBSTYLE_BUTTON
+BTNS_SEP :: TBSTYLE_SEP
+BTNS_CHECK :: TBSTYLE_CHECK
+BTNS_GROUP :: TBSTYLE_GROUP
+BTNS_CHECKGROUP :: TBSTYLE_CHECKGROUP
+BTNS_DROPDOWN :: TBSTYLE_DROPDOWN
+BTNS_AUTOSIZE :: TBSTYLE_AUTOSIZE
+BTNS_NOPREFIX :: TBSTYLE_NOPREFIX
+BTNS_SHOWTEXT :: 0x40
+BTNS_WHOLEDROPDOWN :: 0x80
+
+// Toolbar Extended Styles
+TBSTYLE_EX_DRAWDDARROWS :: 0x01
+TBSTYLE_EX_MIXEDBUTTONS :: 0x08
+TBSTYLE_EX_HIDECLIPPEDBUTTONS :: 0x10
+TBSTYLE_EX_DOUBLEBUFFER :: 0x80
+
+// Toolbar Item State Codes
+TBSTATE_CHECKED :: 0x01
+TBSTATE_PRESSED :: 0x02
+TBSTATE_ENABLED :: 0x04
+TBSTATE_HIDDEN :: 0x08
+TBSTATE_INDETERMINATE :: 0x10
+TBSTATE_WRAP :: 0x20
+TBSTATE_ELLIPSES :: 0x40
+TBSTATE_MARKED :: 0x80
+
+// Toolbar Constants
+TBCDRF_NOEDGES :: 0x010000
+TBCDRF_HILITEHOTTRACK :: 0x020000
+TBCDRF_NOOFFSET :: 0x040000
+TBCDRF_NOMARK :: 0x080000
+TBCDRF_NOETCHEDEFFECT :: 0x100000
+TBCDRF_BLENDICON :: 0x200000
+TBCDRF_NOBACKGROUND :: 0x400000
+
+TBBF_LARGE :: 0x1
+
+TBIF_IMAGE :: 0x00000001
+TBIF_TEXT :: 0x00000002
+TBIF_STATE :: 0x00000004
+TBIF_STYLE :: 0x00000008
+TBIF_LPARAM :: 0x00000010
+TBIF_COMMAND :: 0x00000020
+TBIF_SIZE :: 0x00000040
+TBIF_BYINDEX :: 0x80000000
+
+TBMF_PAD :: 0x1
+TBMF_BARPAD :: 0x2
+TBMF_BUTTONSPACING :: 0x4
+
+IDB_STD_SMALL_COLOR :: 0
+IDB_STD_LARGE_COLOR :: 1
+IDB_VIEW_SMALL_COLOR :: 4
+IDB_VIEW_LARGE_COLOR :: 5
+IDB_HIST_SMALL_COLOR :: 8
+IDB_HIST_LARGE_COLOR :: 9
+
+STD_CUT :: 0
+STD_COPY :: 1
+STD_PASTE :: 2
+STD_UNDO :: 3
+STD_REDOW :: 4
+STD_DELETE :: 5
+STD_FILENEW :: 6
+STD_FILEOPEN :: 7
+STD_FILESAVE :: 8
+STD_PRINTPRE :: 9
+STD_PROPERTIES :: 10
+STD_HELP :: 11
+STD_FIND :: 12
+STD_REPLACE :: 13
+STD_PRINT :: 14
+
+VIEW_LARGEICONS :: 0
+VIEW_SMALLICONS :: 1
+VIEW_LIST :: 2
+VIEW_DETAILS :: 3
+VIEW_SORTNAME :: 4
+VIEW_SORTSIZE :: 5
+VIEW_SORTDATE :: 6
+VIEW_SORTTYPE :: 7
+VIEW_PARENTFOLDER :: 8
+VIEW_NETCONNECT :: 9
+VIEW_NETDISCONNECT :: 10
+VIEW_NEWFOLDER :: 11
+VIEW_VIEWMENU :: 12
+
+HIST_BACK :: 0
+HIST_FORWARD :: 1
+HIST_FAVORITES :: 2
+HIST_ADDTOFAVORITES :: 3
+HIST_VIEWTREE :: 4
+
+// Header Control Styles
+HDS_HORZ :: 0x000
+HDS_BUTTONS :: 0x002
+HDS_HOTTRACK :: 0x004
+HDS_HIDDEN :: 0x008
+HDS_DRAGDROP :: 0x040
+HDS_FULLDRAG :: 0x080
+HDS_FILTERBAR :: 0x100
+HDS_FLAT :: 0x200
+
+// Header Control Notifications
+HDN_ITEMCHANGINGA :: (HDN_FIRST-0)
+HDN_ITEMCHANGEDA :: (HDN_FIRST-1)
+HDN_ITEMCLICKA :: (HDN_FIRST-2)
+HDN_ITEMDBLCLICKA :: (HDN_FIRST-3)
+HDN_DIVIDERDBLCLICKA :: (HDN_FIRST-5)
+HDN_BEGINTRACKA :: (HDN_FIRST-6)
+HDN_ENDTRACKA :: (HDN_FIRST-7)
+HDN_TRACKA :: (HDN_FIRST-8)
+HDN_GETDISPINFOA :: (HDN_FIRST-9)
+HDN_BEGINDRAG :: (HDN_FIRST-10)
+HDN_ENDDRAG :: (HDN_FIRST-11)
+HDN_FILTERCHANGE :: (HDN_FIRST-12)
+HDN_FILTERBTNCLICK :: (HDN_FIRST-13)
+HDN_ITEMCHANGINGW :: (HDN_FIRST-20)
+HDN_ITEMCHANGEDW :: (HDN_FIRST-21)
+HDN_ITEMCLICKW :: (HDN_FIRST-22)
+HDN_ITEMDBLCLICKW :: (HDN_FIRST-23)
+HDN_DIVIDERDBLCLICKW :: (HDN_FIRST-25)
+HDN_BEGINTRACKW :: (HDN_FIRST-26)
+HDN_ENDTRACKW :: (HDN_FIRST-27)
+HDN_TRACKW :: (HDN_FIRST-28)
+HDN_GETDISPINFOW :: (HDN_FIRST-29)
+
+// Header Control Constants
+HDFT_ISSTRING :: 0x0000
+HDFT_ISNUMBER :: 0x0001
+HDFT_HASNOVALUE :: 0x8000
+
+HDI_WIDTH :: 0x001
+HDI_HEIGHT :: HDI_WIDTH
+HDI_TEXT :: 0x002
+HDI_FORMAT :: 0x004
+HDI_LPARAM :: 0x008
+HDI_BITMAP :: 0x010
+HDI_IMAGE :: 0x020
+HDI_DI_SETITEM :: 0x040
+HDI_ORDER :: 0x080
+HDI_FILTER :: 0x100
+
+HDF_LEFT :: 0x0000000
+HDF_RIGHT :: 0x0000001
+HDF_CENTER :: 0x0000002
+HDF_JUSTIFYMASK :: 0x0000003
+HDF_RTLREADING :: 0x0000004
+HDF_CHECKBOX :: 0x0000040
+HDF_CHECKED :: 0x0000080
+HDF_FIXEDWIDTH :: 0x0000100
+HDF_SORTDOWN :: 0x0000200
+HDF_SORTUP :: 0x0000400
+HDF_IMAGE :: 0x0000800
+HDF_BITMAP_ON_RIGHT :: 0x0001000
+HDF_BITMAP :: 0x0002000
+HDF_STRING :: 0x0004000
+HDF_OWNERDRAW :: 0x0008000
+HDF_SPLITBUTTON :: 0x1000000
+
+HHT_NOWHERE :: 0x001
+HHT_ONHEADER :: 0x002
+HHT_ONDIVIDER :: 0x004
+HHT_ONDIVOPEN :: 0x008
+HHT_ONFILTER :: 0x010
+HHT_ONFILTERBUTTON :: 0x020
+HHT_ABOVE :: 0x100
+HHT_BELOW :: 0x200
+HHT_TORIGHT :: 0x400
+HHT_TOLEFT :: 0x800
+
+// Rebar Control Styles
+RBS_TOOLTIPS :: 0x0100
+RBS_VARHEIGHT :: 0x0200
+RBS_BANDBORDERS :: 0x0400
+RBS_FIXEDORDER :: 0x0800
+RBS_REGISTERDROP :: 0x1000
+RBS_AUTOSIZE :: 0x2000
+RBS_VERTICALGRIPPER :: 0x4000
+RBS_DBLCLKTOGGLE :: 0x8000
+
+// Tooltip Control Styles
+TTS_ALWAYSTIP :: 0x01
+TTS_NOPREFIX :: 0x02
+TTS_NOANIMATE :: 0x10
+TTS_NOFADE :: 0x20
+TTS_BALLOON :: 0x40
+TTS_CLOSE :: 0x80
+
+// Statusbar Control Styles
+SBARS_SIZEGRIP :: 0x100
+SBARS_TOOLTIPS :: 0x800
+
+// Statusbar Control Constants
+SBT_TOOLTIPS :: 0x800
+
+// Up-Down Control Styles
+UDS_WRAP :: 0x001
+UDS_SETBUDDYINT :: 0x002
+UDS_ALIGNRIGHT :: 0x004
+UDS_ALIGNLEFT :: 0x008
+UDS_AUTOBUDDY :: 0x010
+UDS_ARROWKEYS :: 0x020
+UDS_HORZ :: 0x040
+UDS_NOTHOUSANDS :: 0x080
+UDS_HOTTRACK :: 0x100
+
+// Common Control Styles
+CCS_TOP :: 0x01
+CCS_NOMOVEY :: 0x02
+CCS_BOTTOM :: 0x03
+CCS_NORESIZE :: 0x04
+CCS_NOPARENTALIGN :: 0x08
+CCS_ADJUSTABLE :: 0x20
+CCS_NODIVIDER :: 0x40
+CCS_VERT :: 0x80
+CCS_LEFT :: (CCS_VERT | CCS_TOP)
+CCS_RIGHT :: (CCS_VERT | CCS_BOTTOM)
+CCS_NOMOVEX :: (CCS_VERT | CCS_NOMOVEY)
+
+// List-View Control Styles
+LVS_ICON :: 0x0000
+LVS_REPORT :: 0x0001
+LVS_SMALLICON :: 0x0002
+LVS_LIST :: 0x0003
+LVS_TYPEMASK :: 0x0003
+LVS_SINGLESEL :: 0x0004
+LVS_SHOWSELALWAYS :: 0x0008
+LVS_SORTASCENDING :: 0x0010
+LVS_SORTDESCENDING :: 0x0020
+LVS_SHAREIMAGELISTS :: 0x0040
+LVS_NOLABELWRAP :: 0x0080
+LVS_AUTOARRANGE :: 0x0100
+LVS_EDITLABELS :: 0x0200
+LVS_OWNERDATA :: 0x1000
+LVS_NOSCROLL :: 0x2000
+LVS_TYPESTYLEMASK :: 0xFC00
+LVS_ALIGNTOP :: 0x0000
+LVS_ALIGNLEFT :: 0x0800
+LVS_ALIGNMASK :: 0x0C00
+LVS_OWNERDRAWFIXED :: 0x0400
+LVS_NOCOLUMNHEADER :: 0x4000
+LVS_NOSORTHEADER :: 0x8000
+
+// Tree-View Control Styles
+TVS_HASBUTTONS :: 0x0001
+TVS_HASLINES :: 0x0002
+TVS_LINESATROOT :: 0x0004
+TVS_EDITLABELS :: 0x0008
+TVS_DISABLEDRAGDROP :: 0x0010
+TVS_SHOWSELALWAYS :: 0x0020
+TVS_RTLREADING :: 0x0040
+TVS_NOTOOLTIPS :: 0x0080
+TVS_CHECKBOXES :: 0x0100
+TVS_TRACKSELECT :: 0x0200
+TVS_SINGLEEXPAND :: 0x0400
+TVS_INFOTIP :: 0x0800
+TVS_FULLROWSELECT :: 0x1000
+TVS_NOSCROLL :: 0x2000
+TVS_NONEVENHEIGHT :: 0x4000
+TVS_NOHSCROLL :: 0x8000
+
+// Tree-View Control Constants
+TVE_COLLAPSE :: 0x0001
+TVE_EXPAND :: 0x0002
+TVE_TOGGLE :: 0x0003
+TVE_EXPANDPARTIAL :: 0x4000
+TVE_COLLAPSERESET :: 0x8000
+
+TVSIL_NORMAL :: 0
+TVSIL_STATE :: 2
+
+TVGN_ROOT :: 0x0
+TVGN_NEXT :: 0x1
+TVGN_PREVIOUS :: 0x2
+TVGN_PARENT :: 0x3
+TVGN_CHILD :: 0x4
+TVGN_FIRSTVISIBLE :: 0x5
+TVGN_NEXTVISIBLE :: 0x6
+TVGN_PREVIOUSVISIBLE :: 0x7
+TVGN_DROPHILITE :: 0x8
+TVGN_CARET :: 0x9
+TVGN_LASTVISIBLE :: 0xA
+
+TVSI_NOSINGLEEXPAND :: 0x8000
+
+TVHT_NOWHERE :: 0x001
+TVHT_ONITEMICON :: 0x002
+TVHT_ONITEMLABEL :: 0x004
+TVHT_ONITEM :: (TVHT_ONITEMICON | TVHT_ONITEMLABEL | TVHT_ONITEMSTATEICON)
+TVHT_ONITEMINDENT :: 0x008
+TVHT_ONITEMBUTTON :: 0x010
+TVHT_ONITEMRIGHT :: 0x020
+TVHT_ONITEMSTATEICON :: 0x040
+TVHT_ABOVE :: 0x100
+TVHT_BELOW :: 0x200
+TVHT_TORIGHT :: 0x400
+TVHT_TOLEFT :: 0x800
+
+// Tab Control Styles
+TCS_SCROLLOPPOSITE :: 0x0001
+TCS_BOTTOM :: 0x0002
+TCS_RIGHT :: 0x0002
+TCS_MULTISELECT :: 0x0004
+TCS_FLATBUTTONS :: 0x0008
+TCS_FORCEICONLEFT :: 0x0010
+TCS_FORCELABELLEFT :: 0x0020
+TCS_HOTTRACK :: 0x0040
+TCS_VERTICAL :: 0x0080
+TCS_TABS :: 0x0000
+TCS_BUTTONS :: 0x0100
+TCS_SINGLELINE :: 0x0000
+TCS_MULTILINE :: 0x0200
+TCS_RIGHTJUSTIFY :: 0x0000
+TCS_FIXEDWIDTH :: 0x0400
+TCS_RAGGEDRIGHT :: 0x0800
+TCS_FOCUSONBUTTONDOWN :: 0x1000
+TCS_OWNERDRAWFIXED :: 0x2000
+TCS_TOOLTIPS :: 0x4000
+TCS_FOCUSNEVER :: 0x8000
+
+// Tab Control Constants
+TCIF_TEXT :: 0x01
+TCIF_IMAGE :: 0x02
+TCIF_RTLREADING :: 0x04
+TCIF_PARAM :: 0x08
+TCIF_STATE :: 0x10
+
+TCIS_BUTTONPRESSED :: 0x1
+TCIS_HIGHLIGHTED :: 0x2
+
+TCHT_NOWHERE :: 0x1
+TCHT_ONITEMICON :: 0x2
+TCHT_ONITEMLABEL :: 0x4
+TCHT_ONITEM :: (TCHT_ONITEMICON | TCHT_ONITEMLABEL)
+
+// Animation Control Styles
+ACS_CENTER :: 0x1
+ACS_TRANSPARENT :: 0x2
+ACS_AUTOPLAY :: 0x4
+ACS_TIMER :: 0x8
+
+// Month-Calendar Control Styles
+MCS_DAYSTATE :: 0x01
+MCS_MULTISELECT :: 0x02
+MCS_WEEKNUMBERS :: 0x04
+MCS_NOTODAYCIRCLE :: 0x08
+MCS_NOTODAY :: 0x10
+
+// Date-and-Time Picker Control Styles
+DTS_UPDOWN :: 0x01
+DTS_SHOWNONE :: 0x02
+DTS_SHORTDATEFORMAT :: 0x00
+DTS_LONGDATEFORMAT :: 0x04
+DTS_SHORTDATECENTURYFORMAT :: 0x0C
+DTS_TIMEFORMAT :: 0x09
+DTS_APPCANPARSE :: 0x10
+DTS_RIGHTALIGN :: 0x20
+
+// Pager Control Styles
+PGS_VERT :: 0x0
+PGS_HORZ :: 0x1
+PGS_AUTOSCROLL :: 0x2
+PGS_DRAGNDROP :: 0x4
+
+// Native Font Control Styles
+NFS_EDIT :: 0x01
+NFS_STATIC :: 0x02
+NFS_LISTCOMBO :: 0x04
+NFS_BUTTON :: 0x08
+NFS_ALL :: 0x10
+NFS_USEFONTASSOC :: 0x20
+
// Font Weights
FW_DONTCARE :: 0
FW_THIN :: 100
@@ -1206,6 +1621,54 @@ NMHDR :: struct {
code: UINT, // NM_ code
}
+NMCUSTOMDRAW :: struct {
+ hdr: NMHDR,
+ dwDrawStage: DWORD,
+ hdc: HDC,
+ rc: RECT,
+ dwItemSpec: DWORD_PTR,
+ uItemState: UINT,
+ lItemlParam: LPARAM,
+}
+
+NMTTCUSTOMDRAW :: struct {
+ nmcd: NMCUSTOMDRAW,
+ uDrawFlags: UINT,
+}
+
+NMHEADERW :: struct {
+ hdr: NMHDR,
+ iItem: c_int,
+ iButton: c_int,
+ pitem: ^HDITEMW,
+}
+LPNMHEADERW :: ^NMHEADERW
+HD_NOTIFYW :: NMHEADERW
+LPHD_NOTIFYW :: LPNMHEADERW
+
+NMHDDISPINFOW :: struct {
+ hdr: NMHDR,
+ iItem: c_int,
+ mask: UINT,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ lParam: LPARAM,
+}
+LPNMHDDISPINFOW :: ^NMHDDISPINFOW
+
+NMHDFILTERBTNCLICK :: struct {
+ hdr: NMHDR,
+ iItem: c_int,
+ rc: RECT,
+}
+
+NMBCDROPDOWN :: struct {
+ hdr: NMHDR,
+ rcButton: RECT,
+}
+LPNMBCDROPDOWN :: ^NMBCDROPDOWN
+
NCCALCSIZE_PARAMS :: struct {
rgrc: [3]RECT,
lppos: PWINDOWPOS,
diff --git a/core/sys/windows/window_messages.odin b/core/sys/windows/window_messages.odin
index d69771bdf..0901ee696 100644
--- a/core/sys/windows/window_messages.odin
+++ b/core/sys/windows/window_messages.odin
@@ -687,10 +687,14 @@ EM_GETAUTOURLDETECT :: 0x045c
TB_GETSTRINGA :: 0x045c
EM_SETPALETTE :: 0x045d
EM_GETTEXTEX :: 0x045e
+TB_SETHOTITEM2 :: 0x045e
EM_GETTEXTLENGTHEX :: 0x045f
EM_SHOWSCROLLBAR :: 0x0460
+TB_SETLISTGAP :: 0x0460
EM_SETTEXTEX :: 0x0461
+TB_GETIMAGELISTCOUNT :: 0x0462
TAPI_REPLY :: 0x0463
+TB_GETIDEALSIZE :: 0x0463
ACM_OPENA :: 0x0464
BFFM_SETSTATUSTEXTA :: 0x0464
CDM_FIRST :: 0x0464
@@ -704,6 +708,7 @@ CDM_GETFILEPATH :: 0x0465
EM_GETPUNCTUATION :: 0x0465
IPM_SETADDRESS :: 0x0465
PSM_SETCURSEL :: 0x0465
+TB_GETMETRICS :: 0x0465
UDM_SETRANGE :: 0x0465
WM_CHOOSEFONT_SETLOGFONT :: 0x0465
ACM_STOP :: 0x0466
@@ -712,6 +717,7 @@ CDM_GETFOLDERPATH :: 0x0466
EM_SETWORDWRAPMODE :: 0x0466
IPM_GETADDRESS :: 0x0466
PSM_REMOVEPAGE :: 0x0466
+TB_SETMETRICS :: 0x0466
UDM_GETRANGE :: 0x0466
WM_CAP_SET_CALLBACK_ERRORW :: 0x0466
WM_CHOOSEFONT_SETFLAGS :: 0x0466
@@ -721,6 +727,7 @@ CDM_GETFOLDERIDLIST :: 0x0467
EM_GETWORDWRAPMODE :: 0x0467
IPM_SETRANGE :: 0x0467
PSM_ADDPAGE :: 0x0467
+TB_GETITEMDROPDOWNRECT :: 0x0467
UDM_SETPOS :: 0x0467
WM_CAP_SET_CALLBACK_STATUSW :: 0x0467
BFFM_SETSTATUSTEXTW :: 0x0468
@@ -728,11 +735,13 @@ CDM_SETCONTROLTEXT :: 0x0468
EM_SETIMECOLOR :: 0x0468
IPM_SETFOCUS :: 0x0468
PSM_CHANGED :: 0x0468
+TB_SETPRESSEDIMAGELIST :: 0x0468
UDM_GETPOS :: 0x0468
CDM_HIDECONTROL :: 0x0469
EM_GETIMECOLOR :: 0x0469
IPM_ISBLANK :: 0x0469
PSM_RESTARTWINDOWS :: 0x0469
+TB_GETPRESSEDIMAGELIST :: 0x0469
UDM_SETBUDDY :: 0x0469
CDM_SETDEFEXT :: 0x046a
EM_SETIMEOPTIONS :: 0x046a
@@ -915,6 +924,10 @@ FM_GETDRIVEINFOW :: 0x0611
FM_GETFILESELW :: 0x0614
FM_GETFILESELLFNW :: 0x0615
WLX_WM_SAS :: 0x0659
+LM_HITTEST :: 0x0700
+LM_GETIDEALHEIGHT :: 0x0701
+LM_SETITEM :: 0x0702
+LM_GETITEM :: 0x0703
SM_GETSELCOUNT :: 0x07e8
UM_GETSELCOUNT :: 0x07e8
WM_CPL_LAUNCH :: 0x07e8
@@ -1011,6 +1024,7 @@ LVM_GETITEMW :: 0x104b
LVM_SETITEMW :: 0x104c
LVM_INSERTITEMW :: 0x104d
LVM_GETTOOLTIPS :: 0x104e
+LVM_SORTITEMSEX :: 0x1051
LVM_FINDITEMW :: 0x1053
LVM_GETSTRINGWIDTHW :: 0x1057
LVM_GETCOLUMNW :: 0x105f
@@ -1065,7 +1079,143 @@ LVM_GETFOOTERITEM :: 0x10d0
LVM_GETITEMINDEXRECT :: 0x10d1
LVM_SETITEMINDEXSTATE :: 0x10d2
LVM_GETNEXTITEMINDEX :: 0x10d3
+TV_FIRST :: 0x1100
+TVM_INSERTITEMA :: (TV_FIRST+0)
+TVM_DELETEITEM :: (TV_FIRST+1)
+TVM_EXPAND :: (TV_FIRST+2)
+TVM_GETITEMRECT :: (TV_FIRST+4)
+TVM_GETCOUNT :: (TV_FIRST+5)
+TVM_GETINDENT :: (TV_FIRST+6)
+TVM_SETINDENT :: (TV_FIRST+7)
+TVM_GETIMAGELIST :: (TV_FIRST+8)
+TVM_SETIMAGELIST :: (TV_FIRST+9)
+TVM_GETNEXTITEM :: (TV_FIRST+10)
+TVM_SELECTITEM :: (TV_FIRST+11)
+TVM_GETITEMA :: (TV_FIRST+12)
+TVM_SETITEMA :: (TV_FIRST+13)
+TVM_EDITLABELA :: (TV_FIRST+14)
+TVM_GETEDITCONTROL :: (TV_FIRST+15)
+TVM_GETVISIBLECOUNT :: (TV_FIRST+16)
+TVM_HITTEST :: (TV_FIRST+17)
+TVM_CREATEDRAGIMAGE :: (TV_FIRST+18)
+TVM_SORTCHILDREN :: (TV_FIRST+19)
+TVM_ENSUREVISIBLE :: (TV_FIRST+20)
+TVM_SORTCHILDRENCB :: (TV_FIRST+21)
+TVM_ENDEDITLABELNOW :: (TV_FIRST+22)
+TVM_GETISEARCHSTRINGA :: (TV_FIRST+23)
+TVM_SETTOOLTIPS :: (TV_FIRST+24)
+TVM_GETTOOLTIPS :: (TV_FIRST+25)
+TVM_SETINSERTMARK :: (TV_FIRST+26)
+TVM_SETUNICODEFORMAT :: CCM_SETUNICODEFORMAT
+TVM_GETUNICODEFORMAT :: CCM_GETUNICODEFORMAT
+TVM_SETITEMHEIGHT :: (TV_FIRST+27)
+TVM_GETITEMHEIGHT :: (TV_FIRST+28)
+TVM_SETBKCOLOR :: (TV_FIRST+29)
+TVM_SETTEXTCOLOR :: (TV_FIRST+30)
+TVM_GETBKCOLOR :: (TV_FIRST+31)
+TVM_GETTEXTCOLOR :: (TV_FIRST+32)
+TVM_SETSCROLLTIME :: (TV_FIRST+33)
+TVM_GETSCROLLTIME :: (TV_FIRST+34)
+TVM_SETINSERTMARKCOLOR :: (TV_FIRST+37)
+TVM_GETINSERTMARKCOLOR :: (TV_FIRST+38)
+TVM_GETITEMSTATE :: (TV_FIRST+39)
+TVM_SETLINECOLOR :: (TV_FIRST+40)
+TVM_GETLINECOLOR :: (TV_FIRST+41)
+TVM_MAPACCIDTOHTREEITEM :: (TV_FIRST+42)
+TVM_MAPHTREEITEMTOACCID :: (TV_FIRST+43)
+TVM_INSERTITEMW :: (TV_FIRST+50)
+TVM_GETITEMW :: (TV_FIRST+62)
+TVM_SETITEMW :: (TV_FIRST+63)
+TVM_GETISEARCHSTRINGW :: (TV_FIRST+64)
+TVM_EDITLABELW :: (TV_FIRST+65)
+HDM_FIRST :: 0x1200
+HDM_GETITEMCOUNT :: (HDM_FIRST+0)
+HDM_INSERTITEMA :: (HDM_FIRST+1)
+HDM_DELETEITEM :: (HDM_FIRST+2)
+HDM_GETITEMA :: (HDM_FIRST+3)
+HDM_SETITEMA :: (HDM_FIRST+4)
+HDM_LAYOUT :: (HDM_FIRST+5)
+HDM_HITTEST :: (HDM_FIRST+6)
+HDM_GETITEMRECT :: (HDM_FIRST+7)
+HDM_SETIMAGELIST :: (HDM_FIRST+8)
+HDM_GETIMAGELIST :: (HDM_FIRST+9)
+HDM_INSERTITEMW :: (HDM_FIRST+10)
+HDM_GETITEMW :: (HDM_FIRST+11)
+HDM_SETITEMW :: (HDM_FIRST+12)
+HDM_ORDERTOINDEX :: (HDM_FIRST+15)
+HDM_CREATEDRAGIMAGE :: (HDM_FIRST+16)
+HDM_GETORDERARRAY :: (HDM_FIRST+17)
+HDM_SETORDERARRAY :: (HDM_FIRST+18)
+HDM_SETHOTDIVIDER :: (HDM_FIRST+19)
+HDM_SETBITMAPMARGIN :: (HDM_FIRST+20)
+HDM_GETBITMAPMARGIN :: (HDM_FIRST+21)
+HDM_SETFILTERCHANGETIMEOUT :: (HDM_FIRST+22)
+HDM_SETUNICODEFORMAT :: CCM_SETUNICODEFORMAT
+HDM_GETUNICODEFORMAT :: CCM_GETUNICODEFORMAT
+HDM_EDITFILTER :: (HDM_FIRST+23)
+HDM_CLEARFILTER :: (HDM_FIRST+24)
+TCM_FIRST :: 0x1300
+TCM_GETIMAGELIST :: (TCM_FIRST+2)
+TCM_SETIMAGELIST :: (TCM_FIRST+3)
+TCM_GETITEMCOUNT :: (TCM_FIRST+4)
+TCM_GETITEMA :: (TCM_FIRST+5)
+TCM_SETITEMA :: (TCM_FIRST+6)
+TCM_INSERTITEMA :: (TCM_FIRST+7)
+TCM_DELETEITEM :: (TCM_FIRST+8)
+TCM_DELETEALLITEMS :: (TCM_FIRST+9)
+TCM_GETITEMRECT :: (TCM_FIRST+10)
+TCM_GETCURSEL :: (TCM_FIRST+11)
+TCM_SETCURSEL :: (TCM_FIRST+12)
+TCM_HITTEST :: (TCM_FIRST+13)
+TCM_SETITEMEXTRA :: (TCM_FIRST+14)
+TCM_ADJUSTRECT :: (TCM_FIRST+40)
+TCM_SETITEMSIZE :: (TCM_FIRST+41)
+TCM_REMOVEIMAGE :: (TCM_FIRST+42)
+TCM_SETPADDING :: (TCM_FIRST+43)
+TCM_GETROWCOUNT :: (TCM_FIRST+44)
+TCM_GETTOOLTIPS :: (TCM_FIRST+45)
+TCM_SETTOOLTIPS :: (TCM_FIRST+46)
+TCM_GETCURFOCUS :: (TCM_FIRST+47)
+TCM_SETCURFOCUS :: (TCM_FIRST+48)
+TCM_SETMINTABWIDTH :: (TCM_FIRST+49)
+TCM_DESELECTALL :: (TCM_FIRST+50)
+TCM_HIGHLIGHTITEM :: (TCM_FIRST+51)
+TCM_SETEXTENDEDSTYLE :: (TCM_FIRST+52)
+TCM_GETEXTENDEDSTYLE :: (TCM_FIRST+53)
+TCM_SETUNICODEFORMAT :: CCM_SETUNICODEFORMAT
+TCM_GETUNICODEFORMAT :: CCM_GETUNICODEFORMAT
+TCM_GETITEMW :: (TCM_FIRST+60)
+TCM_SETITEMW :: (TCM_FIRST+61)
+TCM_INSERTITEMW :: (TCM_FIRST+62)
+PGM_FIRST :: 0x1400
+PGM_SETCHILD :: (PGM_FIRST+1)
+PGM_RECALCSIZE :: (PGM_FIRST+2)
+PGM_FORWARDMOUSE :: (PGM_FIRST+3)
+PGM_SETBKCOLOR :: (PGM_FIRST+4)
+PGM_GETBKCOLOR :: (PGM_FIRST+5)
+PGM_SETBORDER :: (PGM_FIRST+6)
+PGM_GETBORDER :: (PGM_FIRST+7)
+PGM_SETPOS :: (PGM_FIRST+8)
+PGM_GETPOS :: (PGM_FIRST+9)
+PGM_SETBUTTONSIZE :: (PGM_FIRST+10)
+PGM_GETBUTTONSIZE :: (PGM_FIRST+11)
+PGM_GETBUTTONSTATE :: (PGM_FIRST+12)
+PGM_GETDROPTARGET :: CCM_GETDROPTARGET
+ECM_FIRST :: 0x1500
+EM_SETCUEBANNER :: ECM_FIRST + 0x0001
+EM_GETCUEBANNER :: ECM_FIRST + 0x0002
+EM_SHOWBALLOONTIP :: ECM_FIRST + 0x0003
+EM_HIDEBALLOONTIP :: ECM_FIRST + 0x0004
+EM_SETHILITE :: ECM_FIRST + 0x0005
+EM_GETHILITE :: ECM_FIRST + 0x0006
+EM_NOSETFOCUS :: ECM_FIRST + 0x0007
+EM_TAKEFOCUS :: ECM_FIRST + 0x0008
BCM_FIRST :: 0x1600
+BCM_GETIDEALSIZE :: BCM_FIRST + 0x0001
+BCM_SETIMAGELIST :: BCM_FIRST + 0x0002
+BCM_GETIMAGELIST :: BCM_FIRST + 0x0003
+BCM_SETTEXTMARGIN :: BCM_FIRST + 0x0004
+BCM_GETTEXTMARGIN :: BCM_FIRST + 0x0005
BCM_SETDROPDOWNSTATE :: BCM_FIRST + 0x0006
BCM_SETSPLITINFO :: BCM_FIRST + 0x0007
BCM_GETSPLITINFO :: BCM_FIRST + 0x0008
@@ -1073,9 +1223,29 @@ BCM_SETNOTE :: BCM_FIRST + 0x0009
BCM_GETNOTE :: BCM_FIRST + 0x000A
BCM_GETNOTELENGTH :: BCM_FIRST + 0x000B
BCM_SETSHIELD :: BCM_FIRST + 0x000C
+CBM_FIRST :: 0x1700
+CB_SETMINVISIBLE :: CBM_FIRST + 0x0001
+CB_GETMINVISIBLE :: CBM_FIRST + 0x0002
+CCM_FIRST :: 0x2000
+CCM_LAST :: (CCM_FIRST+0x200)
+CCM_SETBKCOLOR :: (CCM_FIRST+1)
+CCM_SETCOLORSCHEME :: (CCM_FIRST+2)
+CCM_GETCOLORSCHEME :: (CCM_FIRST+3)
+CCM_GETDROPTARGET :: (CCM_FIRST+4)
+CCM_SETUNICODEFORMAT :: (CCM_FIRST+5)
+CCM_GETUNICODEFORMAT :: (CCM_FIRST+6)
+CCM_SETVERSION :: (CCM_FIRST+7)
+CCM_GETVERSION :: (CCM_FIRST+8)
+CCM_SETNOTIFYWINDOW :: (CCM_FIRST+9)
+CCM_SETWINDOWTHEME :: (CCM_FIRST+11)
+CCM_DPISCALE :: (CCM_FIRST+12)
OCM__BASE :: 0x2000
LVM_SETUNICODEFORMAT :: 0x2005
+SB_SETUNICODEFORMAT :: 0x2005
LVM_GETUNICODEFORMAT :: 0x2006
+SB_GETUNICODEFORMAT :: 0x2006
+CBEM_SETWINDOWTHEME :: 0x200b
+TB_SETWINDOWTHEME :: 0x200b
OCM_CTLCOLOR :: 0x2019
OCM_DRAWITEM :: 0x202b
OCM_MEASUREITEM :: 0x202c