Files
Odin/core/sys/windows/comctl32.odin
2025-08-02 12:20:35 +01:00

2098 lines
74 KiB
Odin

#+build windows
package sys_windows
foreign import "system:Comctl32.lib"
@(default_calling_convention="system")
foreign Comctl32 {
InitCommonControlsEx :: proc(picce: ^INITCOMMONCONTROLSEX) -> BOOL ---
LoadIconWithScaleDown :: proc(hinst: HINSTANCE, pszName: PCWSTR, cx: c_int, cy: c_int, phico: ^HICON) -> HRESULT ---
SetWindowSubclass :: proc(hwnd: HWND, pfnSubclass: SUBCLASSPROC, uIdSubclass: UINT_PTR, dwRefData: DWORD_PTR) ---
}
ICC_LISTVIEW_CLASSES :: 0x00000001
ICC_TREEVIEW_CLASSES :: 0x00000002
ICC_BAR_CLASSES :: 0x00000004
ICC_TAB_CLASSES :: 0x00000008
ICC_UPDOWN_CLASS :: 0x00000010
ICC_PROGRESS_CLASS :: 0x00000020
ICC_HOTKEY_CLASS :: 0x00000040
ICC_ANIMATE_CLASS :: 0x00000080
ICC_WIN95_CLASSES :: 0x000000FF
ICC_DATE_CLASSES :: 0x00000100
ICC_USEREX_CLASSES :: 0x00000200
ICC_COOL_CLASSES :: 0x00000400
ICC_INTERNET_CLASSES :: 0x00000800
ICC_PAGESCROLLER_CLASS :: 0x00001000
ICC_NATIVEFNTCTL_CLASS :: 0x00002000
ICC_STANDARD_CLASSES :: 0x00004000
ICC_LINK_CLASS :: 0x00008000
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 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
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,
}
LPNMHDFILTERBTNCLICK :: ^NMHDFILTERBTNCLICK
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
NMTTCUSTOMDRAW :: struct {
nmcd: NMCUSTOMDRAW,
uDrawFlags: UINT,
}
LPNMTTCUSTOMDRAW :: ^NMTTCUSTOMDRAW
@(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
NMBCDROPDOWN :: struct {
hdr: NMHDR,
rcButton: RECT,
}
LPNMBCDROPDOWN :: ^NMBCDROPDOWN
// 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(rawptr(psz)))
}
Button_GetNote :: #force_inline proc "system" (hwnd: HWND, psz: LPCWSTR, pcc: ^c_int) -> BOOL {
return cast(BOOL)SendMessageW(hwnd, BCM_GETNOTE, uintptr(pcc), cast(LPARAM)uintptr(rawptr(psz)))
}
Button_GetNoteLength :: #force_inline proc "system" (hwnd: HWND) -> LRESULT {
return SendMessageW(hwnd, BCM_GETNOTELENGTH, 0, 0)
}
Button_SetElevationRequiredState :: #force_inline proc "system" (hwnd: HWND, fRequired: BOOL) -> LRESULT {
return 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(rawptr(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(rawptr(lpcwText)))
}
Edit_GetCueBannerText :: #force_inline proc "system" (hwnd: HWND, lpwText: LPWSTR, cchText: LONG) -> BOOL {
return cast(BOOL)SendMessageW(hwnd, EM_GETCUEBANNER, 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(rawptr(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, transmute(uintptr)(pfnGroupCompare), cast(LPARAM)uintptr(pUser))
}
ListView_InsertGroupSorted :: #force_inline proc "system" (hwnd: HWND, structInsert: PLVINSERTGROUPSORTED) {
SendMessageW(hwnd, LVM_INSERTGROUPSORTED, 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, 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, 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, uintptr(hti), cast(LPARAM)mask)
}
TreeView_GetCheckState :: #force_inline proc "system" (hwndTV: HWND, hti: HTREEITEM) -> UINT {
return ((cast(UINT)SendMessageW(hwndTV, TVM_GETITEMSTATE, 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, 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, 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)
}