2
0

comctl32.odin 74 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097
  1. #+build windows
  2. package sys_windows
  3. foreign import "system:Comctl32.lib"
  4. @(default_calling_convention="system")
  5. foreign Comctl32 {
  6. InitCommonControlsEx :: proc(picce: ^INITCOMMONCONTROLSEX) -> BOOL ---
  7. LoadIconWithScaleDown :: proc(hinst: HINSTANCE, pszName: PCWSTR, cx: c_int, cy: c_int, phico: ^HICON) -> HRESULT ---
  8. SetWindowSubclass :: proc(hwnd: HWND, pfnSubclass: SUBCLASSPROC, uIdSubclass: UINT_PTR, dwRefData: DWORD_PTR) ---
  9. }
  10. ICC_LISTVIEW_CLASSES :: 0x00000001
  11. ICC_TREEVIEW_CLASSES :: 0x00000002
  12. ICC_BAR_CLASSES :: 0x00000004
  13. ICC_TAB_CLASSES :: 0x00000008
  14. ICC_UPDOWN_CLASS :: 0x00000010
  15. ICC_PROGRESS_CLASS :: 0x00000020
  16. ICC_HOTKEY_CLASS :: 0x00000040
  17. ICC_ANIMATE_CLASS :: 0x00000080
  18. ICC_WIN95_CLASSES :: 0x000000FF
  19. ICC_DATE_CLASSES :: 0x00000100
  20. ICC_USEREX_CLASSES :: 0x00000200
  21. ICC_COOL_CLASSES :: 0x00000400
  22. ICC_INTERNET_CLASSES :: 0x00000800
  23. ICC_PAGESCROLLER_CLASS :: 0x00001000
  24. ICC_NATIVEFNTCTL_CLASS :: 0x00002000
  25. ICC_STANDARD_CLASSES :: 0x00004000
  26. ICC_LINK_CLASS :: 0x00008000
  27. INITCOMMONCONTROLSEX :: struct {
  28. dwSize: DWORD,
  29. dwICC: DWORD,
  30. }
  31. COMCTL32_VERSION :: 6
  32. HINST_COMMCTRL :: cast(HINSTANCE)(~uintptr(0))
  33. // Common Control Class Names
  34. WC_HEADER :: "SysHeader32"
  35. WC_LISTVIEW :: "SysListView32"
  36. WC_TREEVIEW :: "SysTreeView32"
  37. WC_COMBOBOXEX :: "ComboBoxEx32"
  38. WC_TABCONTROL :: "SysTabControl32"
  39. WC_IPADDRESS :: "SysIPAddress32"
  40. WC_PAGESCROLLER :: "SysPager"
  41. WC_NATIVEFONTCTL :: "NativeFontCtl"
  42. WC_BUTTON :: "Button"
  43. WC_STATIC :: "Static"
  44. WC_EDIT :: "Edit"
  45. WC_LISTBOX :: "ListBox"
  46. WC_COMBOBOX :: "ComboBox"
  47. WC_SCROLLBAR :: "ScrollBar"
  48. WC_LINK :: "SysLink"
  49. TOOLBARCLASSNAME :: "ToolbarWindow32"
  50. REBARCLASSNAME :: "ReBarWindow32"
  51. STATUSCLASSNAME :: "msctls_statusbar32"
  52. TOOLTIPS_CLASS :: "tooltips_class32"
  53. TRACKBAR_CLASS :: "msctls_trackbar32"
  54. UPDOWN_CLASS :: "msctls_updown32"
  55. PROGRESS_CLASS :: "msctls_progress32"
  56. HOTKEY_CLASS :: "msctls_hotkey32"
  57. ANIMATE_CLASS :: "SysAnimate32"
  58. MONTHCAL_CLASS :: "SysMonthCal32"
  59. DATETIMEPICK_CLASS :: "SysDateTimePick32"
  60. // Common Control Constants
  61. MSGF_COMMCTRL_BEGINDRAG :: 0x4200
  62. MSGF_COMMCTRL_SIZEHEADER :: 0x4201
  63. MSGF_COMMCTRL_DRAGSELECT :: 0x4202
  64. MSGF_COMMCTRL_TOOLBARCUST :: 0x4203
  65. // Custom Draw Constants
  66. CDRF_DODEFAULT :: 0x00
  67. CDRF_NEWFONT :: 0x02
  68. CDRF_SKIPDEFAULT :: 0x04
  69. CDRF_NOTIFYPOSTPAINT :: 0x10
  70. CDRF_NOTIFYITEMDRAW :: 0x20
  71. CDRF_NOTIFYSUBITEMDRAW :: 0x20
  72. CDRF_NOTIFYPOSTERASE :: 0x40
  73. CDDS_PREPAINT :: 0x00001
  74. CDDS_POSTPAINT :: 0x00002
  75. CDDS_PREERASE :: 0x00003
  76. CDDS_POSTERASE :: 0x00004
  77. CDDS_ITEM :: 0x10000
  78. CDDS_ITEMPREPAINT :: (CDDS_ITEM | CDDS_PREPAINT)
  79. CDDS_ITEMPOSTPAINT :: (CDDS_ITEM | CDDS_POSTPAINT)
  80. CDDS_ITEMPREERASE :: (CDDS_ITEM | CDDS_PREERASE)
  81. CDDS_ITEMPOSTERASE :: (CDDS_ITEM | CDDS_POSTERASE)
  82. CDDS_SUBITEM :: 0x20000
  83. CDIS_SELECTED :: 0x001
  84. CDIS_GRAYED :: 0x002
  85. CDIS_DISABLED :: 0x004
  86. CDIS_CHECKED :: 0x008
  87. CDIS_FOCUS :: 0x010
  88. CDIS_DEFAULT :: 0x020
  89. CDIS_HOT :: 0x040
  90. CDIS_MARKED :: 0x080
  91. CDIS_INDETERMINATE :: 0x100
  92. CDIS_SHOWKEYBOARDCUES :: 0x200
  93. // Image Lists
  94. CLR_NONE :: 0xFFFFFFFF
  95. CLR_DEFAULT :: 0xFF000000
  96. ILC_MASK :: 0x00000001
  97. ILC_COLOR :: 0x00000000
  98. ILC_COLORDDB :: 0x000000FE
  99. ILC_COLOR4 :: 0x00000004
  100. ILC_COLOR8 :: 0x00000008
  101. ILC_COLOR16 :: 0x00000010
  102. ILC_COLOR24 :: 0x00000018
  103. ILC_COLOR32 :: 0x00000020
  104. ILC_PALETTE :: 0x00000800
  105. ILC_MIRROR :: 0x00002000
  106. ILC_PERITEMMIRROR :: 0x00008000
  107. ILC_ORIGINALSIZE :: 0x00010000
  108. ILC_HIGHQUALITYSCALE :: 0x00020000
  109. ILD_NORMAL :: 0x00000000
  110. ILD_TRANSPARENT :: 0x00000001
  111. ILD_MASK :: 0x00000010
  112. ILD_IMAGE :: 0x00000020
  113. ILD_ROP :: 0x00000040
  114. ILD_BLEND25 :: 0x00000002
  115. ILD_BLEND50 :: 0x00000004
  116. ILD_OVERLAYMASK :: 0x00000F00
  117. ILD_PRESERVEALPHA :: 0x00001000
  118. ILD_SCALE :: 0x00002000
  119. ILD_DPISCALE :: 0x00004000
  120. ILD_ASYNC :: 0x00008000
  121. ILD_SELECTED :: ILD_BLEND50
  122. ILD_FOCUS :: ILD_BLEND25
  123. ILD_BLEND :: ILD_BLEND50
  124. CLR_HILIGHT :: CLR_DEFAULT
  125. ILS_NORMAL :: 0x00000000
  126. ILS_GLOW :: 0x00000001
  127. ILS_SHADOW :: 0x00000002
  128. ILS_SATURATE :: 0x00000004
  129. ILS_ALPHA :: 0x00000008
  130. ILGT_NORMAL :: 0x00000000
  131. ILGT_ASYNC :: 0x00000001
  132. ILCF_MOVE :: 0x00000000
  133. ILCF_SWAP :: 0x00000001
  134. ILP_NORMAL :: 0
  135. ILP_DOWNLEVEL :: 1
  136. IMAGELISTDRAWPARAMS :: struct {
  137. cbSize: DWORD,
  138. himl: HIMAGELIST,
  139. i: i32,
  140. hdcDst: HDC,
  141. x: i32,
  142. y: i32,
  143. cx: i32,
  144. cy: i32,
  145. xBitmap: i32,
  146. yBitmap: i32,
  147. rgbBk: COLORREF,
  148. rgbFg: COLORREF,
  149. fStyle: UINT,
  150. dwRop: DWORD,
  151. fState: DWORD,
  152. Frame: DWORD,
  153. crEffect: COLORREF,
  154. }
  155. LPIMAGELISTDRAWPARAMS :: ^IMAGELISTDRAWPARAMS
  156. IMAGEINFO :: struct {
  157. hbmImage: HBITMAP,
  158. hbmMask: HBITMAP,
  159. Unused1: i32,
  160. Unused2: i32,
  161. rcImage: RECT,
  162. }
  163. LPIMAGEINFO :: ^IMAGEINFO
  164. @(default_calling_convention="system")
  165. foreign Comctl32 {
  166. ImageList_Create :: proc(cx, cy: i32, flags: UINT, cInitial, cGrow: i32) -> HIMAGELIST ---
  167. ImageList_Destroy :: proc(himl: HIMAGELIST) -> BOOL ---
  168. ImageList_GetImageCount :: proc(himl: HIMAGELIST) -> i32 ---
  169. ImageList_SetImageCount :: proc(himl: HIMAGELIST, uNewCount: UINT) -> BOOL ---
  170. ImageList_Add :: proc(himl: HIMAGELIST, hbmImage, hbmMask: HBITMAP) -> i32 ---
  171. ImageList_ReplaceIcon :: proc(himl: HIMAGELIST, i: i32, hicon: HICON) -> i32 ---
  172. ImageList_SetBkColor :: proc(himl: HIMAGELIST, clrBk: COLORREF) -> COLORREF ---
  173. ImageList_GetBkColor :: proc(himl: HIMAGELIST) -> COLORREF ---
  174. ImageList_SetOverlayImage :: proc(himl: HIMAGELIST, iImage: i32, iOverlay: i32) -> BOOL ---
  175. ImageList_Draw :: proc(himl: HIMAGELIST, i: i32, hdcDst: HDC, x, y: i32, fStyle: UINT) -> BOOL ---
  176. ImageList_Replace :: proc(himl: HIMAGELIST, i: i32, hbmImage, hbmMask: HBITMAP) -> BOOL ---
  177. ImageList_AddMasked :: proc(himl: HIMAGELIST, hbmImage: HBITMAP, crMask: COLORREF) -> i32 ---
  178. ImageList_DrawEx :: proc(himl: HIMAGELIST, i: i32, hdcDst: HDC, x, y, dx, dy: i32, rgbBk, rgbFg: COLORREF, fStyle: UINT) -> BOOL ---
  179. ImageList_DrawIndirect :: proc(pimldp: ^IMAGELISTDRAWPARAMS) -> BOOL ---
  180. ImageList_Remove :: proc(himl: HIMAGELIST, i: i32) -> BOOL ---
  181. ImageList_GetIcon :: proc(himl: HIMAGELIST, i: i32, flags: UINT) -> HICON ---
  182. ImageList_LoadImageW :: proc(hi: HINSTANCE, lpbmp: LPCWSTR, cx, cgrow: i32, crMask: COLORREF, uType, uFlags: UINT) -> HIMAGELIST ---
  183. ImageList_Copy :: proc(himlDst: HIMAGELIST, iDst: i32, himlSrc: HIMAGELIST, iSrc: i32, uFlags: UINT) -> BOOL ---
  184. ImageList_BeginDrag :: proc(himlTrack: HIMAGELIST, iTrack, dxHotspot, dyHotspot: i32) -> BOOL ---
  185. ImageList_EndDrag :: proc() ---
  186. ImageList_DragEnter :: proc(hwndLock: HWND, x, y: i32) -> BOOL ---
  187. ImageList_DragLeave :: proc(hwndLock: HWND) -> BOOL ---
  188. ImageList_DragMove :: proc(x, y: i32) -> BOOL ---
  189. ImageList_SetDragCursorImage :: proc(himlDrag: HIMAGELIST, iDrag, dxHotspot, dyHotspot: i32) -> BOOL ---
  190. ImageList_DragShowNolock :: proc(fShow: BOOL) -> BOOL ---
  191. ImageList_GetDragImage :: proc(ppt, pptHotspot: ^POINT) -> HIMAGELIST ---
  192. ImageList_Read :: proc(pstm: ^IStream) -> HIMAGELIST ---
  193. ImageList_Write :: proc(himl: HIMAGELIST, pstm: ^IStream) -> BOOL ---
  194. ImageList_ReadEx :: proc(dwFlags: DWORD, pstm: ^IStream, riid: REFIID, ppv: PVOID) -> HRESULT ---
  195. ImageList_WriteEx :: proc(himl: HIMAGELIST, dwFlags: DWORD, pstm: ^IStream) -> HRESULT ---
  196. ImageList_GetIconSize :: proc(himl: HIMAGELIST, cx, cy: ^i32) -> BOOL ---
  197. ImageList_SetIconSize :: proc(himl: HIMAGELIST, cx, cy: i32) -> BOOL ---
  198. ImageList_GetImageInfo :: proc(himl: HIMAGELIST, i: i32, pImageInfo: ^IMAGEINFO) -> BOOL ---
  199. ImageList_Merge :: proc(himl1: HIMAGELIST, i1: i32, himl2: HIMAGELIST, i2: i32, dx, dy: i32) -> HIMAGELIST ---
  200. ImageList_Duplicate :: proc(himl: HIMAGELIST) -> HIMAGELIST ---
  201. HIMAGELIST_QueryInterface :: proc(himl: HIMAGELIST, riid: REFIID, ppv: rawptr) -> HRESULT ---
  202. }
  203. ImageList_AddIcon :: #force_inline proc "system" (himl: HIMAGELIST, hicon: HICON) -> i32 {
  204. return ImageList_ReplaceIcon(himl, -1, hicon)
  205. }
  206. ImageList_RemoveAll :: #force_inline proc "system" (himl: HIMAGELIST) -> BOOL {
  207. return ImageList_Remove(himl, -1)
  208. }
  209. ImageList_ExtractIcon :: #force_inline proc "system" (hi: HINSTANCE, himl: HIMAGELIST, i: i32) -> HICON {
  210. return ImageList_GetIcon(himl, i, 0)
  211. }
  212. ImageList_LoadBitmap :: #force_inline proc "system" (hi: HINSTANCE, lpbmp: LPCWSTR, cx, cGrow: i32, crMask: COLORREF) -> HIMAGELIST {
  213. return ImageList_LoadImageW(hi, lpbmp, cx, cGrow, crMask, IMAGE_BITMAP, 0)
  214. }
  215. // Status Bar Control
  216. SBT_NOBORDERS :: 0x0100
  217. SBT_POPOUT :: 0x0200
  218. SBT_RTLREADING :: 0x0400
  219. SBT_NOTABPARSING :: 0x0800
  220. SBT_OWNERDRAW :: 0x1000
  221. SBN_SIMPLEMODECHANGE :: SBN_FIRST - 0
  222. SB_SIMPLEID :: 0xFF
  223. @(default_calling_convention="system")
  224. foreign Comctl32 {
  225. DrawStatusTextW :: proc(hDC: HDC, lprc: ^RECT, pszText: LPCWSTR, uFlags: UINT) ---
  226. CreateStatusWindowW :: proc(style: LONG, lpszText: LPCWSTR, hwndParent: HWND, wID: UINT) -> HWND ---
  227. }
  228. // Menu Help
  229. MINSYSCOMMAND :: SC_SIZE
  230. @(default_calling_convention="system")
  231. foreign Comctl32 {
  232. MenuHelp :: proc(uMsg: UINT, wParam: WPARAM, lParam: LPARAM, hMainMenu: HMENU, hInst: HINSTANCE, hwndStatus: HWND, lpwIDs: ^UINT) ---
  233. ShowHideMenuCtl :: proc(hWnd: HWND, uFlags: UINT_PTR, lpInfo: LPINT) -> BOOL ---
  234. GetEffectiveClientRect :: proc(hWnd: HWND, lprc: LPRECT, lpInfo: ^INT) ---
  235. }
  236. // Drag List
  237. DL_CURSORSET :: 0
  238. DL_STOPCURSOR :: 1
  239. DL_COPYCURSOR :: 2
  240. DL_MOVECURSOR :: 3
  241. DRAGLISTMSGSTRING :: "commctrl_DragListMsg"
  242. @(default_calling_convention="system")
  243. foreign Comctl32 {
  244. MakeDragList :: proc(hLB: HWND) -> BOOL ---
  245. DrawInsert :: proc(handParent: HWND, hLB: HWND, nItem: c_int) ---
  246. LBItemFromPt :: proc(hLB: HWND, pt: POINT, bAutoScroll: BOOL) -> c_int ---
  247. }
  248. // Header Control
  249. HDTEXTFILTERW :: struct {
  250. pszText: LPWSTR,
  251. cchTextMax: INT,
  252. }
  253. HD_TEXTFILTERW :: HDTEXTFILTERW
  254. LPHDTEXTFILTERW :: ^HDTEXTFILTERW
  255. LPHD_TEXTFILTERW :: LPHDTEXTFILTERW
  256. HDITEMW :: struct {
  257. mask: UINT,
  258. cxy: c_int,
  259. pszText: LPWSTR,
  260. hbm: HBITMAP,
  261. cchTextMax: c_int,
  262. fmt: c_int,
  263. lParam: LPARAM,
  264. iImage: c_int,
  265. iOrder: c_int,
  266. type: UINT,
  267. pvFilter: rawptr,
  268. }
  269. HD_ITEMW :: HDITEMW
  270. LPHDITEMW :: ^HDITEMW
  271. LPHD_ITEMW :: LPHDITEMW
  272. HDLAYOUT :: struct {
  273. prc: ^RECT,
  274. pwpos: ^WINDOWPOS,
  275. }
  276. HD_LAYOUT :: HDLAYOUT
  277. LPHDLAYOUT :: ^HDLAYOUT
  278. LPHD_LAYOUT :: LPHDLAYOUT
  279. HDHITTESTINFO :: struct {
  280. pt: POINT,
  281. flags: UINT,
  282. iItem: c_int,
  283. }
  284. HD_HITTESTINFO :: HDHITTESTINFO
  285. LPHDHITTESTINFO :: ^HDHITTESTINFO
  286. LPHD_HITTESTINFO :: LPHDHITTESTINFO
  287. NMHEADERW :: struct {
  288. hdr: NMHDR,
  289. iItem: c_int,
  290. iButton: c_int,
  291. pitem: ^HDITEMW,
  292. }
  293. LPNMHEADERW :: ^NMHEADERW
  294. HD_NOTIFYW :: NMHEADERW
  295. LPHD_NOTIFYW :: LPNMHEADERW
  296. NMHDDISPINFOW :: struct {
  297. hdr: NMHDR,
  298. iItem: c_int,
  299. mask: UINT,
  300. pszText: LPWSTR,
  301. cchTextMax: c_int,
  302. iImage: c_int,
  303. lParam: LPARAM,
  304. }
  305. LPNMHDDISPINFOW :: ^NMHDDISPINFOW
  306. NMHDFILTERBTNCLICK :: struct {
  307. hdr: NMHDR,
  308. iItem: c_int,
  309. rc: RECT,
  310. }
  311. LPNMHDFILTERBTNCLICK :: ^NMHDFILTERBTNCLICK
  312. Header_GetItemCount :: #force_inline proc "system" (hwndHD: HWND) -> c_int {
  313. return cast(c_int)SendMessageW(hwndHD, HDM_GETITEMCOUNT, 0, 0)
  314. }
  315. Header_InsertItem :: #force_inline proc "system" (hwndHD: HWND, i: c_int, phdi: ^HD_ITEMW) -> c_int {
  316. return cast(c_int)SendMessageW(hwndHD, HDM_INSERTITEMW, cast(WPARAM)i, cast(LPARAM)uintptr(phdi))
  317. }
  318. Header_DeleteItem :: #force_inline proc "system" (hwndHD: HWND, i: c_int) -> BOOL {
  319. return cast(BOOL)SendMessageW(hwndHD, HDM_DELETEITEM, cast(WPARAM)i, 0)
  320. }
  321. Header_GetItem :: #force_inline proc "system" (hwndHD: HWND, i: c_int, phdi: ^HD_ITEMW) -> BOOL {
  322. return cast(BOOL)SendMessageW(hwndHD, HDM_GETITEMW, cast(WPARAM)i, cast(LPARAM)uintptr(phdi))
  323. }
  324. Header_SetItem :: #force_inline proc "system" (hwndHD: HWND, i: c_int, phdi: ^HD_ITEMW) -> BOOL {
  325. return cast(BOOL)SendMessageW(hwndHD, HDM_SETITEMW, cast(WPARAM)i, cast(LPARAM)uintptr(phdi))
  326. }
  327. Header_Layout :: #force_inline proc "system" (hwndHD: HWND, playout: ^HD_LAYOUT) -> BOOL {
  328. return cast(BOOL)SendMessageW(hwndHD, HDM_LAYOUT, 0, cast(LPARAM)uintptr(playout))
  329. }
  330. Header_GetItemRect :: #force_inline proc "system" (hwnd: HWND, iItem: c_int, lprc: ^RECT) -> BOOL {
  331. return cast(BOOL)SendMessageW(hwnd,HDM_GETITEMRECT,cast(WPARAM)iItem,cast(LPARAM)uintptr(lprc))
  332. }
  333. Header_SetImageList :: #force_inline proc "system" (hwnd: HWND, himl: HIMAGELIST) -> HIMAGELIST {
  334. return cast(HIMAGELIST)uintptr(SendMessageW(hwnd,HDM_SETIMAGELIST,0,cast(LPARAM)uintptr(himl)))
  335. }
  336. Header_GetImageList :: #force_inline proc "system" (hwnd: HWND) -> HIMAGELIST {
  337. return cast(HIMAGELIST)uintptr(SendMessageW(hwnd,HDM_GETIMAGELIST,0,0))
  338. }
  339. Header_OrderToIndex :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> c_int {
  340. return cast(c_int)SendMessageW(hwnd,HDM_ORDERTOINDEX,cast(WPARAM)i,0)
  341. }
  342. Header_CreateDragImage :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> HIMAGELIST {
  343. return cast(HIMAGELIST)uintptr(SendMessageW(hwnd,HDM_CREATEDRAGIMAGE,cast(WPARAM)i,0))
  344. }
  345. Header_GetOrderArray :: #force_inline proc "system" (hwnd: HWND, iCount: c_int, lpi: ^c_int) -> BOOL {
  346. return cast(BOOL)SendMessageW(hwnd,HDM_GETORDERARRAY,cast(WPARAM)iCount,cast(LPARAM)uintptr(lpi))
  347. }
  348. Header_SetOrderArray :: #force_inline proc "system" (hwnd: HWND, iCount: c_int, lpi: ^c_int) -> BOOL {
  349. return cast(BOOL)SendMessageW(hwnd,HDM_SETORDERARRAY,cast(WPARAM)iCount,cast(LPARAM)uintptr(lpi))
  350. }
  351. Header_SetHotDivider :: #force_inline proc "system" (hwnd: HWND, fPos: BOOL, dw: DWORD) -> c_int {
  352. return cast(c_int)SendMessageW(hwnd,HDM_SETHOTDIVIDER,cast(WPARAM)fPos,cast(LPARAM)dw)
  353. }
  354. Header_SetBitmapMargin :: #force_inline proc "system" (hwnd: HWND, iWidth: c_int) -> c_int {
  355. return cast(c_int)SendMessageW(hwnd,HDM_SETBITMAPMARGIN,cast(WPARAM)iWidth,0)
  356. }
  357. Header_GetBitmapMargin :: #force_inline proc "system" (hwnd: HWND) -> c_int {
  358. return cast(c_int)SendMessageW(hwnd,HDM_GETBITMAPMARGIN,0,0)
  359. }
  360. Header_SetUnicodeFormat :: #force_inline proc "system" (hwnd: HWND, fUnicode: BOOL) -> BOOL {
  361. return cast(BOOL)SendMessageW(hwnd,HDM_SETUNICODEFORMAT,cast(WPARAM)fUnicode,0)
  362. }
  363. Header_GetUnicodeFormat :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
  364. return cast(BOOL)SendMessageW(hwnd,HDM_GETUNICODEFORMAT,0,0)
  365. }
  366. Header_SetFilterChangeTimeout :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> c_int {
  367. return cast(c_int)SendMessageW(hwnd,HDM_SETFILTERCHANGETIMEOUT,0,cast(LPARAM)i)
  368. }
  369. Header_EditFilter :: #force_inline proc "system" (hwnd: HWND, i: c_int, fDiscardChanges: BOOL) -> BOOL {
  370. return cast(BOOL)SendMessageW(hwnd,HDM_EDITFILTER,cast(WPARAM)i,MAKELPARAM(fDiscardChanges,0))
  371. }
  372. Header_ClearFilter :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> BOOL {
  373. return cast(BOOL)SendMessageW(hwnd,HDM_CLEARFILTER,cast(WPARAM)i,0)
  374. }
  375. Header_ClearAllFilters :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
  376. return cast(BOOL)SendMessageW(hwnd,HDM_CLEARFILTER,~WPARAM(0),0)
  377. }
  378. // Toolbar Control
  379. COLORSCHEME :: struct {
  380. dwSize: DWORD,
  381. clrBtnHighlight: COLORREF,
  382. clrBtnShadow: COLORREF,
  383. }
  384. LPCOLORSCHEME :: ^COLORSCHEME
  385. COLORMAP :: struct {
  386. from: COLORREF,
  387. to: COLORREF,
  388. }
  389. LPCOLORMAP :: ^COLORMAP
  390. TBBUTTON :: struct {
  391. iBitmap: c_int,
  392. idCommand: c_int,
  393. fsState: BYTE,
  394. fsStyle: BYTE,
  395. bReserved: [size_of(uintptr) - 2]BYTE,
  396. dwData: DWORD_PTR,
  397. iString: INT_PTR,
  398. }
  399. PTBBUTTON :: ^TBBUTTON
  400. LPTBBUTTON :: ^TBBUTTON
  401. LPCTBBUTTON :: ^TBBUTTON
  402. TBADDBITMAP :: struct {
  403. hInst: HINSTANCE,
  404. nID: UINT_PTR,
  405. }
  406. LPTBADDBITMAP :: ^TBADDBITMAP
  407. TBSAVEPARAMSW :: struct {
  408. hkr: HKEY,
  409. pszSubKey: LPCWSTR,
  410. pszValueName: LPCWSTR,
  411. }
  412. TBINSERTMARK :: struct {
  413. iButton: c_int,
  414. dwFlags: DWORD,
  415. }
  416. LPTBINSERTMARK :: ^TBINSERTMARK
  417. TBREPLACEBITMAP :: struct {
  418. hInstOld: HINSTANCE,
  419. nIDOld: UINT_PTR,
  420. hInstNew: HINSTANCE,
  421. nIDNew: UINT_PTR,
  422. nButtons: c_int,
  423. }
  424. LPTBREPLACEBITMAP :: ^TBREPLACEBITMAP
  425. TBBUTTONINFOW :: struct {
  426. cbSize: UINT,
  427. dwMask: DWORD,
  428. idCommand: c_int,
  429. iImage: c_int,
  430. fsState: BYTE,
  431. fsStyle: BYTE,
  432. cx: WORD,
  433. lParam: DWORD_PTR,
  434. pszText: LPWSTR,
  435. cchText: c_int,
  436. }
  437. LPTBBUTTONINFOW :: ^TBBUTTONINFOW
  438. TBMETRICS :: struct {
  439. cbSize: UINT,
  440. dwMask: DWORD,
  441. cxPad: c_int,
  442. cyPad: c_int,
  443. cxBarPad: c_int,
  444. cyBarPad: c_int,
  445. cxButtonSpacing: c_int,
  446. cyButtonSpacing: c_int,
  447. }
  448. LPTBMETRICS :: ^TBMETRICS
  449. NMTTCUSTOMDRAW :: struct {
  450. nmcd: NMCUSTOMDRAW,
  451. uDrawFlags: UINT,
  452. }
  453. LPNMTTCUSTOMDRAW :: ^NMTTCUSTOMDRAW
  454. @(default_calling_convention="system")
  455. foreign Comctl32 {
  456. 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 ---
  457. CreateMappedBitmap :: proc(hInstance: HINSTANCE, idBitmap: INT_PTR, wFlags: UINT, lpColorMap: LPCOLORMAP, iNumMaps: c_int) -> HBITMAP ---
  458. }
  459. // Button Control
  460. BUTTON_IMAGELIST_ALIGN_LEFT :: 0
  461. BUTTON_IMAGELIST_ALIGN_RIGHT :: 1
  462. BUTTON_IMAGELIST_ALIGN_TOP :: 2
  463. BUTTON_IMAGELIST_ALIGN_BOTTOM :: 3
  464. BUTTON_IMAGELIST_ALIGN_CENTER :: 4
  465. BCSIF_GLYPH :: 0x0001
  466. BCSIF_IMAGE :: 0x0002
  467. BCSIF_STYLE :: 0x0004
  468. BCSIF_SIZE :: 0x0008
  469. BCSS_NOSPLIT :: 0x0001
  470. BCSS_STRETCH :: 0x0002
  471. BCSS_ALIGNLEFT :: 0x0004
  472. BCSS_IMAGE :: 0x0008
  473. BUTTON_IMAGELIST :: struct {
  474. himl: HIMAGELIST,
  475. margin: RECT,
  476. uAlign: UINT,
  477. }
  478. PBUTTON_IMAGELIST :: ^BUTTON_IMAGELIST
  479. BUTTON_SPLITINFO :: struct {
  480. mask: UINT,
  481. himlGlyph: HIMAGELIST,
  482. uSplitStyle: UINT,
  483. size: SIZE,
  484. }
  485. PBUTTON_SPLITINFO :: ^BUTTON_SPLITINFO
  486. NMBCHOTITEM :: struct {
  487. hdr: NMHDR,
  488. dwFlags: DWORD,
  489. }
  490. LPNMBCHOTITEM :: ^NMBCHOTITEM
  491. NMBCDROPDOWN :: struct {
  492. hdr: NMHDR,
  493. rcButton: RECT,
  494. }
  495. LPNMBCDROPDOWN :: ^NMBCDROPDOWN
  496. // BCM_SETIMAGELIST value
  497. BCCL_NOGLYPH :: cast(HIMAGELIST)(~uintptr(0))
  498. Button_GetIdealSize :: #force_inline proc "system" (hwnd: HWND, psize: ^SIZE) -> BOOL {
  499. return cast(BOOL)SendMessageW(hwnd, BCM_GETIDEALSIZE, 0, cast(LPARAM)uintptr(psize))
  500. }
  501. Button_SetImageList :: #force_inline proc "system" (hwnd: HWND, pbuttonImagelist: PBUTTON_IMAGELIST) -> BOOL {
  502. return cast(BOOL)SendMessageW(hwnd, BCM_SETIMAGELIST, 0, cast(LPARAM)uintptr(pbuttonImagelist))
  503. }
  504. Button_GetImageList :: #force_inline proc "system" (hwnd: HWND, pbuttonImagelist: PBUTTON_IMAGELIST) -> BOOL {
  505. return cast(BOOL)SendMessageW(hwnd, BCM_GETIMAGELIST, 0, cast(LPARAM)uintptr(pbuttonImagelist))
  506. }
  507. Button_SetTextMargin :: #force_inline proc "system" (hwnd: HWND, pmargin: ^RECT) -> BOOL {
  508. return cast(BOOL)SendMessageW(hwnd, BCM_SETTEXTMARGIN, 0, cast(LPARAM)uintptr(pmargin))
  509. }
  510. Button_GetTextMargin :: #force_inline proc "system" (hwnd: HWND, pmargin: ^RECT) -> BOOL {
  511. return cast(BOOL)SendMessageW(hwnd, BCM_GETTEXTMARGIN, 0, cast(LPARAM)uintptr(pmargin))
  512. }
  513. Button_SetNote :: #force_inline proc "system" (hwnd: HWND, psz: LPCWSTR) -> BOOL {
  514. return cast(BOOL)SendMessageW(hwnd, BCM_SETNOTE, 0, cast(LPARAM)uintptr(rawptr(psz)))
  515. }
  516. Button_GetNote :: #force_inline proc "system" (hwnd: HWND, psz: LPCWSTR, pcc: ^c_int) -> BOOL {
  517. return cast(BOOL)SendMessageW(hwnd, BCM_GETNOTE, uintptr(pcc), cast(LPARAM)uintptr(rawptr(psz)))
  518. }
  519. Button_GetNoteLength :: #force_inline proc "system" (hwnd: HWND) -> LRESULT {
  520. return SendMessageW(hwnd, BCM_GETNOTELENGTH, 0, 0)
  521. }
  522. Button_SetElevationRequiredState :: #force_inline proc "system" (hwnd: HWND, fRequired: BOOL) -> LRESULT {
  523. return SendMessageW(hwnd, BCM_SETSHIELD, 0, cast(LPARAM)fRequired)
  524. }
  525. Button_SetDropDownState :: #force_inline proc "system" (hwnd: HWND, fDropDown: BOOL) -> BOOL {
  526. return cast(BOOL)SendMessageW(hwnd, BCM_SETDROPDOWNSTATE, cast(WPARAM)fDropDown, 0)
  527. }
  528. Button_SetSplitInfo :: #force_inline proc "system" (hwnd: HWND, psi: ^BUTTON_SPLITINFO) -> BOOL {
  529. return cast(BOOL)SendMessageW(hwnd, BCM_SETSPLITINFO, 0, cast(LPARAM)uintptr(psi))
  530. }
  531. Button_GetSplitInfo :: #force_inline proc "system" (hwnd: HWND, psi: ^BUTTON_SPLITINFO) -> BOOL {
  532. return cast(BOOL)SendMessageW(hwnd, BCM_GETSPLITINFO, 0, cast(LPARAM)uintptr(psi))
  533. }
  534. // Edit Control
  535. EDITBALLOONTIP :: struct {
  536. cbStruct: DWORD,
  537. pszTitle: LPCWSTR,
  538. pszText: LPCWSTR,
  539. ttiIcon: INT,
  540. }
  541. PEDITBALLOONTIP :: ^EDITBALLOONTIP
  542. Edit_SetCueBannerText :: #force_inline proc "system" (hwnd: HWND, lpcwText: LPCWSTR) -> BOOL {
  543. return cast(BOOL)SendMessageW(hwnd, EM_SETCUEBANNER, 0, cast(LPARAM)uintptr(rawptr(lpcwText)))
  544. }
  545. Edit_SetCueBannerTextFocused :: #force_inline proc "system" (hwnd: HWND, lpcwText: LPCWSTR, fDrawFocused: BOOL) -> BOOL {
  546. return cast(BOOL)SendMessageW(hwnd, EM_SETCUEBANNER, cast(WPARAM)fDrawFocused, cast(LPARAM)uintptr(rawptr(lpcwText)))
  547. }
  548. Edit_GetCueBannerText :: #force_inline proc "system" (hwnd: HWND, lpwText: LPWSTR, cchText: LONG) -> BOOL {
  549. return cast(BOOL)SendMessageW(hwnd, EM_GETCUEBANNER, uintptr(lpwText), cast(LPARAM)cchText)
  550. }
  551. Edit_ShowBalloonTip :: #force_inline proc "system" (hwnd: HWND, peditballoontip: PEDITBALLOONTIP) -> BOOL {
  552. return cast(BOOL)SendMessageW(hwnd, EM_SHOWBALLOONTIP, 0, cast(LPARAM)uintptr(peditballoontip))
  553. }
  554. Edit_HideBalloonTip :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
  555. return cast(BOOL)SendMessageW(hwnd, EM_HIDEBALLOONTIP, 0, 0)
  556. }
  557. Edit_SetHilite :: #force_inline proc "system" (hwndCtl: HWND, ichStart: c_int, ichEnd: c_int) {
  558. SendMessageW(hwndCtl, EM_SETHILITE, cast(WPARAM)ichStart, cast(LPARAM)ichEnd)
  559. }
  560. Edit_GetHilite :: #force_inline proc "system" (hwndCtl: HWND) -> DWORD {
  561. return cast(DWORD)SendMessageW(hwndCtl, EM_GETHILITE, 0, 0)
  562. }
  563. Edit_NoSetFocus :: #force_inline proc "system" (hwndCtl: HWND) {
  564. SendMessageW(hwndCtl, EM_NOSETFOCUS, 0, 0)
  565. }
  566. Edit_TakeFocus :: #force_inline proc "system" (hwndCtl: HWND) {
  567. SendMessageW(hwndCtl, EM_TAKEFOCUS, 0, 0)
  568. }
  569. // Up Down Control
  570. @(default_calling_convention="system")
  571. foreign Comctl32 {
  572. 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 ---
  573. }
  574. // Progress Bar Control
  575. PBRANGE :: struct {
  576. iLow: c_int,
  577. iHigh: c_int,
  578. }
  579. PPBRANGE :: ^PBRANGE
  580. // Hot Key Control
  581. HOTKEYF_SHIFT :: 0x1
  582. HOTKEYF_CONTROL :: 0x2
  583. HOTKEYF_ALT :: 0x4
  584. HOTKEYF_EXT :: 0x8
  585. HKCOMB_NONE :: 0x01
  586. HKCOMB_S :: 0x02
  587. HKCOMB_C :: 0x04
  588. HKCOMB_A :: 0x08
  589. HKCOMB_SC :: 0x10
  590. HKCOMB_SA :: 0x20
  591. HKCOMB_CA :: 0x40
  592. HKCOMB_SCA :: 0x80
  593. // List View Control
  594. LVSIL_NORMAL :: 0
  595. LVSIL_SMALL :: 1
  596. LVSIL_STATE :: 2
  597. LVIF_TEXT :: 0x001
  598. LVIF_IMAGE :: 0x002
  599. LVIF_PARAM :: 0x004
  600. LVIF_STATE :: 0x008
  601. LVIF_INDENT :: 0x010
  602. LVIF_GROUPID :: 0x100
  603. LVIF_COLUMNS :: 0x200
  604. LVIF_NORECOMPUTE :: 0x800
  605. LVIS_FOCUSED :: 0x01
  606. LVIS_SELECTED :: 0x02
  607. LVIS_CUT :: 0x04
  608. LVIS_DROPHILITED :: 0x08
  609. LVIS_GLOW :: 0x10
  610. LVIS_ACTIVATING :: 0x20
  611. LVIS_OVERLAYMASK :: 0x0F00
  612. LVIS_STATEIMAGEMASK :: 0xF000
  613. LVNI_ALL :: 0x000
  614. LVNI_FOCUSED :: 0x001
  615. LVNI_SELECTED :: 0x002
  616. LVNI_CUT :: 0x004
  617. LVNI_DROPHILITED :: 0x008
  618. LVNI_ABOVE :: 0x100
  619. LVNI_BELOW :: 0x200
  620. LVNI_TOLEFT :: 0x400
  621. LVNI_TORIGHT :: 0x800
  622. LVFI_PARAM :: 0x01
  623. LVFI_STRING :: 0x02
  624. LVFI_PARTIAL :: 0x08
  625. LVFI_WRAP :: 0x20
  626. LVFI_NEARESTXY :: 0x40
  627. I_INDENTCALLBACK :: -1
  628. I_GROUPIDCALLBACK :: -1
  629. I_GROUPIDNONE :: -2
  630. LPSTR_TEXTCALLBACKW :: cast(LPWSTR)~uintptr(0)
  631. I_IMAGECALLBACK :: -1
  632. I_IMAGENONE :: -2
  633. I_COLUMNSCALLBACK :: ~UINT(0)
  634. LVIR_BOUNDS :: 0
  635. LVIR_ICON :: 1
  636. LVIR_LABEL :: 2
  637. LVIR_SELECTBOUNDS :: 3
  638. LVHT_NOWHERE :: 0x1
  639. LVHT_ONITEMICON :: 0x2
  640. LVHT_ONITEMLABEL :: 0x4
  641. LVHT_ONITEMSTATEICON :: 0x8
  642. LVHT_ONITEM :: LVHT_ONITEMICON | LVHT_ONITEMLABEL | LVHT_ONITEMSTATEICON
  643. LVHT_ABOVE :: 0x08
  644. LVHT_BELOW :: 0x10
  645. LVHT_TORIGHT :: 0x20
  646. LVHT_TOLEFT :: 0x40
  647. LVA_DEFAULT :: 0x0
  648. LVA_ALIGNLEFT :: 0x1
  649. LVA_ALIGNTOP :: 0x2
  650. LVA_SNAPTOGRID :: 0x5
  651. LVCF_FMT :: 0x001
  652. LVCF_WIDTH :: 0x002
  653. LVCF_TEXT :: 0x004
  654. LVCF_SUBITEM :: 0x008
  655. LVCF_IMAGE :: 0x010
  656. LVCF_ORDER :: 0x020
  657. LVCF_MINWIDTH :: 0x040
  658. LVCF_DEFAULTWIDTH :: 0x080
  659. LVCF_IDEALWIDTH :: 0x100
  660. LVCFMT_LEFT :: 0x0000000
  661. LVCFMT_RIGHT :: 0x0000001
  662. LVCFMT_CENTER :: 0x0000002
  663. LVCFMT_FIXED_WIDTH :: 0x0000100
  664. LVCFMT_IMAGE :: 0x0000800
  665. LVCFMT_BITMAP_ON_RIGHT :: 0x0001000
  666. LVCFMT_COL_HAS_IMAGES :: 0x0008000
  667. LVCFMT_NO_DPI_SCALE :: 0x0040000
  668. LVCFMT_FIXED_RATIO :: 0x0080000
  669. LVCFMT_LINE_BREAK :: 0x0100000
  670. LVCFMT_FILL :: 0x0200000
  671. LVCFMT_WRAP :: 0x0400000
  672. LVCFMT_NO_TITLE :: 0x0800000
  673. LVCFMT_SPLITBUTTON :: 0x1000000
  674. LVCFMT_JUSTIFYMASK :: 0x3
  675. LVCFMT_TILE_PLACEMENTMASK :: (LVCFMT_LINE_BREAK|LVCFMT_FILL)
  676. LVSCW_AUTOSIZE :: -1
  677. LVSCW_AUTOSIZE_USEHEADER :: -2
  678. LVSICF_NOINVALIDATEALL :: 0x1
  679. LVSICF_NOSCROLL :: 0x2
  680. LVS_EX_GRIDLINES :: 0x00000001
  681. LVS_EX_SUBITEMIMAGES :: 0x00000002
  682. LVS_EX_CHECKBOXES :: 0x00000004
  683. LVS_EX_TRACKSELECT :: 0x00000008
  684. LVS_EX_HEADERDRAGDROP :: 0x00000010
  685. LVS_EX_FULLROWSELECT :: 0x00000020
  686. LVS_EX_ONECLICKACTIVATE :: 0x00000040
  687. LVS_EX_TWOCLICKACTIVATE :: 0x00000080
  688. LVS_EX_FLATSB :: 0x00000100
  689. LVS_EX_REGIONAL :: 0x00000200
  690. LVS_EX_INFOTIP :: 0x00000400
  691. LVS_EX_UNDERLINEHOT :: 0x00000800
  692. LVS_EX_UNDERLINECOLD :: 0x00001000
  693. LVS_EX_MULTIWORKAREAS :: 0x00002000
  694. LVS_EX_LABELTIP :: 0x00004000
  695. LVS_EX_BORDERSELECT :: 0x00008000
  696. LVS_EX_DOUBLEBUFFER :: 0x00010000
  697. LVS_EX_HIDELABELS :: 0x00020000
  698. LVS_EX_SINGLEROW :: 0x00040000
  699. LVS_EX_SNAPTOGRID :: 0x00080000
  700. LVS_EX_SIMPLESELECT :: 0x00100000
  701. LVS_EX_JUSTIFYCOLUMNS :: 0x00200000
  702. LVS_EX_TRANSPARENTBKGND :: 0x00400000
  703. LVS_EX_TRANSPARENTSHADOWTEXT :: 0x00800000
  704. LVS_EX_AUTOAUTOARRANGE :: 0x01000000
  705. LVS_EX_HEADERINALLVIEWS :: 0x02000000
  706. LVS_EX_AUTOCHECKSELECT :: 0x08000000
  707. LVS_EX_AUTOSIZECOLUMNS :: 0x10000000
  708. LVS_EX_COLUMNSNAPPOINTS :: 0x40000000
  709. LVS_EX_COLUMNOVERFLOW :: 0x80000000
  710. LV_MAX_WORKAREAS :: 16
  711. LVBKIF_SOURCE_NONE :: 0x0
  712. LVBKIF_SOURCE_HBITMAP :: 0x1
  713. LVBKIF_SOURCE_URL :: 0x2
  714. LVBKIF_SOURCE_MASK :: 0x3
  715. LVBKIF_STYLE_NORMAL :: 0x00
  716. LVBKIF_STYLE_TILE :: 0x10
  717. LVBKIF_STYLE_MASK :: 0x10
  718. LVBKIF_FLAG_TILEOFFSET :: 0x100
  719. LVBKIF_TYPE_WATERMARK :: 0x10000000
  720. LV_VIEW_ICON :: 0x0
  721. LV_VIEW_DETAILS :: 0x1
  722. LV_VIEW_SMALLICON :: 0x2
  723. LV_VIEW_LIST :: 0x3
  724. LV_VIEW_TILE :: 0x4
  725. LV_VIEW_MAX :: 0x4
  726. LVGF_NONE :: 0x00
  727. LVGF_HEADER :: 0x01
  728. LVGF_FOOTER :: 0x02
  729. LVGF_STATE :: 0x04
  730. LVGF_ALIGN :: 0x08
  731. LVGF_GROUPID :: 0x10
  732. LVGS_NORMAL :: 0x0
  733. LVGS_COLLAPSED :: 0x1
  734. LVGS_HIDDEN :: 0x2
  735. LVGA_HEADER_LEFT :: 0x1
  736. LVGA_HEADER_CENTER :: 0x2
  737. LVGA_HEADER_RIGHT :: 0x4
  738. LVGA_FOOTER_LEFT :: 0x8
  739. LVGA_FOOTER_CENTER :: 0x10
  740. LVGA_FOOTER_RIGHT :: 0x20
  741. LVGMF_NONE :: 0x0
  742. LVGMF_BORDERSIZE :: 0x1
  743. LVGMF_BORDERCOLOR :: 0x2
  744. LVGMF_TEXTCOLOR :: 0x4
  745. LVTVIF_AUTOSIZE :: 0x0
  746. LVTVIF_FIXEDWIDTH :: 0x1
  747. LVTVIF_FIXEDHEIGHT :: 0x2
  748. LVTVIF_FIXEDSIZE :: 0x3
  749. LVTVIM_TILESIZE :: 0x1
  750. LVTVIM_COLUMNS :: 0x2
  751. LVTVIM_LABELMARGIN :: 0x4
  752. LVIM_AFTER :: 0x1
  753. LVKF_ALT :: 0x1
  754. LVKF_CONTROL :: 0x2
  755. LVKF_SHIFT :: 0x4
  756. LVCDI_ITEM :: 0x0
  757. LVCDI_GROUP :: 0x1
  758. LVCDRF_NOSELECT :: 0x10000
  759. LVCDRF_NOGROUPFRAME :: 0x20000
  760. LVN_ITEMCHANGING :: (LVN_FIRST-0)
  761. LVN_ITEMCHANGED :: (LVN_FIRST-1)
  762. LVN_INSERTITEM :: (LVN_FIRST-2)
  763. LVN_DELETEITEM :: (LVN_FIRST-3)
  764. LVN_DELETEALLITEMS :: (LVN_FIRST-4)
  765. LVN_BEGINLABELEDITA :: (LVN_FIRST-5)
  766. LVN_BEGINLABELEDITW :: (LVN_FIRST-75)
  767. LVN_ENDLABELEDITA :: (LVN_FIRST-6)
  768. LVN_ENDLABELEDITW :: (LVN_FIRST-76)
  769. LVN_COLUMNCLICK :: (LVN_FIRST-8)
  770. LVN_BEGINDRAG :: (LVN_FIRST-9)
  771. LVN_BEGINRDRAG :: (LVN_FIRST-11)
  772. LVN_ODCACHEHINT :: (LVN_FIRST-13)
  773. LVN_ODFINDITEMA :: (LVN_FIRST-52)
  774. LVN_ODFINDITEMW :: (LVN_FIRST-79)
  775. LVN_ITEMACTIVATE :: (LVN_FIRST-14)
  776. LVN_ODSTATECHANGED :: (LVN_FIRST-15)
  777. LVN_HOTTRACK :: (LVN_FIRST-21)
  778. LVN_GETDISPINFOA :: (LVN_FIRST-50)
  779. LVN_GETDISPINFOW :: (LVN_FIRST-77)
  780. LVN_SETDISPINFOA :: (LVN_FIRST-51)
  781. LVN_SETDISPINFOW :: (LVN_FIRST-78)
  782. LVN_KEYDOWN :: (LVN_FIRST-55)
  783. LVN_MARQUEEBEGIN :: (LVN_FIRST-56)
  784. LVN_GETINFOTIPA :: (LVN_FIRST-57)
  785. LVN_GETINFOTIPW :: (LVN_FIRST-58)
  786. LVN_BEGINSCROLL :: (LVN_FIRST-80)
  787. LVN_ENDSCROLL :: (LVN_FIRST-81)
  788. LVIF_DI_SETITEM :: 0x1000
  789. LVGIT_UNFOLDED :: 0x1
  790. LVITEMW :: struct {
  791. mask: UINT,
  792. iItem: c_int,
  793. iSubItem: c_int,
  794. state: UINT,
  795. stateMask: UINT,
  796. pszText: LPWSTR,
  797. cchTextMax: c_int,
  798. iImage: c_int,
  799. lParam: LPARAM,
  800. iIndent: c_int,
  801. iGroupId: c_int,
  802. cColumns: UINT,
  803. puColumns: PUINT,
  804. }
  805. LV_ITEMW :: LVITEMW
  806. LPLVITEMW :: ^LVITEMW
  807. LPLV_ITEMW :: LPLVITEMW
  808. LVFINDINFOW :: struct {
  809. flags: UINT,
  810. psz: LPCWSTR,
  811. lParam: LPARAM,
  812. pt: POINT,
  813. vkDirection: UINT,
  814. }
  815. LPFINDINFOW :: ^LVFINDINFOW
  816. LV_FINDINFOW :: LVFINDINFOW
  817. LVHITTESTINFO :: struct {
  818. pt: POINT,
  819. flags: UINT,
  820. iItem: c_int,
  821. iSubItem: c_int,
  822. }
  823. LV_HITTESTINFO :: LVHITTESTINFO
  824. LPLVHITTESTINFO :: ^LVHITTESTINFO
  825. LPLV_HITTESTINFO :: LPLVHITTESTINFO
  826. LVCOLUMNW :: struct {
  827. mask: UINT,
  828. fmt: c_int,
  829. cx: c_int,
  830. pszText: LPWSTR,
  831. cchTextMax: c_int,
  832. iSubItem: c_int,
  833. iImage: c_int,
  834. iOrder: c_int,
  835. cxMin: c_int,
  836. cxDefault: c_int,
  837. cxIdeal: c_int,
  838. }
  839. LV_COLUMNW :: LVCOLUMNW
  840. LPLVCOLUMNW :: ^LVCOLUMNW
  841. LPLV_COLUMNW :: LPLVCOLUMNW
  842. LVBKIMAGEW :: struct {
  843. ulFlags: ULONG,
  844. hbm: HBITMAP,
  845. pszImage: LPWSTR,
  846. cchImageMax: UINT,
  847. xOffsetPercent: c_int,
  848. yOffsetPercent: c_int,
  849. }
  850. LV_BKIMAGEW :: LVBKIMAGEW
  851. LPLVBKIMAGEW :: ^LVBKIMAGEW
  852. LPLV_BKIMAGEW :: LPLVBKIMAGEW
  853. LVGROUP :: struct {
  854. cbSize: UINT,
  855. mask: UINT,
  856. pszHeader: LPWSTR,
  857. cchHeader: c_int,
  858. pszFooter: LPWSTR,
  859. cchFooter: c_int,
  860. iGroupId: c_int,
  861. stateMask: UINT,
  862. state: UINT,
  863. uAlign: UINT,
  864. }
  865. PLVGROUP :: ^LVGROUP
  866. LVGROUPMETRICS :: struct {
  867. cbSize: UINT,
  868. mask: UINT,
  869. Left: UINT,
  870. Top: UINT,
  871. Right: UINT,
  872. Bottom: UINT,
  873. crLeft: COLORREF,
  874. crTop: COLORREF,
  875. crRight: COLORREF,
  876. crBottom: COLORREF,
  877. crHeader: COLORREF,
  878. crFooter: COLORREF,
  879. }
  880. PLVGROUPMETRICS :: ^LVGROUPMETRICS
  881. LVINSERTGROUPSORTED :: struct {
  882. pfnGroupCompare: PFNLVGROUPCOMPARE,
  883. pvData: rawptr,
  884. lvGroup: LVGROUP,
  885. }
  886. PLVINSERTGROUPSORTED :: ^LVINSERTGROUPSORTED
  887. LVTILEVIEWINFO :: struct {
  888. cbSize: UINT,
  889. dwMask: DWORD,
  890. dwFlags: DWORD,
  891. sizeTile: SIZE,
  892. cLines: c_int,
  893. rcLabelMargin: RECT,
  894. }
  895. PLVTILEVIEWINFO :: ^LVTILEVIEWINFO
  896. LVTILEINFO :: struct {
  897. cbSize: UINT,
  898. iItem: c_int,
  899. cColumns: UINT,
  900. puColumns: PUINT,
  901. }
  902. PLVTILEINFO :: ^LVTILEINFO
  903. LVINSERTMARK :: struct {
  904. cbSize: UINT,
  905. dwFlags: DWORD,
  906. iItem: c_int,
  907. dwReserved: DWORD,
  908. }
  909. LPLVINSERTMARK :: ^LVINSERTMARK
  910. LVSETINFOTIP :: struct {
  911. cbSize: UINT,
  912. dwFlags: DWORD,
  913. pszText: LPWSTR,
  914. iItem: c_int,
  915. iSubItem: c_int,
  916. }
  917. PLVSETINFOTIP :: ^LVSETINFOTIP
  918. NMLISTVIEW :: struct {
  919. hdr: NMHDR,
  920. iItem: c_int,
  921. iSubItem: c_int,
  922. uNewState: UINT,
  923. uOldState: UINT,
  924. uChanged: UINT,
  925. ptAction: POINT,
  926. lParam: LPARAM,
  927. }
  928. NM_LISTVIEW :: NMLISTVIEW
  929. LPNMLISTVIEW :: ^NMLISTVIEW
  930. LPNM_LISTVIEW :: LPNMLISTVIEW
  931. NMITEMACTIVATE :: struct {
  932. hdr: NMHDR,
  933. iItem: c_int,
  934. iSubItem: c_int,
  935. uNewState: UINT,
  936. uOldState: UINT,
  937. uChanged: UINT,
  938. ptAction: POINT,
  939. lParam: LPARAM,
  940. uKeyFlags: UINT,
  941. }
  942. NM_ITEMACTIVATE :: NMITEMACTIVATE
  943. LPNMITEMACTIVATE :: ^NMITEMACTIVATE
  944. LPNM_ITEMACTIVATE :: LPNMITEMACTIVATE
  945. NMLVCUSTOMDRAW :: struct {
  946. nmcd: NMCUSTOMDRAW,
  947. clrText: COLORREF,
  948. clrTextBk: COLORREF,
  949. iSubItem: c_int,
  950. dwItemType: DWORD,
  951. clrFace: COLORREF,
  952. iIconEffect: c_int,
  953. iIconPhase: c_int,
  954. iPartId: c_int,
  955. iStateId: c_int,
  956. rcText: RECT,
  957. uAlign: UINT,
  958. }
  959. NMLV_CUSTOMDRAW :: NMLVCUSTOMDRAW
  960. LPNMLVCUSTOMDRAW :: ^NMLVCUSTOMDRAW
  961. LPNMLV_CUSTOMDRAW :: LPNMLVCUSTOMDRAW
  962. NMLVCACHEHINT :: struct {
  963. hdr: NMHDR,
  964. iFrom: c_int,
  965. iTo: c_int,
  966. }
  967. LPNMLVCACHEHINT :: ^NMLVCACHEHINT
  968. NM_CACHEHINT :: NMLVCACHEHINT
  969. PNM_CACHEHINT :: LPNMLVCACHEHINT
  970. LPNM_CACHEHINT :: LPNMLVCACHEHINT
  971. NMLVFINDITEMW :: struct {
  972. hdr: NMHDR,
  973. iStart: c_int,
  974. lvfi: LVFINDINFOW,
  975. }
  976. LPNMLVFINDITEMW :: ^NMLVFINDITEMW
  977. NM_FINDITEMW :: NMLVFINDITEMW
  978. PNM_FINDITEMW :: LPNMLVFINDITEMW
  979. LPNM_FINDITEMW :: LPNMLVFINDITEMW
  980. NMLVODSTATECHANGE :: struct {
  981. hdr: NMHDR,
  982. iFrom: c_int,
  983. iTo: c_int,
  984. uNewState: UINT,
  985. uOldState: UINT,
  986. }
  987. LPNMLVODSTATECHANGE :: ^NMLVODSTATECHANGE
  988. NM_ODSTATECHANGE :: NMLVODSTATECHANGE
  989. PNM_ODSTATECHANGE :: NMLVODSTATECHANGE
  990. LPNM_ODSTATECHANGE :: LPNMLVODSTATECHANGE
  991. LVDISPINFOW :: struct {
  992. hdr: NMHDR,
  993. item: LVITEMW,
  994. }
  995. LV_DISPINFO :: LVDISPINFOW
  996. LPNMLVDISPINFOW :: ^LVDISPINFOW
  997. NMLVKEYDOWN :: struct #packed {
  998. hdr: NMHDR,
  999. wVKey: WORD,
  1000. flags: UINT,
  1001. }
  1002. LV_KEYDOWN :: NMLVKEYDOWN
  1003. LPNMLVKEYDOWN :: ^NMLVKEYDOWN
  1004. NMLVGETINFOTIPW :: struct {
  1005. hdr: NMHDR,
  1006. dwFlags: DWORD,
  1007. pszText: LPWSTR,
  1008. cchTextMax: c_int,
  1009. iItem: c_int,
  1010. iSubItem: c_int,
  1011. lParam: LPARAM,
  1012. }
  1013. LPNMLVGETINFOTIPW :: ^NMLVGETINFOTIPW
  1014. NMLVSCROLL :: struct {
  1015. hdr: NMHDR,
  1016. dx: c_int,
  1017. dy: c_int,
  1018. }
  1019. LPNMLVSCROLL :: ^NMLVSCROLL
  1020. PFNLVCOMPARE :: #type proc "system" (lpItem1,lpItem2: LPARAM, lpUser: LPARAM) -> c_int
  1021. PFNLVGROUPCOMPARE :: #type proc "system" (item1,item2: c_int, user: rawptr) -> c_int
  1022. INDEXTOSTATEIMAGEMASK :: #force_inline proc "system" (i: UINT) -> UINT {
  1023. return i << 12
  1024. }
  1025. ListView_GetItem :: #force_inline proc "system" (hwnd: HWND, pitem: ^LV_ITEMW) -> BOOL {
  1026. return cast(BOOL)SendMessageW(hwnd, LVM_GETITEMW, 0, cast(LPARAM)uintptr(pitem))
  1027. }
  1028. ListView_SetItem :: #force_inline proc "system" (hwnd: HWND, pitem: ^LV_ITEMW) -> BOOL {
  1029. return cast(BOOL)SendMessageW(hwnd, LVM_SETITEMW, 0, cast(LPARAM)uintptr(pitem))
  1030. }
  1031. ListView_InsertItem :: #force_inline proc "system" (hwnd: HWND, pitem: ^LV_ITEMW) -> c_int {
  1032. return cast(c_int)SendMessageW(hwnd, LVM_INSERTITEMW, 0, cast(LPARAM)uintptr(pitem))
  1033. }
  1034. ListView_DeleteItem :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> BOOL {
  1035. return cast(BOOL)SendMessageW(hwnd, LVM_DELETEITEM, cast(WPARAM)i, 0)
  1036. }
  1037. ListView_DeleteAllItems :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
  1038. return cast(BOOL)SendMessageW(hwnd, LVM_DELETEALLITEMS, 0, 0)
  1039. }
  1040. ListView_GetCallbackMask :: #force_inline proc "system" (hwnd: HWND) -> UINT {
  1041. return cast(UINT)SendMessageW(hwnd, LVM_GETCALLBACKMASK, 0, 0)
  1042. }
  1043. ListView_SetCallbackMask :: #force_inline proc "system" (hwnd: HWND, mask: UINT) -> BOOL {
  1044. return cast(BOOL)SendMessageW(hwnd, LVM_SETCALLBACKMASK, cast(WPARAM)mask, 0)
  1045. }
  1046. ListView_GetNextItem :: #force_inline proc "system" (hwnd: HWND, i: c_int, flags: UINT) -> c_int {
  1047. return cast(c_int)SendMessageW(hwnd, LVM_GETNEXTITEM, cast(WPARAM)i, MAKELPARAM(flags,0))
  1048. }
  1049. ListView_FindItem :: #force_inline proc "system" (hwnd: HWND, iStart: c_int, plvfi: ^LV_FINDINFOW) -> c_int {
  1050. return cast(c_int)SendMessageW(hwnd, LVM_FINDITEMW, cast(WPARAM)iStart, cast(LPARAM)uintptr(plvfi))
  1051. }
  1052. ListView_GetItemRect :: #force_inline proc "system" (hwnd: HWND, i: c_int, prc: ^RECT, code: c_int) -> BOOL {
  1053. if prc != nil {
  1054. prc.left = code
  1055. }
  1056. return cast(BOOL)SendMessageW(hwnd, LVM_GETITEMRECT, cast(WPARAM)i, cast(LPARAM)uintptr(prc))
  1057. }
  1058. ListView_SetItemPosition :: #force_inline proc "system" (hwnd: HWND, i: c_int, x,y: c_int) -> BOOL {
  1059. return cast(BOOL)SendMessageW(hwnd, LVM_SETITEMPOSITION, cast(WPARAM)i, MAKELPARAM(x,y))
  1060. }
  1061. ListView_GetItemPosition :: #force_inline proc "system" (hwnd: HWND, i: c_int, ppt: ^POINT) -> BOOL {
  1062. return cast(BOOL)SendMessageW(hwnd, LVM_GETITEMPOSITION, cast(WPARAM)i, cast(LPARAM)uintptr(ppt))
  1063. }
  1064. ListView_GetStringWidth :: #force_inline proc "system" (hwndLV: HWND, psz: LPCWSTR) -> c_int {
  1065. return cast(c_int)SendMessageW(hwndLV, LVM_GETSTRINGWIDTHW, 0, cast(LPARAM)uintptr(rawptr(psz)))
  1066. }
  1067. ListView_HitTest :: #force_inline proc "system" (hwndLV: HWND, pinfo: ^LV_HITTESTINFO) -> c_int {
  1068. return cast(c_int)SendMessageW(hwndLV, LVM_HITTEST, 0, cast(LPARAM)uintptr(pinfo))
  1069. }
  1070. ListView_EnsureVisible :: #force_inline proc "system" (hwndLV: HWND, i: c_int, fPartialOK: BOOL) -> BOOL {
  1071. return cast(BOOL)SendMessageW(hwndLV, LVM_ENSUREVISIBLE, cast(WPARAM)i, MAKELPARAM(fPartialOK,0))
  1072. }
  1073. ListView_Scroll :: #force_inline proc "system" (hwndLV: HWND, dx,dy: c_int) -> BOOL {
  1074. return cast(BOOL)SendMessageW(hwndLV, LVM_SCROLL, cast(WPARAM)dx, cast(LPARAM)dy)
  1075. }
  1076. ListView_RedrawItems :: #force_inline proc "system" (hwndLV: HWND, iFirst,iLast: c_int) -> BOOL {
  1077. return cast(BOOL)SendMessageW(hwndLV, LVM_REDRAWITEMS, cast(WPARAM)iFirst, cast(LPARAM)iLast)
  1078. }
  1079. ListView_Arrange :: #force_inline proc "system" (hwndLV: HWND, code: UINT) -> BOOL {
  1080. return cast(BOOL)SendMessageW(hwndLV, LVM_ARRANGE, cast(WPARAM)code, 0)
  1081. }
  1082. ListView_EditLabel :: #force_inline proc "system" (hwndLV: HWND, i: c_int) -> HWND {
  1083. return cast(HWND)uintptr(SendMessageW(hwndLV, LVM_EDITLABELW, cast(WPARAM)i, 0))
  1084. }
  1085. ListView_GetEditControl :: #force_inline proc "system" (hwndLV: HWND) -> HWND {
  1086. return cast(HWND)uintptr(SendMessageW(hwndLV, LVM_GETEDITCONTROL, 0, 0))
  1087. }
  1088. ListView_GetColumn :: #force_inline proc "system" (hwnd: HWND, iCol: c_int, pcol: ^LV_COLUMNW) -> BOOL {
  1089. return cast(BOOL)SendMessageW(hwnd, LVM_GETCOLUMNW, cast(WPARAM)iCol, cast(LPARAM)uintptr(pcol))
  1090. }
  1091. ListView_SetColumn :: #force_inline proc "system" (hwnd: HWND, iCol: c_int, pcol: ^LV_COLUMNW) -> BOOL {
  1092. return cast(BOOL)SendMessageW(hwnd, LVM_SETCOLUMNW, cast(WPARAM)iCol, cast(LPARAM)uintptr(pcol))
  1093. }
  1094. ListView_InsertColumn :: #force_inline proc "system" (hwnd: HWND, iCol: c_int, pcol: ^LV_COLUMNW) -> c_int {
  1095. return cast(c_int)SendMessageW(hwnd, LVM_INSERTCOLUMNW, cast(WPARAM)iCol, cast(LPARAM)uintptr(pcol))
  1096. }
  1097. ListView_DeleteColumn :: #force_inline proc "system" (hwnd: HWND, iCol: c_int) -> BOOL {
  1098. return cast(BOOL)SendMessageW(hwnd, LVM_DELETECOLUMN, cast(WPARAM)iCol, 0)
  1099. }
  1100. ListView_GetColumnWidth :: #force_inline proc "system" (hwnd: HWND, iCol: c_int) -> c_int {
  1101. return cast(c_int)SendMessageW(hwnd, LVM_GETCOLUMNWIDTH, cast(WPARAM)iCol, 0)
  1102. }
  1103. ListView_SetColumnWidth :: #force_inline proc "system" (hwnd: HWND, iCol: c_int, cx: c_int) -> BOOL {
  1104. return cast(BOOL)SendMessageW(hwnd, LVM_SETCOLUMNWIDTH, cast(WPARAM)iCol, MAKELPARAM(cx,0))
  1105. }
  1106. ListView_GetHeader :: #force_inline proc "system" (hwnd: HWND) -> HWND {
  1107. return cast(HWND)uintptr(SendMessageW(hwnd, LVM_GETHEADER, 0, 0))
  1108. }
  1109. ListView_CreateDragImage :: #force_inline proc "system" (hwnd: HWND, i: c_int, lpptUpLeft: LPPOINT) -> HIMAGELIST {
  1110. return cast(HIMAGELIST)uintptr(SendMessageW(hwnd, LVM_CREATEDRAGIMAGE, cast(WPARAM)i, cast(LPARAM)uintptr(lpptUpLeft)))
  1111. }
  1112. ListView_GetViewRect :: #force_inline proc "system" (hwnd: HWND, prc: ^RECT) -> BOOL {
  1113. return cast(BOOL)SendMessageW(hwnd, LVM_GETVIEWRECT, 0, cast(LPARAM)uintptr(prc))
  1114. }
  1115. ListView_GetTextColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
  1116. return cast(COLORREF)SendMessageW(hwnd, LVM_GETTEXTCOLOR, 0, 0)
  1117. }
  1118. ListView_SetTextColor :: #force_inline proc "system" (hwnd: HWND, clrText: COLORREF) -> BOOL {
  1119. return cast(BOOL)SendMessageW(hwnd, LVM_SETTEXTCOLOR, 0, cast(LPARAM)clrText)
  1120. }
  1121. ListView_GetTextBkColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
  1122. return cast(COLORREF)SendMessageW(hwnd, LVM_GETTEXTBKCOLOR, 0, 0)
  1123. }
  1124. ListView_SetTextBkColor :: #force_inline proc "system" (hwnd: HWND, clrTextBk: COLORREF) -> BOOL {
  1125. return cast(BOOL)SendMessageW(hwnd, LVM_SETTEXTBKCOLOR, 0, cast(LPARAM)clrTextBk)
  1126. }
  1127. ListView_GetTopIndex :: #force_inline proc "system" (hwndLV: HWND) -> c_int {
  1128. return cast(c_int)SendMessageW(hwndLV, LVM_GETTOPINDEX, 0, 0)
  1129. }
  1130. ListView_GetCountPerPage :: #force_inline proc "system" (hwndLV: HWND) -> c_int {
  1131. return cast(c_int)SendMessageW(hwndLV, LVM_GETCOUNTPERPAGE, 0, 0)
  1132. }
  1133. ListView_GetOrigin :: #force_inline proc "system" (hwndLV: HWND, ppt: ^POINT) -> BOOL {
  1134. return cast(BOOL)SendMessageW(hwndLV, LVM_GETORIGIN, 0, cast(LPARAM)uintptr(ppt))
  1135. }
  1136. ListView_Update :: #force_inline proc "system" (hwndLV: HWND, i: c_int) -> BOOL {
  1137. return cast(BOOL)SendMessageW(hwndLV, LVM_UPDATE, cast(WPARAM)i, 0)
  1138. }
  1139. ListView_SetItemState :: #force_inline proc "system" (hwndLV: HWND, i: c_int, data: UINT, mask: UINT) {
  1140. item := LV_ITEMW {
  1141. stateMask = mask,
  1142. state = data,
  1143. }
  1144. SendMessageW(hwndLV, LVM_SETITEMSTATE, cast(WPARAM)i, cast(LPARAM)uintptr(&item))
  1145. }
  1146. ListView_SetCheckState :: #force_inline proc "system" (hwndLV: HWND, i: c_int, fCheck: BOOL) {
  1147. ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK(2 if fCheck else 1), LVIS_STATEIMAGEMASK)
  1148. }
  1149. ListView_GetItemState :: #force_inline proc "system" (hwndLV: HWND, i: c_int, mask: UINT) -> UINT {
  1150. return cast(UINT)SendMessageW(hwndLV, LVM_GETITEMSTATE, cast(WPARAM)i, cast(LPARAM)mask)
  1151. }
  1152. ListView_GetCheckState :: #force_inline proc "system" (hwndLV: HWND, i: c_int) -> UINT {
  1153. return ((cast(UINT)SendMessageW(hwndLV, LVM_GETITEMSTATE, cast(WPARAM)i, cast(LPARAM)LVIS_STATEIMAGEMASK)) >> 12) - 1
  1154. }
  1155. ListView_GetItemText :: #force_inline proc "system" (hwndLV: HWND, i: c_int, iSubItem: c_int, pszText: LPWSTR, cchTextMax: c_int) {
  1156. item := LV_ITEMW {
  1157. iSubItem = iSubItem,
  1158. cchTextMax = cchTextMax,
  1159. pszText = pszText,
  1160. }
  1161. SendMessageW(hwndLV, LVM_GETITEMTEXTW, cast(WPARAM)i, cast(LPARAM)uintptr(&item))
  1162. }
  1163. ListView_SetItemText :: #force_inline proc "system" (hwndLV: HWND, i: c_int, iSubItem: c_int, pszText: LPWSTR) {
  1164. item := LV_ITEMW {
  1165. iSubItem = iSubItem,
  1166. pszText = pszText,
  1167. }
  1168. SendMessageW(hwndLV, LVM_SETITEMTEXTW, cast(WPARAM)i, cast(LPARAM)uintptr(&item))
  1169. }
  1170. ListView_SetItemCount :: #force_inline proc "system" (hwndLV: HWND, cItems: c_int) {
  1171. SendMessageW(hwndLV, LVM_SETITEMCOUNT, cast(WPARAM)cItems, 0)
  1172. }
  1173. ListView_SetItemCountEx :: #force_inline proc "system" (hwndLV: HWND, cItems: c_int, dwFlags: DWORD) {
  1174. SendMessageW(hwndLV, LVM_SETITEMCOUNT, cast(WPARAM)cItems, cast(LPARAM)dwFlags)
  1175. }
  1176. ListView_SortItems :: #force_inline proc "system" (hwndLV: HWND, pfnCompare: PFNLVCOMPARE, lpUser: LPARAM) -> BOOL {
  1177. return cast(BOOL)SendMessageW(hwndLV, LVM_SORTITEMS, cast(WPARAM)lpUser, cast(LPARAM)transmute(uintptr)(pfnCompare))
  1178. }
  1179. ListView_SetItemPosition32 :: #force_inline proc "system" (hwndLV: HWND, i: c_int, x0,y0: c_int) {
  1180. ptNewPos := POINT {
  1181. x = x0,
  1182. y = y0,
  1183. }
  1184. SendMessageW(hwndLV, LVM_SETITEMPOSITION32, cast(WPARAM)i, cast(LPARAM)uintptr(&ptNewPos))
  1185. }
  1186. ListView_GetSelectedCount :: #force_inline proc "system" (hwndLV: HWND) -> UINT {
  1187. return cast(UINT)SendMessageW(hwndLV, LVM_GETSELECTEDCOUNT, 0, 0)
  1188. }
  1189. ListView_GetItemSpacing :: #force_inline proc "system" (hwndLV: HWND, fSmall: BOOL) -> DWORD {
  1190. return cast(DWORD)SendMessageW(hwndLV, LVM_GETITEMSPACING, cast(WPARAM)fSmall, 0)
  1191. }
  1192. ListView_GetISearchString :: #force_inline proc "system" (hwndLV: HWND, lpsz: LPWSTR) -> BOOL {
  1193. return cast(BOOL)SendMessageW(hwndLV, LVM_GETISEARCHSTRINGW, 0, cast(LPARAM)uintptr(lpsz))
  1194. }
  1195. ListView_SetIconSpacing :: #force_inline proc "system" (hwndLV: HWND, cx,cy: c_int) -> DWORD {
  1196. return cast(DWORD)SendMessageW(hwndLV, LVM_SETICONSPACING, 0, cast(LPARAM)MAKELONG(cx,cy))
  1197. }
  1198. ListView_SetExtendedListViewStyle :: #force_inline proc "system" (hwndLV: HWND, dw: DWORD) -> DWORD {
  1199. return cast(DWORD)SendMessageW(hwndLV, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, cast(LPARAM)dw)
  1200. }
  1201. ListView_SetExtendedListViewStyleEx :: #force_inline proc "system" (hwndLV: HWND, dwMask: DWORD, dw: DWORD) -> DWORD {
  1202. return cast(DWORD)SendMessageW(hwndLV, LVM_SETEXTENDEDLISTVIEWSTYLE, cast(WPARAM)dwMask, cast(LPARAM)dw)
  1203. }
  1204. ListView_GetSubItemRect :: #force_inline proc "system" (hwnd: HWND, iItem: c_int, iSubItem: c_int, code: c_int, prc: LPRECT) -> BOOL {
  1205. if prc != nil {
  1206. prc.top = iSubItem
  1207. prc.left = code
  1208. }
  1209. return cast(BOOL)SendMessageW(hwnd, LVM_GETSUBITEMRECT, cast(WPARAM)iItem, cast(LPARAM)uintptr(prc))
  1210. }
  1211. ListView_SubItemHitTest :: #force_inline proc "system" (hwnd: HWND, plvhti: LPLVHITTESTINFO) -> c_int {
  1212. return cast(c_int)SendMessageW(hwnd, LVM_SUBITEMHITTEST, 0, cast(LPARAM)uintptr(plvhti))
  1213. }
  1214. ListView_SetColumnOrderArray :: #force_inline proc "system" (hwnd: HWND, iCount: c_int, pi: LPINT) -> BOOL {
  1215. return cast(BOOL)SendMessageW(hwnd, LVM_SETCOLUMNORDERARRAY, cast(WPARAM)iCount, cast(LPARAM)uintptr(pi))
  1216. }
  1217. ListView_GetColumnOrderArray :: #force_inline proc "system" (hwnd: HWND, iCount: c_int, pi: LPINT) -> BOOL {
  1218. return cast(BOOL)SendMessageW(hwnd, LVM_GETCOLUMNORDERARRAY, cast(WPARAM)iCount, cast(LPARAM)uintptr(pi))
  1219. }
  1220. ListView_SetHotItem :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> c_int {
  1221. return cast(c_int)SendMessageW(hwnd, LVM_SETHOTITEM, cast(WPARAM)i, 0)
  1222. }
  1223. ListView_GetHotItem :: #force_inline proc "system" (hwnd: HWND) -> c_int {
  1224. return cast(c_int)SendMessageW(hwnd, LVM_GETHOTITEM, 0, 0)
  1225. }
  1226. ListView_SetHotCursor :: #force_inline proc "system" (hwnd: HWND, hcur: HCURSOR) -> HCURSOR {
  1227. return cast(HCURSOR)uintptr(SendMessageW(hwnd, LVM_SETHOTCURSOR, 0, cast(LPARAM)uintptr(hcur)))
  1228. }
  1229. ListView_GetHotCursor :: #force_inline proc "system" (hwnd: HWND) -> HCURSOR {
  1230. return cast(HCURSOR)uintptr(SendMessageW(hwnd, LVM_GETHOTCURSOR, 0, 0))
  1231. }
  1232. ListView_ApproximateViewRect :: #force_inline proc "system" (hwnd: HWND, iWidth,iHeight: c_int, iCount: c_int) -> DWORD {
  1233. return cast(DWORD)SendMessageW(hwnd, LVM_APPROXIMATEVIEWRECT, cast(WPARAM)iCount, MAKELPARAM(iWidth,iHeight))
  1234. }
  1235. ListView_SetWorkAreas :: #force_inline proc "system" (hwnd: HWND, nWorkAreas: UINT, prc: ^RECT) -> BOOL {
  1236. return cast(BOOL)SendMessageW(hwnd, LVM_SETWORKAREAS, cast(WPARAM)nWorkAreas, cast(LPARAM)uintptr(prc))
  1237. }
  1238. ListView_GetWorkAreas :: #force_inline proc "system" (hwnd: HWND, nWorkAreas: UINT, prc: ^RECT) -> BOOL {
  1239. return cast(BOOL)SendMessageW(hwnd, LVM_GETWORKAREAS, cast(WPARAM)nWorkAreas, cast(LPARAM)uintptr(prc))
  1240. }
  1241. ListView_GetNumberOfWorkAreas :: #force_inline proc "system" (hwnd: HWND, pnWorkAreas: ^UINT) -> BOOL {
  1242. return cast(BOOL)SendMessageW(hwnd, LVM_GETNUMBEROFWORKAREAS, 0, cast(LPARAM)uintptr(pnWorkAreas))
  1243. }
  1244. ListView_GetSelectionMark :: #force_inline proc "system" (hwnd: HWND) -> c_int {
  1245. return cast(c_int)SendMessageW(hwnd, LVM_GETSELECTIONMARK, 0, 0)
  1246. }
  1247. ListView_SetSelectionMark :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> c_int {
  1248. return cast(c_int)SendMessageW(hwnd, LVM_SETSELECTIONMARK, 0, cast(LPARAM)i)
  1249. }
  1250. ListView_SetHoverTime :: #force_inline proc "system" (hwndLV: HWND, dwHoverTimeMs: DWORD) -> DWORD {
  1251. return cast(DWORD)SendMessageW(hwndLV, LVM_SETHOVERTIME, 0, cast(LPARAM)dwHoverTimeMs)
  1252. }
  1253. ListView_GetHoverTime :: #force_inline proc "system" (hwndLV: HWND) -> DWORD {
  1254. return cast(DWORD)SendMessageW(hwndLV, LVM_GETHOVERTIME, 0, 0)
  1255. }
  1256. ListView_SetToolTips :: #force_inline proc "system" (hwndLV: HWND, hwndNewHwnd: HWND) -> HWND {
  1257. return cast(HWND)uintptr(SendMessageW(hwndLV, LVM_SETTOOLTIPS, cast(WPARAM)hwndNewHwnd, 0))
  1258. }
  1259. ListView_GetToolTips :: #force_inline proc "system" (hwndLV: HWND) -> HWND {
  1260. return cast(HWND)uintptr(SendMessageW(hwndLV, LVM_GETTOOLTIPS, 0, 0))
  1261. }
  1262. ListView_SortItemsEx :: #force_inline proc "system" (hwndLV: HWND, pfnCompare: PFNLVCOMPARE, lpUser: LPARAM) -> BOOL {
  1263. return cast(BOOL)SendMessageW(hwndLV, LVM_SORTITEMSEX, cast(WPARAM)lpUser, cast(LPARAM)transmute(uintptr)(pfnCompare))
  1264. }
  1265. ListView_SetSelectedColumn :: #force_inline proc "system" (hwnd: HWND, iCol: c_int) {
  1266. SendMessageW(hwnd, LVM_SETSELECTEDCOLUMN, cast(WPARAM)iCol, 0)
  1267. }
  1268. ListView_SetView :: #force_inline proc "system" (hwnd: HWND, iView: DWORD) -> c_int {
  1269. return cast(c_int)SendMessageW(hwnd, LVM_SETVIEW, cast(WPARAM)iView, 0)
  1270. }
  1271. ListView_GetView :: #force_inline proc "system" (hwnd: HWND) -> DWORD {
  1272. return cast(DWORD)SendMessageW(hwnd, LVM_GETVIEW, 0, 0)
  1273. }
  1274. ListView_InsertGroup :: #force_inline proc "system" (hwnd: HWND, index: c_int, pgrp: PLVGROUP) -> c_int {
  1275. return cast(c_int)SendMessageW(hwnd, LVM_INSERTGROUP, cast(WPARAM)index, cast(LPARAM)uintptr(pgrp))
  1276. }
  1277. ListView_SetGroupInfo :: #force_inline proc "system" (hwnd: HWND, iGroupId: c_int, pgrp: PLVGROUP) -> c_int {
  1278. return cast(c_int)SendMessageW(hwnd, LVM_SETGROUPINFO, cast(WPARAM)iGroupId, cast(LPARAM)uintptr(pgrp))
  1279. }
  1280. ListView_GetGroupInfo :: #force_inline proc "system" (hwnd: HWND, iGroupId: c_int, pgrp: PLVGROUP) -> c_int {
  1281. return cast(c_int)SendMessageW(hwnd, LVM_GETGROUPINFO, cast(WPARAM)iGroupId, cast(LPARAM)uintptr(pgrp))
  1282. }
  1283. ListView_RemoveGroup :: #force_inline proc "system" (hwnd: HWND, iGroupId: c_int) -> c_int {
  1284. return cast(c_int)SendMessageW(hwnd, LVM_REMOVEGROUP, cast(WPARAM)iGroupId, 0)
  1285. }
  1286. ListView_MoveGroup :: #force_inline proc "system" (hwnd: HWND, iGroupId: c_int, toIndex: c_int) {
  1287. SendMessageW(hwnd, LVM_MOVEGROUP, cast(WPARAM)iGroupId, cast(LPARAM)toIndex)
  1288. }
  1289. ListView_MoveItemToGroup :: #force_inline proc "system" (hwnd: HWND, idItemFrom: c_int, idGroupTo: c_int) {
  1290. SendMessageW(hwnd, LVM_MOVEITEMTOGROUP, cast(WPARAM)idItemFrom, cast(LPARAM)idGroupTo)
  1291. }
  1292. ListView_SetGroupMetrics :: #force_inline proc "system" (hwnd: HWND, pGroupMetrics: PLVGROUPMETRICS) {
  1293. SendMessageW(hwnd, LVM_SETGROUPMETRICS, 0, cast(LPARAM)uintptr(pGroupMetrics))
  1294. }
  1295. ListView_GetGroupMetrics :: #force_inline proc "system" (hwnd: HWND, pGroupMetrics: PLVGROUPMETRICS) {
  1296. SendMessageW(hwnd, LVM_GETGROUPMETRICS, 0, cast(LPARAM)uintptr(pGroupMetrics))
  1297. }
  1298. ListView_EnableGroupView :: #force_inline proc "system" (hwnd: HWND, fEnable: BOOL) -> c_int {
  1299. return cast(c_int)SendMessageW(hwnd, LVM_ENABLEGROUPVIEW, cast(WPARAM)fEnable, 0)
  1300. }
  1301. ListView_SortGroups :: #force_inline proc "system" (hwnd: HWND, pfnGroupCompare: PFNLVGROUPCOMPARE, pUser: rawptr) -> c_int {
  1302. return cast(c_int)SendMessageW(hwnd, LVM_SORTGROUPS, transmute(uintptr)(pfnGroupCompare), cast(LPARAM)uintptr(pUser))
  1303. }
  1304. ListView_InsertGroupSorted :: #force_inline proc "system" (hwnd: HWND, structInsert: PLVINSERTGROUPSORTED) {
  1305. SendMessageW(hwnd, LVM_INSERTGROUPSORTED, uintptr(structInsert), 0)
  1306. }
  1307. ListView_RemoveAllGroups :: #force_inline proc "system" (hwnd: HWND) {
  1308. SendMessageW(hwnd, LVM_REMOVEALLGROUPS, 0, 0)
  1309. }
  1310. ListView_HasGroup :: #force_inline proc "system" (hwnd: HWND, dwGroupId: c_int) -> BOOL {
  1311. return cast(BOOL)SendMessageW(hwnd, LVM_HASGROUP, cast(WPARAM)dwGroupId, 0)
  1312. }
  1313. ListView_SetTileViewInfo :: #force_inline proc "system" (hwnd: HWND, ptvi: PLVTILEVIEWINFO) -> BOOL {
  1314. return cast(BOOL)SendMessageW(hwnd, LVM_SETTILEVIEWINFO, 0, cast(LPARAM)uintptr(ptvi))
  1315. }
  1316. ListView_GetTileViewInfo :: #force_inline proc "system" (hwnd: HWND, ptvi: PLVTILEVIEWINFO) {
  1317. SendMessageW(hwnd, LVM_GETTILEVIEWINFO, 0, cast(LPARAM)uintptr(ptvi))
  1318. }
  1319. ListView_SetTileInfo :: #force_inline proc "system" (hwnd: HWND, pti: PLVTILEINFO) -> BOOL {
  1320. return cast(BOOL)SendMessageW(hwnd, LVM_SETTILEINFO, 0, cast(LPARAM)uintptr(pti))
  1321. }
  1322. ListView_GetTileInfo :: #force_inline proc "system" (hwnd: HWND, pti: PLVTILEINFO) {
  1323. SendMessageW(hwnd, LVM_GETTILEINFO, 0, cast(LPARAM)uintptr(pti))
  1324. }
  1325. ListView_SetInsertMark :: #force_inline proc "system" (hwnd: HWND, lvim: LPLVINSERTMARK) -> BOOL {
  1326. return cast(BOOL)SendMessageW(hwnd, LVM_SETINSERTMARK, 0, cast(LPARAM)uintptr(lvim))
  1327. }
  1328. ListView_GetInsertMark :: #force_inline proc "system" (hwnd: HWND, lvim: LPLVINSERTMARK) -> BOOL {
  1329. return cast(BOOL)SendMessageW(hwnd, LVM_GETINSERTMARK, 0, cast(LPARAM)uintptr(lvim))
  1330. }
  1331. ListView_InsertMarkHitTest :: #force_inline proc "system" (hwnd: HWND, point: LPPOINT, lvim: LPLVINSERTMARK) -> c_int {
  1332. return cast(c_int)SendMessageW(hwnd, LVM_INSERTMARKHITTEST, uintptr(point), cast(LPARAM)uintptr(lvim))
  1333. }
  1334. ListView_GetInsertMarkRect :: #force_inline proc "system" (hwnd: HWND, rc: LPRECT) -> c_int {
  1335. return cast(c_int)SendMessageW(hwnd, LVM_GETINSERTMARKRECT, 0, cast(LPARAM)uintptr(rc))
  1336. }
  1337. ListView_SetInsertMarkColor :: #force_inline proc "system" (hwnd: HWND, color: COLORREF) -> COLORREF {
  1338. return cast(COLORREF)SendMessageW(hwnd, LVM_SETINSERTMARKCOLOR, 0, cast(LPARAM)color)
  1339. }
  1340. ListView_GetInsertMarkColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
  1341. return cast(COLORREF)SendMessageW(hwnd, LVM_GETINSERTMARKCOLOR, 0, 0)
  1342. }
  1343. ListView_SetInfoTip :: #force_inline proc "system" (hwndLV: HWND, plvInfoTip: PLVSETINFOTIP) -> BOOL {
  1344. return cast(BOOL)SendMessageW(hwndLV, LVM_SETINFOTIP, 0, cast(LPARAM)uintptr(plvInfoTip))
  1345. }
  1346. ListView_GetSelectedColumn :: #force_inline proc "system" (hwnd: HWND) -> UINT {
  1347. return cast(UINT)SendMessageW(hwnd, LVM_GETSELECTEDCOLUMN, 0, 0)
  1348. }
  1349. ListView_IsGroupViewEnabled :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
  1350. return cast(BOOL)SendMessageW(hwnd, LVM_ISGROUPVIEWENABLED, 0, 0)
  1351. }
  1352. ListView_GetOutlineColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
  1353. return cast(COLORREF)SendMessageW(hwnd, LVM_GETOUTLINECOLOR, 0, 0)
  1354. }
  1355. ListView_SetOutlineColor :: #force_inline proc "system" (hwnd: HWND, color: COLORREF) -> COLORREF {
  1356. return cast(COLORREF)SendMessageW(hwnd, LVM_SETOUTLINECOLOR, 0, cast(LPARAM)color)
  1357. }
  1358. ListView_CancelEditLabel :: #force_inline proc "system" (hwnd: HWND) {
  1359. SendMessageW(hwnd, LVM_CANCELEDITLABEL, 0, 0)
  1360. }
  1361. ListView_MapIndexToID :: #force_inline proc "system" (hwnd: HWND, index: UINT) -> UINT {
  1362. return cast(UINT)SendMessageW(hwnd, LVM_MAPINDEXTOID, cast(WPARAM)index, 0)
  1363. }
  1364. ListView_MapIDToIndex :: #force_inline proc "system" (hwnd: HWND, id: UINT) -> UINT {
  1365. return cast(UINT)SendMessageW(hwnd, LVM_MAPIDTOINDEX, cast(WPARAM)id, 0)
  1366. }
  1367. ListView_IsItemVisible :: #force_inline proc "system" (hwnd: HWND, index: UINT) -> BOOL {
  1368. return cast(BOOL)SendMessageW(hwnd, LVM_ISITEMVISIBLE, cast(WPARAM)index, 0)
  1369. }
  1370. // Tree View Control
  1371. HTREEITEM :: distinct rawptr
  1372. TVIF_TEXT :: 0x01
  1373. TVIF_IMAGE :: 0x02
  1374. TVIF_PARAM :: 0x04
  1375. TVIF_STATE :: 0x08
  1376. TVIF_HANDLE :: 0x10
  1377. TVIF_SELECTEDIMAGE :: 0x20
  1378. TVIF_CHILDREN :: 0x40
  1379. TVIF_INTEGRAL :: 0x80
  1380. TVIS_SELECTED :: 0x02
  1381. TVIS_CUT :: 0x04
  1382. TVIS_DROPHILITED :: 0x08
  1383. TVIS_BOLD :: 0x10
  1384. TVIS_EXPANDED :: 0x20
  1385. TVIS_EXPANDEDONCE :: 0x40
  1386. TVIS_EXPANDPARTIAL :: 0x80
  1387. TVIS_OVERLAYMASK :: 0x0F00
  1388. TVIS_STATEIMAGEMASK :: 0xF000
  1389. TVIS_USERMASK :: 0xF000
  1390. I_CHILDRENCALLBACK :: (-1)
  1391. TVI_ROOT :: cast(HTREEITEM)~uintptr(0x10000 - 1)
  1392. TVI_FIRST :: cast(HTREEITEM)~uintptr(0x0FFFF - 1)
  1393. TVI_LAST :: cast(HTREEITEM)~uintptr(0x0FFFE - 1)
  1394. TVI_SORT :: cast(HTREEITEM)~uintptr(0x0FFFD - 1)
  1395. TVN_SELCHANGINGA :: (TVN_FIRST-1)
  1396. TVN_SELCHANGINGW :: (TVN_FIRST-50)
  1397. TVN_SELCHANGEDA :: (TVN_FIRST-2)
  1398. TVN_SELCHANGEDW :: (TVN_FIRST-51)
  1399. TVN_GETDISPINFOA :: (TVN_FIRST-3)
  1400. TVN_GETDISPINFOW :: (TVN_FIRST-52)
  1401. TVN_SETDISPINFOA :: (TVN_FIRST-4)
  1402. TVN_SETDISPINFOW :: (TVN_FIRST-53)
  1403. TVN_ITEMEXPANDINGA :: (TVN_FIRST-5)
  1404. TVN_ITEMEXPANDINGW :: (TVN_FIRST-54)
  1405. TVN_ITEMEXPANDEDA :: (TVN_FIRST-6)
  1406. TVN_ITEMEXPANDEDW :: (TVN_FIRST-55)
  1407. TVN_BEGINDRAGA :: (TVN_FIRST-7)
  1408. TVN_BEGINDRAGW :: (TVN_FIRST-56)
  1409. TVN_BEGINRDRAGA :: (TVN_FIRST-8)
  1410. TVN_BEGINRDRAGW :: (TVN_FIRST-57)
  1411. TVN_DELETEITEMA :: (TVN_FIRST-9)
  1412. TVN_DELETEITEMW :: (TVN_FIRST-58)
  1413. TVN_BEGINLABELEDITA :: (TVN_FIRST-10)
  1414. TVN_BEGINLABELEDITW :: (TVN_FIRST-59)
  1415. TVN_ENDLABELEDITA :: (TVN_FIRST-11)
  1416. TVN_ENDLABELEDITW :: (TVN_FIRST-60)
  1417. TVN_KEYDOWN :: (TVN_FIRST-12)
  1418. TVN_GETINFOTIPA :: (TVN_FIRST-13)
  1419. TVN_GETINFOTIPW :: (TVN_FIRST-14)
  1420. TVN_SINGLEEXPAND :: (TVN_FIRST-15)
  1421. TVC_UNKNOWN :: 0x0
  1422. TVC_BYMOUSE :: 0x1
  1423. TVC_BYKEYBOARD :: 0x2
  1424. TVIF_DI_SETITEM :: 0x1000
  1425. TVNRET_DEFAULT :: 0
  1426. TVNRET_SKIPOLD :: 1
  1427. TVNRET_SKIPNEW :: 2
  1428. TVCDRF_NOIMAGES :: 0x10000
  1429. TVITEMW :: struct {
  1430. mask: UINT,
  1431. hItem: HTREEITEM,
  1432. state: UINT,
  1433. stateMask: UINT,
  1434. pszText: LPWSTR,
  1435. cchTextMax: c_int,
  1436. iImage: c_int,
  1437. iSelectedImage: c_int,
  1438. cChildren: c_int,
  1439. lParam: LPARAM,
  1440. }
  1441. TV_ITEMW :: TVITEMW
  1442. LPTVITEMW :: ^TVITEMW
  1443. LPTV_ITEMW :: LPTVITEMW
  1444. TVITEMEXW :: struct {
  1445. mask: UINT,
  1446. hItem: HTREEITEM,
  1447. state: UINT,
  1448. stateMask: UINT,
  1449. pszText: LPWSTR,
  1450. cchTextMax: c_int,
  1451. iImage: c_int,
  1452. iSelectedImage: c_int,
  1453. cChildren: c_int,
  1454. lParam: LPARAM,
  1455. iIntegral: c_int,
  1456. }
  1457. TV_ITEMEXW :: TVITEMEXW
  1458. LPTVITEMEXW :: ^TVITEMEXW
  1459. LPTV_ITEMEXW :: LPTVITEMEXW
  1460. TVINSERTSTRUCTW :: struct {
  1461. hParent: HTREEITEM,
  1462. hInsertAfter: HTREEITEM,
  1463. _: struct #raw_union {
  1464. itemex: TVITEMEXW,
  1465. item: TV_ITEMW,
  1466. },
  1467. }
  1468. TV_INSERTSTRUCTW :: TVINSERTSTRUCTW
  1469. LPTVINSERTSTRUCTW :: ^TVINSERTSTRUCTW
  1470. LPTV_INSERTSTRUCTW :: LPTVINSERTSTRUCTW
  1471. TVHITTESTINFO :: struct {
  1472. pt: POINT,
  1473. flags: UINT,
  1474. hItem: HTREEITEM,
  1475. }
  1476. TV_HITTESTINFO :: TVHITTESTINFO
  1477. LPTVHITTESTINFO :: ^TVHITTESTINFO
  1478. LPTV_HITTESTINFO :: LPTVHITTESTINFO
  1479. TVSORTCB :: struct {
  1480. hParent: HTREEITEM,
  1481. lpfnCompare: PFNTVCOMPARE,
  1482. lParam: LPARAM,
  1483. }
  1484. TV_SORTCB :: TVSORTCB
  1485. LPTVSORTCB :: ^TVSORTCB
  1486. LPTV_SORTCB :: LPTVSORTCB
  1487. NMTREEVIEWW :: struct {
  1488. hdr: NMHDR,
  1489. action: UINT,
  1490. itemOld: TVITEMW,
  1491. itemNew: TVITEMW,
  1492. ptDrag: POINT,
  1493. }
  1494. NM_TREEVIEWW :: NMTREEVIEWW
  1495. LPNMTREEVIEWW :: ^NMTREEVIEWW
  1496. LPNM_TREEVIEWW :: LPNMTREEVIEWW
  1497. NMTVDISPINFOW :: struct {
  1498. hdr: NMHDR,
  1499. item: TVITEMW,
  1500. }
  1501. TV_DISPINFOW :: NMTVDISPINFOW
  1502. LPNMTVDISPINFOW :: ^NMTVDISPINFOW
  1503. NMTVDISPINFOEXW :: struct {
  1504. hdr: NMHDR,
  1505. item: TVITEMEXW,
  1506. }
  1507. TV_DISPINFOEXW :: NMTVDISPINFOEXW
  1508. LPNMTVDISPINFOEXW :: ^NMTVDISPINFOEXW
  1509. NMTVKEYDOWN :: struct #packed {
  1510. hdr: NMHDR,
  1511. wVKey: WORD,
  1512. flags: UINT,
  1513. }
  1514. TV_KEYDOWN :: NMTVKEYDOWN
  1515. LPNMTVKEYDOWN :: ^NMTVKEYDOWN
  1516. NMTVCUSTOMDRAW :: struct {
  1517. nmcd: NMCUSTOMDRAW,
  1518. clrText: COLORREF,
  1519. clrTextBk: COLORREF,
  1520. iLevel: c_int,
  1521. }
  1522. LPNMTVCUSTOMDRAW :: ^NMTVCUSTOMDRAW
  1523. NMTVGETINFOTIPW :: struct {
  1524. hdr: NMHDR,
  1525. pszText: LPWSTR,
  1526. cchTextMax: c_int,
  1527. hItem: HTREEITEM,
  1528. lParam: LPARAM,
  1529. }
  1530. TV_GETINFOTIPW :: NMTVGETINFOTIPW
  1531. LPNMTVGETINFOTIPW :: ^NMTVGETINFOTIPW
  1532. PFNTVCOMPARE :: #type proc "system" (lParam1,lParam2: LPARAM, lParamSort: LPARAM) -> c_int
  1533. TreeView_InsertItem :: #force_inline proc "system" (hwnd: HWND, lpis: LPTV_INSERTSTRUCTW) -> HTREEITEM {
  1534. return cast(HTREEITEM)uintptr(SendMessageW(hwnd, TVM_INSERTITEMW, 0, cast(LPARAM)uintptr(lpis)))
  1535. }
  1536. TreeView_DeleteItem :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> BOOL {
  1537. return cast(BOOL)SendMessageW(hwnd, TVM_DELETEITEM, 0, cast(LPARAM)uintptr(hitem))
  1538. }
  1539. TreeView_DeleteAllItems :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
  1540. return cast(BOOL)SendMessageW(hwnd, TVM_DELETEITEM, 0, cast(LPARAM)transmute(uintptr)(TVI_ROOT))
  1541. }
  1542. TreeView_Expand :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM, code: UINT) -> BOOL {
  1543. return cast(BOOL)SendMessageW(hwnd, TVM_EXPAND, cast(WPARAM)code, cast(LPARAM)uintptr(hitem))
  1544. }
  1545. TreeView_GetItemRect :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM, prc: ^RECT, code: UINT) -> BOOL {
  1546. alias: struct #raw_union {
  1547. rc: ^RECT,
  1548. hitem: ^HTREEITEM,
  1549. }
  1550. alias.rc = prc
  1551. alias.hitem^ = hitem
  1552. return cast(BOOL)SendMessageW(hwnd, TVM_GETITEMRECT, cast(WPARAM)code, cast(LPARAM)uintptr(prc))
  1553. }
  1554. TreeView_GetCount :: #force_inline proc "system" (hwnd: HWND) -> UINT {
  1555. return cast(UINT)SendMessageW(hwnd, TVM_GETCOUNT, 0, 0)
  1556. }
  1557. TreeView_GetIndent :: #force_inline proc "system" (hwnd: HWND) -> UINT {
  1558. return cast(UINT)SendMessageW(hwnd, TVM_GETINDENT, 0, 0)
  1559. }
  1560. TreeView_SetIndent :: #force_inline proc "system" (hwnd: HWND, indent: UINT) -> BOOL {
  1561. return cast(BOOL)SendMessageW(hwnd, TVM_SETINDENT, cast(WPARAM)indent, 0)
  1562. }
  1563. TreeView_GetImageList :: #force_inline proc "system" (hwnd: HWND, iImage: INT) -> HIMAGELIST {
  1564. return cast(HIMAGELIST)uintptr(SendMessageW(hwnd, TVM_GETIMAGELIST, cast(WPARAM)iImage, 0))
  1565. }
  1566. TreeView_SetImageList :: #force_inline proc "system" (hwnd: HWND, himl: HIMAGELIST, iImage: INT) -> HIMAGELIST {
  1567. return cast(HIMAGELIST)uintptr(SendMessageW(hwnd, TVM_SETIMAGELIST, cast(WPARAM)iImage, cast(LPARAM)uintptr(himl)))
  1568. }
  1569. TreeView_GetNextItem :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM, code: UINT) -> HTREEITEM {
  1570. return cast(HTREEITEM)uintptr(SendMessageW(hwnd, TVM_GETNEXTITEM, cast(WPARAM)code, cast(LPARAM)uintptr(hitem)))
  1571. }
  1572. TreeView_GetChild :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HTREEITEM {
  1573. return TreeView_GetNextItem(hwnd, hitem, TVGN_CHILD)
  1574. }
  1575. TreeView_GetNextSibling :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HTREEITEM {
  1576. return TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT)
  1577. }
  1578. TreeView_GetPrevSibling :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HTREEITEM {
  1579. return TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUS)
  1580. }
  1581. TreeView_GetParent :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HTREEITEM {
  1582. return TreeView_GetNextItem(hwnd, hitem, TVGN_PARENT)
  1583. }
  1584. TreeView_GetFirstVisible :: #force_inline proc "system" (hwnd: HWND) -> HTREEITEM {
  1585. return TreeView_GetNextItem(hwnd, nil, TVGN_FIRSTVISIBLE)
  1586. }
  1587. TreeView_GetNextVisible :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HTREEITEM {
  1588. return TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE)
  1589. }
  1590. TreeView_GetPrevVisible :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HTREEITEM {
  1591. return TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE)
  1592. }
  1593. TreeView_GetSelection :: #force_inline proc "system" (hwnd: HWND) -> HTREEITEM {
  1594. return TreeView_GetNextItem(hwnd, nil, TVGN_CARET)
  1595. }
  1596. TreeView_GetDropHilight :: #force_inline proc "system" (hwnd: HWND) -> HTREEITEM {
  1597. return TreeView_GetNextItem(hwnd, nil, TVGN_DROPHILITE)
  1598. }
  1599. TreeView_GetRoot :: #force_inline proc "system" (hwnd: HWND) -> HTREEITEM {
  1600. return TreeView_GetNextItem(hwnd, nil, TVGN_ROOT)
  1601. }
  1602. TreeView_GetLastVisible :: #force_inline proc "system" (hwnd: HWND) -> HTREEITEM {
  1603. return TreeView_GetNextItem(hwnd, nil, TVGN_LASTVISIBLE)
  1604. }
  1605. TreeView_Select :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM, code: UINT) -> BOOL {
  1606. return cast(BOOL)SendMessageW(hwnd, TVM_SELECTITEM, cast(WPARAM)code, cast(LPARAM)uintptr(hitem))
  1607. }
  1608. TreeView_SelectItem :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> BOOL {
  1609. return TreeView_Select(hwnd, hitem, TVGN_CARET)
  1610. }
  1611. TreeView_SelectDropTarget :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> BOOL {
  1612. return TreeView_Select(hwnd, hitem, TVGN_DROPHILITE)
  1613. }
  1614. TreeView_SelectSetFirstVisible :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> BOOL {
  1615. return TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE)
  1616. }
  1617. TreeView_GetItem :: #force_inline proc "system" (hwnd: HWND, pitem: ^TV_ITEMW) -> BOOL {
  1618. return cast(BOOL)SendMessageW(hwnd, TVM_GETITEMW, 0, cast(LPARAM)uintptr(pitem))
  1619. }
  1620. TreeView_SetItem :: #force_inline proc "system" (hwnd: HWND, pitem: ^TV_ITEMW) -> BOOL {
  1621. return cast(BOOL)SendMessageW(hwnd, TVM_SETITEMW, 0, cast(LPARAM)uintptr(pitem))
  1622. }
  1623. TreeView_EditLabel :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HWND {
  1624. return cast(HWND)uintptr(SendMessageW(hwnd, TVM_EDITLABELW, 0, cast(LPARAM)uintptr(hitem)))
  1625. }
  1626. TreeView_GetEditControl :: #force_inline proc "system" (hwnd: HWND) -> HWND {
  1627. return cast(HWND)uintptr(SendMessageW(hwnd, TVM_GETEDITCONTROL, 0, 0))
  1628. }
  1629. TreeView_GetVisibleCount :: #force_inline proc "system" (hwnd: HWND) -> UINT {
  1630. return cast(UINT)SendMessageW(hwnd, TVM_GETVISIBLECOUNT, 0, 0)
  1631. }
  1632. TreeView_HitTest :: #force_inline proc "system" (hwnd: HWND, lpht: LPTV_HITTESTINFO) -> HTREEITEM {
  1633. return cast(HTREEITEM)uintptr(SendMessageW(hwnd, TVM_HITTEST, 0, cast(LPARAM)uintptr(lpht)))
  1634. }
  1635. TreeView_CreateDragImage :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> HIMAGELIST {
  1636. return cast(HIMAGELIST)uintptr(SendMessageW(hwnd, TVM_CREATEDRAGIMAGE, 0, cast(LPARAM)uintptr(hitem)))
  1637. }
  1638. TreeView_SortChildren :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM, recurse: BOOL) -> BOOL {
  1639. return cast(BOOL)SendMessageW(hwnd, TVM_SORTCHILDREN, cast(WPARAM)recurse, cast(LPARAM)uintptr(hitem))
  1640. }
  1641. TreeView_EnsureVisible :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM) -> BOOL {
  1642. return cast(BOOL)SendMessageW(hwnd, TVM_ENSUREVISIBLE, 0, cast(LPARAM)uintptr(hitem))
  1643. }
  1644. TreeView_SortChildrenCB :: #force_inline proc "system" (hwnd: HWND, psort: LPTVSORTCB, recurse: BOOL) -> BOOL {
  1645. return cast(BOOL)SendMessageW(hwnd, TVM_SORTCHILDRENCB, cast(WPARAM)recurse, cast(LPARAM)uintptr(psort))
  1646. }
  1647. TreeView_EndEditLabelNow :: #force_inline proc "system" (hwnd: HWND, fCancel: BOOL) -> BOOL {
  1648. return cast(BOOL)SendMessageW(hwnd, TVM_ENDEDITLABELNOW, cast(WPARAM)fCancel, 0)
  1649. }
  1650. TreeView_SetToolTips :: #force_inline proc "system" (hwnd: HWND, hwndTT: HWND) -> HWND {
  1651. return cast(HWND)uintptr(SendMessageW(hwnd, TVM_SETTOOLTIPS, uintptr(hwndTT), 0))
  1652. }
  1653. TreeView_GetToolTips :: #force_inline proc "system" (hwnd: HWND) -> HWND {
  1654. return cast(HWND)uintptr(SendMessageW(hwnd, TVM_GETTOOLTIPS, 0, 0))
  1655. }
  1656. TreeView_GetISearchString :: #force_inline proc "system" (hwnd: HWND, lpsz: LPWSTR) -> BOOL {
  1657. return cast(BOOL)SendMessageW(hwnd, TVM_GETISEARCHSTRINGW, 0, cast(LPARAM)uintptr(lpsz))
  1658. }
  1659. TreeView_SetInsertMark :: #force_inline proc "system" (hwnd: HWND, hItem: HTREEITEM, fAfter: BOOL) -> BOOL {
  1660. return cast(BOOL)SendMessageW(hwnd, TVM_SETINSERTMARK, cast(WPARAM)fAfter, cast(LPARAM)uintptr(hItem))
  1661. }
  1662. TreeView_SetUnicodeFormat :: #force_inline proc "system" (hwnd: HWND, fUnicode: BOOL) -> BOOL {
  1663. return cast(BOOL)SendMessageW(hwnd, TVM_SETUNICODEFORMAT, cast(WPARAM)fUnicode, 0)
  1664. }
  1665. TreeView_GetUnicodeFormat :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
  1666. return cast(BOOL)SendMessageW(hwnd, TVM_GETUNICODEFORMAT, 0, 0)
  1667. }
  1668. TreeView_SetItemHeight :: #force_inline proc "system" (hwnd: HWND, iHeight: c_int) -> c_int {
  1669. return cast(c_int)SendMessageW(hwnd, TVM_SETITEMHEIGHT, cast(WPARAM)iHeight, 0)
  1670. }
  1671. TreeView_GetItemHeight :: #force_inline proc "system" (hwnd: HWND) -> c_int {
  1672. return cast(c_int)SendMessageW(hwnd, TVM_GETITEMHEIGHT, 0, 0)
  1673. }
  1674. TreeView_SetBkColor :: #force_inline proc "system" (hwnd: HWND, clr: COLORREF) -> COLORREF {
  1675. return cast(COLORREF)SendMessageW(hwnd, TVM_SETBKCOLOR, 0, cast(LPARAM)clr)
  1676. }
  1677. TreeView_SetTextColor :: #force_inline proc "system" (hwnd: HWND, clr: COLORREF) -> COLORREF {
  1678. return cast(COLORREF)SendMessageW(hwnd, TVM_SETTEXTCOLOR, 0, cast(LPARAM)clr)
  1679. }
  1680. TreeView_GetBkColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
  1681. return cast(COLORREF)SendMessageW(hwnd, TVM_GETBKCOLOR, 0, 0)
  1682. }
  1683. TreeView_GetTextColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
  1684. return cast(COLORREF)SendMessageW(hwnd, TVM_GETTEXTCOLOR, 0, 0)
  1685. }
  1686. TreeView_SetScrollTime :: #force_inline proc "system" (hwnd: HWND, uTime: UINT) -> UINT {
  1687. return cast(UINT)SendMessageW(hwnd, TVM_SETSCROLLTIME, cast(WPARAM)uTime, 0)
  1688. }
  1689. TreeView_GetScrollTime :: #force_inline proc "system" (hwnd: HWND) -> UINT {
  1690. return cast(UINT)SendMessageW(hwnd, TVM_GETSCROLLTIME, 0, 0)
  1691. }
  1692. TreeView_SetInsertMarkColor :: #force_inline proc "system" (hwnd: HWND, clr: COLORREF) -> COLORREF {
  1693. return cast(COLORREF)SendMessageW(hwnd, TVM_SETINSERTMARKCOLOR, 0, cast(LPARAM)clr)
  1694. }
  1695. TreeView_GetInsertMarkColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
  1696. return cast(COLORREF)SendMessageW(hwnd, TVM_GETINSERTMARKCOLOR, 0, 0)
  1697. }
  1698. TreeView_SetItemState :: #force_inline proc "system" (hwndTV: HWND, hti: HTREEITEM, data: UINT, mask: UINT) {
  1699. item := TVITEMW {
  1700. mask = TVIF_STATE,
  1701. hItem = hti,
  1702. stateMask = mask,
  1703. state = data,
  1704. }
  1705. SendMessageW(hwndTV, TVM_SETITEMW, 0, cast(LPARAM)uintptr(&item))
  1706. }
  1707. TreeView_SetCheckState :: #force_inline proc "system" (hwndTV: HWND, hti: HTREEITEM, fCheck: BOOL) {
  1708. TreeView_SetItemState(hwndTV, hti, INDEXTOSTATEIMAGEMASK(2 if fCheck else 1), TVIS_STATEIMAGEMASK)
  1709. }
  1710. TreeView_GetItemState :: #force_inline proc "system" (hwndTV: HWND, hti: HTREEITEM, mask: UINT) -> UINT {
  1711. return cast(UINT)SendMessageW(hwndTV, TVM_GETITEMSTATE, uintptr(hti), cast(LPARAM)mask)
  1712. }
  1713. TreeView_GetCheckState :: #force_inline proc "system" (hwndTV: HWND, hti: HTREEITEM) -> UINT {
  1714. return ((cast(UINT)SendMessageW(hwndTV, TVM_GETITEMSTATE, uintptr(hti), cast(LPARAM)TVIS_STATEIMAGEMASK)) >> 12) - 1
  1715. }
  1716. TreeView_SetLineColor :: #force_inline proc "system" (hwnd: HWND, clr: COLORREF) -> COLORREF {
  1717. return cast(COLORREF)SendMessageW(hwnd, TVM_SETLINECOLOR, 0, cast(LPARAM)clr)
  1718. }
  1719. TreeView_GetLineColor :: #force_inline proc "system" (hwnd: HWND) -> COLORREF {
  1720. return cast(COLORREF)SendMessageW(hwnd, TVM_GETLINECOLOR, 0, 0)
  1721. }
  1722. TreeView_MapAccIDToHTREEITEM :: #force_inline proc "system" (hwnd: HWND, id: UINT) -> HTREEITEM {
  1723. return cast(HTREEITEM)uintptr(SendMessageW(hwnd, TVM_MAPACCIDTOHTREEITEM, cast(WPARAM)id, 0))
  1724. }
  1725. TreeView_MapHTREEITEMToAccID :: #force_inline proc "system" (hwnd: HWND, htreeitem: HTREEITEM) -> UINT {
  1726. return cast(UINT)SendMessageW(hwnd, TVM_MAPHTREEITEMTOACCID, uintptr(htreeitem), 0)
  1727. }
  1728. // Combo Box Ex Control
  1729. CBEIF_TEXT :: 0x01
  1730. CBEIF_IMAGE :: 0x02
  1731. CBEIF_SELECTEDIMAGE :: 0x04
  1732. CBEIF_OVERLAY :: 0x08
  1733. CBEIF_INDENT :: 0x10
  1734. CBEIF_LPARAM :: 0x20
  1735. CBEIF_DI_SETITEM :: 0x10000000
  1736. CBES_EX_NOEDITIMAGE :: 0x01
  1737. CBES_EX_NOEDITIMAGEINDENT :: 0x02
  1738. CBES_EX_PATHWORDBREAKPROC :: 0x04
  1739. CBES_EX_NOSIZELIMIT :: 0x08
  1740. CBES_EX_CASESENSITIVE :: 0x10
  1741. CBEN_GETDISPINFOA :: (CBEN_FIRST - 0)
  1742. CBEN_INSERTITEM :: (CBEN_FIRST - 1)
  1743. CBEN_DELETEITEM :: (CBEN_FIRST - 2)
  1744. CBEN_BEGINEDIT :: (CBEN_FIRST - 4)
  1745. CBEN_ENDEDITA :: (CBEN_FIRST - 5)
  1746. CBEN_ENDEDITW :: (CBEN_FIRST - 6)
  1747. CBEN_GETDISPINFOW :: (CBEN_FIRST - 7)
  1748. CBEN_DRAGBEGINA :: (CBEN_FIRST - 8)
  1749. CBEN_DRAGBEGINW :: (CBEN_FIRST - 9)
  1750. CBENF_KILLFOCUS :: 1
  1751. CBENF_RETURN :: 2
  1752. CBENF_ESCAPE :: 3
  1753. CBENF_DROPDOWN :: 4
  1754. CBEMAXSTRLEN :: 260
  1755. COMBOBOXEXITEMW :: struct {
  1756. mask: UINT,
  1757. iItem: INT_PTR,
  1758. pszText: LPWSTR,
  1759. cchTextMax: c_int,
  1760. iImage: c_int,
  1761. iSelectedImage: c_int,
  1762. iOverlay: c_int,
  1763. iIndent: c_int,
  1764. lParam: LPARAM,
  1765. }
  1766. PCOMBOBOXEXITEMW :: ^COMBOBOXEXITEMW
  1767. PCCOMBOBOXEXITEMW :: ^COMBOBOXEXITEMW
  1768. NMCOMBOBOXEXW :: struct {
  1769. hdr: NMHDR,
  1770. ceItem: COMBOBOXEXITEMW,
  1771. }
  1772. PNMCOMBOBOXEXW :: ^NMCOMBOBOXEXW
  1773. NMCBEDRAGBEGINW :: struct {
  1774. hdr: NMHDR,
  1775. iItemId: c_int,
  1776. szText: [CBEMAXSTRLEN]WCHAR,
  1777. }
  1778. PNMCBEDRAGBEGINW :: ^NMCBEDRAGBEGINW
  1779. LPNMCBEDRAGBEGINW :: PNMCBEDRAGBEGINW
  1780. NMCBEENDEDITW :: struct {
  1781. hdr: NMHDR,
  1782. fChanged: BOOL,
  1783. iNewSelection: c_int,
  1784. szText: [CBEMAXSTRLEN]WCHAR,
  1785. iWhy: c_int,
  1786. }
  1787. PNMCBEENDEDITW :: ^NMCBEENDEDITW
  1788. LPNMCBEENDEDITW :: PNMCBEENDEDITW
  1789. // Tab Control
  1790. TCS_EX_FLATSEPARATORS :: 0x1
  1791. TCS_EX_REGISTERDROP :: 0x2
  1792. TCN_KEYDOWN :: TCN_FIRST - 0
  1793. TCN_SELCHANGE :: TCN_FIRST - 1
  1794. TCN_SELCHANGING :: TCN_FIRST - 2
  1795. TCN_GETOBJECT :: TCN_FIRST - 3
  1796. TCN_FOCUSCHANGE :: TCN_FIRST - 4
  1797. TCITEMHEADERW :: struct {
  1798. mask: UINT,
  1799. lpReserved1: UINT,
  1800. lpReserved2: UINT,
  1801. pszText: LPWSTR,
  1802. cchTextMax: c_int,
  1803. iImage: c_int,
  1804. }
  1805. TC_ITEMHEADERW :: TCITEMHEADERW
  1806. LPTCITEMHEADERW :: ^TCITEMHEADERW
  1807. LPTC_ITEMHEADERW :: LPTCITEMHEADERW
  1808. TCITEMW :: struct {
  1809. mask: UINT,
  1810. dwState: DWORD,
  1811. dwStateMask: DWORD,
  1812. pszText: LPWSTR,
  1813. cchTextMax: c_int,
  1814. iImage: c_int,
  1815. lParam: LPARAM,
  1816. }
  1817. TC_ITEMW :: TCITEMW
  1818. LPTCITEMW :: ^TCITEMW
  1819. LPTC_ITEMW :: LPTCITEMW
  1820. TCHITTESTINFO :: struct {
  1821. pt: POINT,
  1822. flags: UINT,
  1823. }
  1824. TC_HITTESTINFO :: TCHITTESTINFO
  1825. LPTCHITTESTINFO :: ^TCHITTESTINFO
  1826. LPTC_HITTESTINFO :: LPTCHITTESTINFO
  1827. NMTCKEYDOWN :: struct #packed {
  1828. hdr: NMHDR,
  1829. wVKey: WORD,
  1830. flags: UINT,
  1831. }
  1832. TC_KEYDOWN :: NMTCKEYDOWN
  1833. TabCtrl_GetImageList :: #force_inline proc "system" (hwnd: HWND) -> HIMAGELIST {
  1834. return cast(HIMAGELIST)uintptr(SendMessageW(hwnd, TCM_GETIMAGELIST, 0, 0))
  1835. }
  1836. TabCtrl_SetImageList :: #force_inline proc "system" (hwnd: HWND, himl: HIMAGELIST) -> HIMAGELIST {
  1837. return cast(HIMAGELIST)uintptr(SendMessageW(hwnd, TCM_SETIMAGELIST, 0, cast(LPARAM)uintptr(himl)))
  1838. }
  1839. TabCtrl_GetItemCount :: #force_inline proc "system" (hwnd: HWND) -> c_int {
  1840. return cast(c_int)SendMessageW(hwnd, TCM_GETITEMCOUNT, 0, 0)
  1841. }
  1842. TabCtrl_GetItem :: #force_inline proc "system" (hwnd: HWND, iItem: c_int, pitem: ^TC_ITEMW) -> BOOL {
  1843. return cast(BOOL)SendMessageW(hwnd, TCM_GETITEMW, cast(WPARAM)iItem, cast(LPARAM)uintptr(pitem))
  1844. }
  1845. TabCtrl_SetItem :: #force_inline proc "system" (hwnd: HWND, iItem: c_int, pitem: ^TC_ITEMW) -> BOOL {
  1846. return cast(BOOL)SendMessageW(hwnd, TCM_SETITEMW, cast(WPARAM)iItem, cast(LPARAM)uintptr(pitem))
  1847. }
  1848. TabCtrl_InsertItem :: #force_inline proc "system" (hwnd: HWND, iItem: c_int, pitem: ^TC_ITEMW) -> c_int {
  1849. return cast(c_int)SendMessageW(hwnd, TCM_INSERTITEMW, cast(WPARAM)iItem, cast(LPARAM)uintptr(pitem))
  1850. }
  1851. TabCtrl_DeleteItem :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> BOOL {
  1852. return cast(BOOL)SendMessageW(hwnd, TCM_DELETEITEM, cast(WPARAM)i, 0)
  1853. }
  1854. TabCtrl_DeleteAllItems :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
  1855. return cast(BOOL)SendMessageW(hwnd, TCM_DELETEALLITEMS, 0, 0)
  1856. }
  1857. TabCtrl_GetItemRect :: #force_inline proc "system" (hwnd: HWND, i: c_int, prc: ^RECT) -> BOOL {
  1858. return cast(BOOL)SendMessageW(hwnd, TCM_GETITEMRECT, cast(WPARAM)i, cast(LPARAM)uintptr(prc))
  1859. }
  1860. TabCtrl_GetCurSel :: #force_inline proc "system" (hwnd: HWND) -> c_int {
  1861. return cast(c_int)SendMessageW(hwnd, TCM_GETCURSEL, 0, 0)
  1862. }
  1863. TabCtrl_SetCurSel :: #force_inline proc "system" (hwnd: HWND, i: c_int) -> c_int {
  1864. return cast(c_int)SendMessageW(hwnd, TCM_SETCURSEL, cast(WPARAM)i, 0)
  1865. }
  1866. TabCtrl_HitTest :: #force_inline proc "system" (hwndTC: HWND, pinfo: ^TC_HITTESTINFO) -> c_int {
  1867. return cast(c_int)SendMessageW(hwndTC, TCM_HITTEST, 0, cast(LPARAM)uintptr(pinfo))
  1868. }
  1869. TabCtrl_SetItemExtra :: #force_inline proc "system" (hwndTC: HWND, cb: c_int) -> BOOL {
  1870. return cast(BOOL)SendMessageW(hwndTC, TCM_SETITEMEXTRA, cast(WPARAM)cb, 0)
  1871. }
  1872. TabCtrl_AdjustRect :: #force_inline proc "system" (hwnd: HWND, bLarger: BOOL, prc: ^RECT) -> c_int {
  1873. return cast(c_int)SendMessageW(hwnd, TCM_ADJUSTRECT, cast(WPARAM)bLarger, cast(LPARAM)uintptr(prc))
  1874. }
  1875. TabCtrl_SetItemSize :: #force_inline proc "system" (hwnd: HWND, x,y: c_int) -> DWORD {
  1876. return cast(DWORD)SendMessageW(hwnd, TCM_SETITEMSIZE, 0, MAKELPARAM(x,y))
  1877. }
  1878. TabCtrl_RemoveImage :: #force_inline proc "system" (hwnd: HWND, i: c_int) {
  1879. SendMessageW(hwnd, TCM_REMOVEIMAGE, cast(WPARAM)i, 0)
  1880. }
  1881. TabCtrl_SetPadding :: #force_inline proc "system" (hwnd: HWND, cx,cy: c_int) {
  1882. SendMessageW(hwnd, TCM_SETPADDING, 0, MAKELPARAM(cx,cy))
  1883. }
  1884. TabCtrl_GetRowCount :: #force_inline proc "system" (hwnd: HWND) -> c_int {
  1885. return cast(c_int)SendMessageW(hwnd, TCM_GETROWCOUNT, 0, 0)
  1886. }
  1887. TabCtrl_GetToolTips :: #force_inline proc "system" (hwnd: HWND) -> HWND {
  1888. return cast(HWND)uintptr(SendMessageW(hwnd, TCM_GETTOOLTIPS, 0, 0))
  1889. }
  1890. TabCtrl_SetToolTips :: #force_inline proc "system" (hwnd: HWND, hwndTT: HWND) {
  1891. SendMessageW(hwnd, TCM_SETTOOLTIPS, uintptr(hwndTT), 0)
  1892. }
  1893. TabCtrl_GetCurFocus :: #force_inline proc "system" (hwnd: HWND) -> c_int {
  1894. return cast(c_int)SendMessageW(hwnd, TCM_GETCURFOCUS, 0, 0)
  1895. }
  1896. TabCtrl_SetCurFocus :: #force_inline proc "system" (hwnd: HWND, i: c_int) {
  1897. SendMessageW(hwnd, TCM_SETCURFOCUS, cast(WPARAM)i, 0)
  1898. }
  1899. TabCtrl_SetMinTabWidth :: #force_inline proc "system" (hwnd: HWND, x: c_int) -> c_int {
  1900. return cast(c_int)SendMessageW(hwnd, TCM_SETMINTABWIDTH, 0, cast(LPARAM)x)
  1901. }
  1902. TabCtrl_DeselectAll :: #force_inline proc "system" (hwnd: HWND, fExcludeFocus: BOOL) {
  1903. SendMessageW(hwnd, TCM_DESELECTALL, cast(WPARAM)fExcludeFocus, 0)
  1904. }
  1905. TabCtrl_HighlightItem :: #force_inline proc "system" (hwnd: HWND, i: c_int, fHighlight: BOOL) -> BOOL {
  1906. return cast(BOOL)SendMessageW(hwnd, TCM_HIGHLIGHTITEM, cast(WPARAM)i, cast(LPARAM)MAKELONG(fHighlight,0))
  1907. }
  1908. TabCtrl_SetExtendedStyle :: #force_inline proc "system" (hwnd: HWND, dw: DWORD) -> DWORD {
  1909. return cast(DWORD)SendMessageW(hwnd, TCM_SETEXTENDEDSTYLE, 0, cast(LPARAM)dw)
  1910. }
  1911. TabCtrl_GetExtendedStyle :: #force_inline proc "system" (hwnd: HWND) -> DWORD {
  1912. return cast(DWORD)SendMessageW(hwnd, TCM_GETEXTENDEDSTYLE, 0, 0)
  1913. }
  1914. TabCtrl_SetUnicodeFormat :: #force_inline proc "system" (hwnd: HWND, fUnicode: BOOL) -> BOOL {
  1915. return cast(BOOL)SendMessageW(hwnd, TCM_SETUNICODEFORMAT, cast(WPARAM)fUnicode, 0)
  1916. }
  1917. TabCtrl_GetUnicodeFormat :: #force_inline proc "system" (hwnd: HWND) -> BOOL {
  1918. return cast(BOOL)SendMessageW(hwnd, TCM_GETUNICODEFORMAT, 0, 0)
  1919. }