CommCtrl.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:320k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #define LVM_GETNEXTITEM         (LVM_FIRST + 12)
  2. #define ListView_GetNextItem(hwnd, i, flags) 
  3.     (int)SNDMSG((hwnd), LVM_GETNEXTITEM, (WPARAM)(int)(i), MAKELPARAM((flags), 0))
  4. #define LVFI_PARAM              0x0001
  5. #define LVFI_STRING             0x0002
  6. #define LVFI_PARTIAL            0x0008
  7. #define LVFI_WRAP               0x0020
  8. #define LVFI_NEARESTXY          0x0040
  9. #if (_WIN32_IE >= 0x0300)
  10. #define LV_FINDINFOA    LVFINDINFOA
  11. #define LV_FINDINFOW    LVFINDINFOW
  12. #else
  13. #define tagLVFINDINFOA  _LV_FINDINFOA
  14. #define    LVFINDINFOA   LV_FINDINFOA
  15. #define tagLVFINDINFOW  _LV_FINDINFOW
  16. #define    LVFINDINFOW   LV_FINDINFOW
  17. #endif
  18. #define LV_FINDINFO  LVFINDINFO
  19. typedef struct tagLVFINDINFOA
  20. {
  21.     UINT flags;
  22.     LPCSTR psz;
  23.     LPARAM lParam;
  24.     POINT pt;
  25.     UINT vkDirection;
  26. } LVFINDINFOA, *LPFINDINFOA;
  27. typedef struct tagLVFINDINFOW
  28. {
  29.     UINT flags;
  30.     LPCWSTR psz;
  31.     LPARAM lParam;
  32.     POINT pt;
  33.     UINT vkDirection;
  34. } LVFINDINFOW, *LPFINDINFOW;
  35. #ifdef UNICODE
  36. #define  LVFINDINFO            LVFINDINFOW
  37. #else
  38. #define  LVFINDINFO            LVFINDINFOA
  39. #endif
  40. #define LVM_FINDITEMA           (LVM_FIRST + 13)
  41. #define LVM_FINDITEMW           (LVM_FIRST + 83)
  42. #ifdef UNICODE
  43. #define  LVM_FINDITEM           LVM_FINDITEMW
  44. #else
  45. #define  LVM_FINDITEM           LVM_FINDITEMA
  46. #endif
  47. #define ListView_FindItem(hwnd, iStart, plvfi) 
  48.     (int)SNDMSG((hwnd), LVM_FINDITEM, (WPARAM)(int)(iStart), (LPARAM)(const LV_FINDINFO *)(plvfi))
  49. #define LVIR_BOUNDS             0
  50. #define LVIR_ICON               1
  51. #define LVIR_LABEL              2
  52. #define LVIR_SELECTBOUNDS       3
  53. #define LVM_GETITEMRECT         (LVM_FIRST + 14)
  54. #define ListView_GetItemRect(hwnd, i, prc, code) 
  55.      (BOOL)SNDMSG((hwnd), LVM_GETITEMRECT, (WPARAM)(int)(i), 
  56.            ((prc) ? (((RECT *)(prc))->left = (code),(LPARAM)(RECT *)(prc)) : (LPARAM)(RECT *)NULL))
  57. #define LVM_SETITEMPOSITION     (LVM_FIRST + 15)
  58. #define ListView_SetItemPosition(hwndLV, i, x, y) 
  59.     (BOOL)SNDMSG((hwndLV), LVM_SETITEMPOSITION, (WPARAM)(int)(i), MAKELPARAM((x), (y)))
  60. #define LVM_GETITEMPOSITION     (LVM_FIRST + 16)
  61. #define ListView_GetItemPosition(hwndLV, i, ppt) 
  62.     (BOOL)SNDMSG((hwndLV), LVM_GETITEMPOSITION, (WPARAM)(int)(i), (LPARAM)(POINT *)(ppt))
  63. #define LVM_GETSTRINGWIDTHA     (LVM_FIRST + 17)
  64. #define LVM_GETSTRINGWIDTHW     (LVM_FIRST + 87)
  65. #ifdef UNICODE
  66. #define  LVM_GETSTRINGWIDTH     LVM_GETSTRINGWIDTHW
  67. #else
  68. #define  LVM_GETSTRINGWIDTH     LVM_GETSTRINGWIDTHA
  69. #endif
  70. #define ListView_GetStringWidth(hwndLV, psz) 
  71.     (int)SNDMSG((hwndLV), LVM_GETSTRINGWIDTH, 0, (LPARAM)(LPCTSTR)(psz))
  72. #define LVHT_NOWHERE            0x0001
  73. #define LVHT_ONITEMICON         0x0002
  74. #define LVHT_ONITEMLABEL        0x0004
  75. #define LVHT_ONITEMSTATEICON    0x0008
  76. #define LVHT_ONITEM             (LVHT_ONITEMICON | LVHT_ONITEMLABEL | LVHT_ONITEMSTATEICON)
  77. #define LVHT_ABOVE              0x0008
  78. #define LVHT_BELOW              0x0010
  79. #define LVHT_TORIGHT            0x0020
  80. #define LVHT_TOLEFT             0x0040
  81. #if (_WIN32_IE >= 0x0300)
  82. #define LV_HITTESTINFO LVHITTESTINFO
  83. #else
  84. #define tagLVHITTESTINFO  _LV_HITTESTINFO
  85. #define    LVHITTESTINFO   LV_HITTESTINFO
  86. #endif
  87. #define LVHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(LVHITTESTINFO, iItem)
  88. typedef struct tagLVHITTESTINFO
  89. {
  90.     POINT pt;
  91.     UINT flags;
  92.     int iItem;
  93. #if (_WIN32_IE >= 0x0300)
  94.     int iSubItem;    // this is was NOT in win95.  valid only for LVM_SUBITEMHITTEST
  95. #endif
  96. } LVHITTESTINFO, *LPLVHITTESTINFO;
  97. #define LVM_HITTEST             (LVM_FIRST + 18)
  98. #define ListView_HitTest(hwndLV, pinfo) 
  99.     (int)SNDMSG((hwndLV), LVM_HITTEST, 0, (LPARAM)(LV_HITTESTINFO *)(pinfo))
  100. #define LVM_ENSUREVISIBLE       (LVM_FIRST + 19)
  101. #define ListView_EnsureVisible(hwndLV, i, fPartialOK) 
  102.     (BOOL)SNDMSG((hwndLV), LVM_ENSUREVISIBLE, (WPARAM)(int)(i), MAKELPARAM((fPartialOK), 0))
  103. #define LVM_SCROLL              (LVM_FIRST + 20)
  104. #define ListView_Scroll(hwndLV, dx, dy) 
  105.     (BOOL)SNDMSG((hwndLV), LVM_SCROLL, (WPARAM)(int)(dx), (LPARAM)(int)(dy))
  106. #define LVM_REDRAWITEMS         (LVM_FIRST + 21)
  107. #define ListView_RedrawItems(hwndLV, iFirst, iLast) 
  108.     (BOOL)SNDMSG((hwndLV), LVM_REDRAWITEMS, (WPARAM)(int)(iFirst), (LPARAM)(int)(iLast))
  109. #define LVA_DEFAULT             0x0000
  110. #define LVA_ALIGNLEFT           0x0001
  111. #define LVA_ALIGNTOP            0x0002
  112. #define LVA_SNAPTOGRID          0x0005
  113. #define LVM_ARRANGE             (LVM_FIRST + 22)
  114. #define ListView_Arrange(hwndLV, code) 
  115.     (BOOL)SNDMSG((hwndLV), LVM_ARRANGE, (WPARAM)(UINT)(code), 0L)
  116. #define LVM_EDITLABELA          (LVM_FIRST + 23)
  117. #define LVM_EDITLABELW          (LVM_FIRST + 118)
  118. #ifdef UNICODE
  119. #define LVM_EDITLABEL           LVM_EDITLABELW
  120. #else
  121. #define LVM_EDITLABEL           LVM_EDITLABELA
  122. #endif
  123. #define ListView_EditLabel(hwndLV, i) 
  124.     (HWND)SNDMSG((hwndLV), LVM_EDITLABEL, (WPARAM)(int)(i), 0L)
  125. #define LVM_GETEDITCONTROL      (LVM_FIRST + 24)
  126. #define ListView_GetEditControl(hwndLV) 
  127.     (HWND)SNDMSG((hwndLV), LVM_GETEDITCONTROL, 0, 0L)
  128. #if (_WIN32_IE >= 0x0300)
  129. #define LV_COLUMNA      LVCOLUMNA
  130. #define LV_COLUMNW      LVCOLUMNW
  131. #else
  132. #define tagLVCOLUMNA    _LV_COLUMNA
  133. #define    LVCOLUMNA     LV_COLUMNA
  134. #define tagLVCOLUMNW    _LV_COLUMNW
  135. #define    LVCOLUMNW     LV_COLUMNW
  136. #endif
  137. #define LV_COLUMN       LVCOLUMN
  138. #define LVCOLUMNA_V1_SIZE CCSIZEOF_STRUCT(LVCOLUMNA, iSubItem)
  139. #define LVCOLUMNW_V1_SIZE CCSIZEOF_STRUCT(LVCOLUMNW, iSubItem)
  140. typedef struct tagLVCOLUMNA
  141. {
  142.     UINT mask;
  143.     int fmt;
  144.     int cx;
  145.     LPSTR pszText;
  146.     int cchTextMax;
  147.     int iSubItem;
  148. #if (_WIN32_IE >= 0x0300)
  149.     int iImage;
  150.     int iOrder;
  151. #endif
  152. } LVCOLUMNA, *LPLVCOLUMNA;
  153. typedef struct tagLVCOLUMNW
  154. {
  155.     UINT mask;
  156.     int fmt;
  157.     int cx;
  158.     LPWSTR pszText;
  159.     int cchTextMax;
  160.     int iSubItem;
  161. #if (_WIN32_IE >= 0x0300)
  162.     int iImage;
  163.     int iOrder;
  164. #endif
  165. } LVCOLUMNW, *LPLVCOLUMNW;
  166. #ifdef UNICODE
  167. #define  LVCOLUMN               LVCOLUMNW
  168. #define  LPLVCOLUMN             LPLVCOLUMNW
  169. #define LVCOLUMN_V1_SIZE LVCOLUMNW_V1_SIZE
  170. #else
  171. #define  LVCOLUMN               LVCOLUMNA
  172. #define  LPLVCOLUMN             LPLVCOLUMNA
  173. #define LVCOLUMN_V1_SIZE LVCOLUMNA_V1_SIZE
  174. #endif
  175. #define LVCF_FMT                0x0001
  176. #define LVCF_WIDTH              0x0002
  177. #define LVCF_TEXT               0x0004
  178. #define LVCF_SUBITEM            0x0008
  179. #if (_WIN32_IE >= 0x0300)
  180. #define LVCF_IMAGE              0x0010
  181. #define LVCF_ORDER              0x0020
  182. #endif
  183. #define LVCFMT_LEFT             0x0000
  184. #define LVCFMT_RIGHT            0x0001
  185. #define LVCFMT_CENTER           0x0002
  186. #define LVCFMT_JUSTIFYMASK      0x0003
  187. #if (_WIN32_IE >= 0x0300)
  188. #define LVCFMT_IMAGE            0x0800
  189. #define LVCFMT_BITMAP_ON_RIGHT  0x1000
  190. #define LVCFMT_COL_HAS_IMAGES   0x8000
  191. #endif
  192. #define LVM_GETCOLUMNA          (LVM_FIRST + 25)
  193. #define LVM_GETCOLUMNW          (LVM_FIRST + 95)
  194. #ifdef UNICODE
  195. #define  LVM_GETCOLUMN          LVM_GETCOLUMNW
  196. #else
  197. #define  LVM_GETCOLUMN          LVM_GETCOLUMNA
  198. #endif
  199. #define ListView_GetColumn(hwnd, iCol, pcol) 
  200.     (BOOL)SNDMSG((hwnd), LVM_GETCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(LV_COLUMN *)(pcol))
  201. #define LVM_SETCOLUMNA          (LVM_FIRST + 26)
  202. #define LVM_SETCOLUMNW          (LVM_FIRST + 96)
  203. #ifdef UNICODE
  204. #define  LVM_SETCOLUMN          LVM_SETCOLUMNW
  205. #else
  206. #define  LVM_SETCOLUMN          LVM_SETCOLUMNA
  207. #endif
  208. #define ListView_SetColumn(hwnd, iCol, pcol) 
  209.     (BOOL)SNDMSG((hwnd), LVM_SETCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN *)(pcol))
  210. #define LVM_INSERTCOLUMNA       (LVM_FIRST + 27)
  211. #define LVM_INSERTCOLUMNW       (LVM_FIRST + 97)
  212. #ifdef UNICODE
  213. #   define  LVM_INSERTCOLUMN    LVM_INSERTCOLUMNW
  214. #else
  215. #   define  LVM_INSERTCOLUMN    LVM_INSERTCOLUMNA
  216. #endif
  217. #define ListView_InsertColumn(hwnd, iCol, pcol) 
  218.     (int)SNDMSG((hwnd), LVM_INSERTCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN *)(pcol))
  219. #define LVM_DELETECOLUMN        (LVM_FIRST + 28)
  220. #define ListView_DeleteColumn(hwnd, iCol) 
  221.     (BOOL)SNDMSG((hwnd), LVM_DELETECOLUMN, (WPARAM)(int)(iCol), 0)
  222. #define LVM_GETCOLUMNWIDTH      (LVM_FIRST + 29)
  223. #define ListView_GetColumnWidth(hwnd, iCol) 
  224.     (int)SNDMSG((hwnd), LVM_GETCOLUMNWIDTH, (WPARAM)(int)(iCol), 0)
  225. #define LVSCW_AUTOSIZE              -1
  226. #define LVSCW_AUTOSIZE_USEHEADER    -2
  227. #define LVM_SETCOLUMNWIDTH          (LVM_FIRST + 30)
  228. #define ListView_SetColumnWidth(hwnd, iCol, cx) 
  229.     (BOOL)SNDMSG((hwnd), LVM_SETCOLUMNWIDTH, (WPARAM)(int)(iCol), MAKELPARAM((cx), 0))
  230. #if (_WIN32_IE >= 0x0300)
  231. #define LVM_GETHEADER               (LVM_FIRST + 31)
  232. #define ListView_GetHeader(hwnd)
  233.     (HWND)SNDMSG((hwnd), LVM_GETHEADER, 0, 0L)
  234. #endif
  235. #define LVM_CREATEDRAGIMAGE     (LVM_FIRST + 33)
  236. #define ListView_CreateDragImage(hwnd, i, lpptUpLeft) 
  237.     (HIMAGELIST)SNDMSG((hwnd), LVM_CREATEDRAGIMAGE, (WPARAM)(int)(i), (LPARAM)(LPPOINT)(lpptUpLeft))
  238. #define LVM_GETVIEWRECT         (LVM_FIRST + 34)
  239. #define ListView_GetViewRect(hwnd, prc) 
  240.     (BOOL)SNDMSG((hwnd), LVM_GETVIEWRECT, 0, (LPARAM)(RECT *)(prc))
  241. #define LVM_GETTEXTCOLOR        (LVM_FIRST + 35)
  242. #define ListView_GetTextColor(hwnd)  
  243.     (COLORREF)SNDMSG((hwnd), LVM_GETTEXTCOLOR, 0, 0L)
  244. #define LVM_SETTEXTCOLOR        (LVM_FIRST + 36)
  245. #define ListView_SetTextColor(hwnd, clrText) 
  246.     (BOOL)SNDMSG((hwnd), LVM_SETTEXTCOLOR, 0, (LPARAM)(COLORREF)(clrText))
  247. #define LVM_GETTEXTBKCOLOR      (LVM_FIRST + 37)
  248. #define ListView_GetTextBkColor(hwnd)  
  249.     (COLORREF)SNDMSG((hwnd), LVM_GETTEXTBKCOLOR, 0, 0L)
  250. #define LVM_SETTEXTBKCOLOR      (LVM_FIRST + 38)
  251. #define ListView_SetTextBkColor(hwnd, clrTextBk) 
  252.     (BOOL)SNDMSG((hwnd), LVM_SETTEXTBKCOLOR, 0, (LPARAM)(COLORREF)(clrTextBk))
  253. #define LVM_GETTOPINDEX         (LVM_FIRST + 39)
  254. #define ListView_GetTopIndex(hwndLV) 
  255.     (int)SNDMSG((hwndLV), LVM_GETTOPINDEX, 0, 0)
  256. #define LVM_GETCOUNTPERPAGE     (LVM_FIRST + 40)
  257. #define ListView_GetCountPerPage(hwndLV) 
  258.     (int)SNDMSG((hwndLV), LVM_GETCOUNTPERPAGE, 0, 0)
  259. #define LVM_GETORIGIN           (LVM_FIRST + 41)
  260. #define ListView_GetOrigin(hwndLV, ppt) 
  261.     (BOOL)SNDMSG((hwndLV), LVM_GETORIGIN, (WPARAM)0, (LPARAM)(POINT *)(ppt))
  262. #define LVM_UPDATE              (LVM_FIRST + 42)
  263. #define ListView_Update(hwndLV, i) 
  264.     (BOOL)SNDMSG((hwndLV), LVM_UPDATE, (WPARAM)(i), 0L)
  265. #define LVM_SETITEMSTATE        (LVM_FIRST + 43)
  266. #define ListView_SetItemState(hwndLV, i, data, mask) 
  267. { LV_ITEM _ms_lvi;
  268.   _ms_lvi.stateMask = mask;
  269.   _ms_lvi.state = data;
  270.   SNDMSG((hwndLV), LVM_SETITEMSTATE, (WPARAM)(i), (LPARAM)(LV_ITEM *)&_ms_lvi);
  271. }
  272. #if (_WIN32_IE >= 0x0300)
  273. #define ListView_SetCheckState(hwndLV, i, fCheck) 
  274.   ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK((fCheck)?2:1), LVIS_STATEIMAGEMASK)
  275. #endif
  276. #define LVM_GETITEMSTATE        (LVM_FIRST + 44)
  277. #define ListView_GetItemState(hwndLV, i, mask) 
  278.    (UINT)SNDMSG((hwndLV), LVM_GETITEMSTATE, (WPARAM)(i), (LPARAM)(mask))
  279. #if (_WIN32_IE >= 0x0300)
  280. #define ListView_GetCheckState(hwndLV, i) 
  281.    ((((UINT)(SNDMSG((hwndLV), LVM_GETITEMSTATE, (WPARAM)(i), LVIS_STATEIMAGEMASK))) >> 12) -1)
  282. #endif
  283. #define LVM_GETITEMTEXTA        (LVM_FIRST + 45)
  284. #define LVM_GETITEMTEXTW        (LVM_FIRST + 115)
  285. #ifdef UNICODE
  286. #define  LVM_GETITEMTEXT        LVM_GETITEMTEXTW
  287. #else
  288. #define  LVM_GETITEMTEXT        LVM_GETITEMTEXTA
  289. #endif
  290. #define ListView_GetItemText(hwndLV, i, iSubItem_, pszText_, cchTextMax_) 
  291. { LV_ITEM _ms_lvi;
  292.   _ms_lvi.iSubItem = iSubItem_;
  293.   _ms_lvi.cchTextMax = cchTextMax_;
  294.   _ms_lvi.pszText = pszText_;
  295.   SNDMSG((hwndLV), LVM_GETITEMTEXT, (WPARAM)(i), (LPARAM)(LV_ITEM *)&_ms_lvi);
  296. }
  297. #define LVM_SETITEMTEXTA        (LVM_FIRST + 46)
  298. #define LVM_SETITEMTEXTW        (LVM_FIRST + 116)
  299. #ifdef UNICODE
  300. #define  LVM_SETITEMTEXT        LVM_SETITEMTEXTW
  301. #else
  302. #define  LVM_SETITEMTEXT        LVM_SETITEMTEXTA
  303. #endif
  304. #define ListView_SetItemText(hwndLV, i, iSubItem_, pszText_) 
  305. { LV_ITEM _ms_lvi;
  306.   _ms_lvi.iSubItem = iSubItem_;
  307.   _ms_lvi.pszText = pszText_;
  308.   SNDMSG((hwndLV), LVM_SETITEMTEXT, (WPARAM)(i), (LPARAM)(LV_ITEM *)&_ms_lvi);
  309. }
  310. #if (_WIN32_IE >= 0x0300)
  311. // these flags only apply to LVS_OWNERDATA listviews in report or list mode
  312. #define LVSICF_NOINVALIDATEALL  0x00000001
  313. #define LVSICF_NOSCROLL         0x00000002
  314. #endif
  315. #define LVM_SETITEMCOUNT        (LVM_FIRST + 47)
  316. #define ListView_SetItemCount(hwndLV, cItems) 
  317.   SNDMSG((hwndLV), LVM_SETITEMCOUNT, (WPARAM)(cItems), 0)
  318. #if (_WIN32_IE >= 0x0300)
  319. #define ListView_SetItemCountEx(hwndLV, cItems, dwFlags) 
  320.   SNDMSG((hwndLV), LVM_SETITEMCOUNT, (WPARAM)(cItems), (LPARAM)(dwFlags))
  321. #endif
  322. typedef int (CALLBACK *PFNLVCOMPARE)(LPARAM, LPARAM, LPARAM);
  323. #define LVM_SORTITEMS           (LVM_FIRST + 48)
  324. #define ListView_SortItems(hwndLV, _pfnCompare, _lPrm) 
  325.   (BOOL)SNDMSG((hwndLV), LVM_SORTITEMS, (WPARAM)(LPARAM)(_lPrm), 
  326.   (LPARAM)(PFNLVCOMPARE)(_pfnCompare))
  327. #define LVM_SETITEMPOSITION32   (LVM_FIRST + 49)
  328. #define ListView_SetItemPosition32(hwndLV, i, x0, y0) 
  329. {   POINT ptNewPos; 
  330.     ptNewPos.x = x0; ptNewPos.y = y0; 
  331.     SNDMSG((hwndLV), LVM_SETITEMPOSITION32, (WPARAM)(int)(i), (LPARAM)&ptNewPos); 
  332. }
  333. #define LVM_GETSELECTEDCOUNT    (LVM_FIRST + 50)
  334. #define ListView_GetSelectedCount(hwndLV) 
  335.     (UINT)SNDMSG((hwndLV), LVM_GETSELECTEDCOUNT, 0, 0L)
  336. #define LVM_GETITEMSPACING      (LVM_FIRST + 51)
  337. #define ListView_GetItemSpacing(hwndLV, fSmall) 
  338.         (DWORD)SNDMSG((hwndLV), LVM_GETITEMSPACING, fSmall, 0L)
  339. #define LVM_GETISEARCHSTRINGA   (LVM_FIRST + 52)
  340. #define LVM_GETISEARCHSTRINGW   (LVM_FIRST + 117)
  341. #ifdef UNICODE
  342. #define LVM_GETISEARCHSTRING    LVM_GETISEARCHSTRINGW
  343. #else
  344. #define LVM_GETISEARCHSTRING    LVM_GETISEARCHSTRINGA
  345. #endif
  346. #define ListView_GetISearchString(hwndLV, lpsz) 
  347.         (BOOL)SNDMSG((hwndLV), LVM_GETISEARCHSTRING, 0, (LPARAM)(LPTSTR)(lpsz))
  348. #if (_WIN32_IE >= 0x0300)
  349. #define LVM_SETICONSPACING      (LVM_FIRST + 53)
  350. // -1 for cx and cy means we'll use the default (system settings)
  351. // 0 for cx or cy means use the current setting (allows you to change just one param)
  352. #define ListView_SetIconSpacing(hwndLV, cx, cy) 
  353.         (DWORD)SNDMSG((hwndLV), LVM_SETICONSPACING, 0, MAKELONG(cx,cy))
  354. #define LVM_SETEXTENDEDLISTVIEWSTYLE (LVM_FIRST + 54)   // optional wParam == mask
  355. #define ListView_SetExtendedListViewStyle(hwndLV, dw)
  356.         (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dw)
  357. #if (_WIN32_IE >= 0x0400)
  358. #define ListView_SetExtendedListViewStyleEx(hwndLV, dwMask, dw)
  359.         (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, dwMask, dw)
  360. #endif
  361. #define LVM_GETEXTENDEDLISTVIEWSTYLE (LVM_FIRST + 55)
  362. #define ListView_GetExtendedListViewStyle(hwndLV)
  363.         (DWORD)SNDMSG((hwndLV), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)
  364. #define LVS_EX_GRIDLINES        0x00000001
  365. #define LVS_EX_SUBITEMIMAGES    0x00000002
  366. #define LVS_EX_CHECKBOXES       0x00000004
  367. #define LVS_EX_TRACKSELECT      0x00000008
  368. #define LVS_EX_HEADERDRAGDROP   0x00000010
  369. #define LVS_EX_FULLROWSELECT    0x00000020 // applies to report mode only
  370. #define LVS_EX_ONECLICKACTIVATE 0x00000040
  371. #define LVS_EX_TWOCLICKACTIVATE 0x00000080
  372. #if (_WIN32_IE >= 0x0400)
  373. #define LVS_EX_FLATSB           0x00000100
  374. #define LVS_EX_REGIONAL         0x00000200
  375. #define LVS_EX_INFOTIP          0x00000400 // listview does InfoTips for you
  376. #define LVS_EX_UNDERLINEHOT     0x00000800
  377. #define LVS_EX_UNDERLINECOLD    0x00001000
  378. #define LVS_EX_MULTIWORKAREAS   0x00002000
  379. #endif
  380. #if (_WIN32_IE >= 0x0500)
  381. #define LVS_EX_LABELTIP         0x00004000 // listview unfolds partly hidden labels if it does not have infotip text
  382. #define LVS_EX_BORDERSELECT     0x00008000 // border selection style instead of highlight
  383. #endif  // End (_WIN32_IE >= 0x0500)
  384. #if (_WIN32_WINNT >= 0x501)
  385. #define LVS_EX_DOUBLEBUFFER     0x00010000
  386. #define LVS_EX_HIDELABELS       0x00020000
  387. #define LVS_EX_SINGLEROW        0x00040000
  388. #define LVS_EX_SNAPTOGRID       0x00080000  // Icons automatically snap to grid.
  389. #define LVS_EX_SIMPLESELECT     0x00100000  // Also changes overlay rendering to top right for icon mode.
  390. #endif
  391. #define LVM_GETSUBITEMRECT      (LVM_FIRST + 56)
  392. #define ListView_GetSubItemRect(hwnd, iItem, iSubItem, code, prc) 
  393.         (BOOL)SNDMSG((hwnd), LVM_GETSUBITEMRECT, (WPARAM)(int)(iItem), 
  394.                 ((prc) ? ((((LPRECT)(prc))->top = iSubItem), (((LPRECT)(prc))->left = code), (LPARAM)(prc)) : (LPARAM)(LPRECT)NULL))
  395. #define LVM_SUBITEMHITTEST      (LVM_FIRST + 57)
  396. #define ListView_SubItemHitTest(hwnd, plvhti) 
  397.         (int)SNDMSG((hwnd), LVM_SUBITEMHITTEST, 0, (LPARAM)(LPLVHITTESTINFO)(plvhti))
  398. #define LVM_SETCOLUMNORDERARRAY (LVM_FIRST + 58)
  399. #define ListView_SetColumnOrderArray(hwnd, iCount, pi) 
  400.         (BOOL)SNDMSG((hwnd), LVM_SETCOLUMNORDERARRAY, (WPARAM)(iCount), (LPARAM)(LPINT)(pi))
  401. #define LVM_GETCOLUMNORDERARRAY (LVM_FIRST + 59)
  402. #define ListView_GetColumnOrderArray(hwnd, iCount, pi) 
  403.         (BOOL)SNDMSG((hwnd), LVM_GETCOLUMNORDERARRAY, (WPARAM)(iCount), (LPARAM)(LPINT)(pi))
  404. #define LVM_SETHOTITEM  (LVM_FIRST + 60)
  405. #define ListView_SetHotItem(hwnd, i) 
  406.         (int)SNDMSG((hwnd), LVM_SETHOTITEM, (WPARAM)(i), 0)
  407. #define LVM_GETHOTITEM  (LVM_FIRST + 61)
  408. #define ListView_GetHotItem(hwnd) 
  409.         (int)SNDMSG((hwnd), LVM_GETHOTITEM, 0, 0)
  410. #define LVM_SETHOTCURSOR  (LVM_FIRST + 62)
  411. #define ListView_SetHotCursor(hwnd, hcur) 
  412.         (HCURSOR)SNDMSG((hwnd), LVM_SETHOTCURSOR, 0, (LPARAM)(hcur))
  413. #define LVM_GETHOTCURSOR  (LVM_FIRST + 63)
  414. #define ListView_GetHotCursor(hwnd) 
  415.         (HCURSOR)SNDMSG((hwnd), LVM_GETHOTCURSOR, 0, 0)
  416. #define LVM_APPROXIMATEVIEWRECT (LVM_FIRST + 64)
  417. #define ListView_ApproximateViewRect(hwnd, iWidth, iHeight, iCount) 
  418.         (DWORD)SNDMSG((hwnd), LVM_APPROXIMATEVIEWRECT, iCount, MAKELPARAM(iWidth, iHeight))
  419. #endif      // _WIN32_IE >= 0x0300
  420. #if (_WIN32_IE >= 0x0400)
  421. #define LV_MAX_WORKAREAS         16
  422. #define LVM_SETWORKAREAS         (LVM_FIRST + 65)
  423. #define ListView_SetWorkAreas(hwnd, nWorkAreas, prc) 
  424.     (BOOL)SNDMSG((hwnd), LVM_SETWORKAREAS, (WPARAM)(int)(nWorkAreas), (LPARAM)(RECT *)(prc))
  425. #define LVM_GETWORKAREAS        (LVM_FIRST + 70)
  426. #define ListView_GetWorkAreas(hwnd, nWorkAreas, prc) 
  427.     (BOOL)SNDMSG((hwnd), LVM_GETWORKAREAS, (WPARAM)(int)(nWorkAreas), (LPARAM)(RECT *)(prc))
  428. #define LVM_GETNUMBEROFWORKAREAS  (LVM_FIRST + 73)
  429. #define ListView_GetNumberOfWorkAreas(hwnd, pnWorkAreas) 
  430.     (BOOL)SNDMSG((hwnd), LVM_GETNUMBEROFWORKAREAS, 0, (LPARAM)(UINT *)(pnWorkAreas))
  431. #define LVM_GETSELECTIONMARK    (LVM_FIRST + 66)
  432. #define ListView_GetSelectionMark(hwnd) 
  433.     (int)SNDMSG((hwnd), LVM_GETSELECTIONMARK, 0, 0)
  434. #define LVM_SETSELECTIONMARK    (LVM_FIRST + 67)
  435. #define ListView_SetSelectionMark(hwnd, i) 
  436.     (int)SNDMSG((hwnd), LVM_SETSELECTIONMARK, 0, (LPARAM)(i))
  437. #define LVM_SETHOVERTIME        (LVM_FIRST + 71)
  438. #define ListView_SetHoverTime(hwndLV, dwHoverTimeMs)
  439.         (DWORD)SNDMSG((hwndLV), LVM_SETHOVERTIME, 0, (LPARAM)(dwHoverTimeMs))
  440. #define LVM_GETHOVERTIME        (LVM_FIRST + 72)
  441. #define ListView_GetHoverTime(hwndLV)
  442.         (DWORD)SNDMSG((hwndLV), LVM_GETHOVERTIME, 0, 0)
  443. #define LVM_SETTOOLTIPS       (LVM_FIRST + 74)
  444. #define ListView_SetToolTips(hwndLV, hwndNewHwnd)
  445.         (HWND)SNDMSG((hwndLV), LVM_SETTOOLTIPS, (WPARAM)(hwndNewHwnd), 0)
  446. #define LVM_GETTOOLTIPS       (LVM_FIRST + 78)
  447. #define ListView_GetToolTips(hwndLV)
  448.         (HWND)SNDMSG((hwndLV), LVM_GETTOOLTIPS, 0, 0)
  449. #define LVM_SORTITEMSEX          (LVM_FIRST + 81)
  450. #define ListView_SortItemsEx(hwndLV, _pfnCompare, _lPrm) 
  451.   (BOOL)SNDMSG((hwndLV), LVM_SORTITEMSEX, (WPARAM)(LPARAM)(_lPrm), (LPARAM)(PFNLVCOMPARE)(_pfnCompare))
  452. typedef struct tagLVBKIMAGEA
  453. {
  454.     ULONG ulFlags;              // LVBKIF_*
  455.     HBITMAP hbm;
  456.     LPSTR pszImage;
  457.     UINT cchImageMax;
  458.     int xOffsetPercent;
  459.     int yOffsetPercent;
  460. } LVBKIMAGEA, *LPLVBKIMAGEA;
  461. typedef struct tagLVBKIMAGEW
  462. {
  463.     ULONG ulFlags;              // LVBKIF_*
  464.     HBITMAP hbm;
  465.     LPWSTR pszImage;
  466.     UINT cchImageMax;
  467.     int xOffsetPercent;
  468.     int yOffsetPercent;
  469. } LVBKIMAGEW, *LPLVBKIMAGEW;
  470. #define LVBKIF_SOURCE_NONE      0x00000000
  471. #define LVBKIF_SOURCE_HBITMAP   0x00000001
  472. #define LVBKIF_SOURCE_URL       0x00000002
  473. #define LVBKIF_SOURCE_MASK      0x00000003
  474. #define LVBKIF_STYLE_NORMAL     0x00000000
  475. #define LVBKIF_STYLE_TILE       0x00000010
  476. #define LVBKIF_STYLE_MASK       0x00000010
  477. #if (_WIN32_WINNT >= 0x501)
  478. #define LVBKIF_FLAG_TILEOFFSET  0x00000100
  479. #define LVBKIF_TYPE_WATERMARK   0x10000000
  480. #endif
  481. #define LVM_SETBKIMAGEA         (LVM_FIRST + 68)
  482. #define LVM_SETBKIMAGEW         (LVM_FIRST + 138)
  483. #define LVM_GETBKIMAGEA         (LVM_FIRST + 69)
  484. #define LVM_GETBKIMAGEW         (LVM_FIRST + 139)
  485. #if (_WIN32_WINNT >= 0x501)
  486. #define LVM_SETSELECTEDCOLUMN         (LVM_FIRST + 140)
  487. #define ListView_SetSelectedColumn(hwnd, iCol) 
  488.     SNDMSG((hwnd), LVM_SETSELECTEDCOLUMN, (WPARAM)iCol, 0)
  489. #define LVM_SETTILEWIDTH         (LVM_FIRST + 141)
  490. #define ListView_SetTileWidth(hwnd, cpWidth) 
  491.     SNDMSG((hwnd), LVM_SETTILEWIDTH, (WPARAM)cpWidth, 0)
  492. #define LV_VIEW_ICON        0x0000
  493. #define LV_VIEW_DETAILS     0x0001
  494. #define LV_VIEW_SMALLICON   0x0002
  495. #define LV_VIEW_LIST        0x0003
  496. #define LV_VIEW_TILE        0x0004
  497. #define LV_VIEW_MAX         0x0004
  498. #define LVM_SETVIEW         (LVM_FIRST + 142)
  499. #define ListView_SetView(hwnd, iView) 
  500.     (DWORD)SNDMSG((hwnd), LVM_SETVIEW, (WPARAM)(DWORD)iView, 0)
  501. #define LVM_GETVIEW         (LVM_FIRST + 143)
  502. #define ListView_GetView(hwnd) 
  503.     (DWORD)SNDMSG((hwnd), LVM_GETVIEW, 0, 0)
  504. #define LVGF_NONE           0x00000000
  505. #define LVGF_HEADER         0x00000001
  506. #define LVGF_FOOTER         0x00000002
  507. #define LVGF_STATE          0x00000004
  508. #define LVGF_ALIGN          0x00000008
  509. #define LVGF_GROUPID        0x00000010
  510. #define LVGS_NORMAL         0x00000000
  511. #define LVGS_COLLAPSED      0x00000001
  512. #define LVGS_HIDDEN         0x00000002
  513. #define LVGA_HEADER_LEFT    0x00000001
  514. #define LVGA_HEADER_CENTER  0x00000002
  515. #define LVGA_HEADER_RIGHT   0x00000004  // Don't forget to validate exclusivity
  516. #define LVGA_FOOTER_LEFT    0x00000008
  517. #define LVGA_FOOTER_CENTER  0x00000010
  518. #define LVGA_FOOTER_RIGHT   0x00000020  // Don't forget to validate exclusivity
  519. typedef struct tagLVGROUP
  520. {
  521.     UINT    cbSize;
  522.     UINT    mask;
  523.     LPWSTR  pszHeader;
  524.     int     cchHeader;
  525.     LPWSTR  pszFooter;
  526.     int     cchFooter;
  527.     int     iGroupId;
  528.     UINT    stateMask;
  529.     UINT    state;
  530.     UINT    uAlign;
  531. } LVGROUP, *PLVGROUP;
  532. #define LVM_INSERTGROUP         (LVM_FIRST + 145)
  533. #define ListView_InsertGroup(hwnd, index, pgrp) 
  534.     SNDMSG((hwnd), LVM_INSERTGROUP, (WPARAM)index, (LPARAM)pgrp)
  535. #define LVM_SETGROUPINFO         (LVM_FIRST + 147)
  536. #define ListView_SetGroupInfo(hwnd, iGroupId, pgrp) 
  537.     SNDMSG((hwnd), LVM_SETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp)
  538. #define LVM_GETGROUPINFO         (LVM_FIRST + 149)
  539. #define ListView_GetGroupInfo(hwnd, iGroupId, pgrp) 
  540.     SNDMSG((hwnd), LVM_GETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp)
  541. #define LVM_REMOVEGROUP         (LVM_FIRST + 150)
  542. #define ListView_RemoveGroup(hwnd, iGroupId) 
  543.     SNDMSG((hwnd), LVM_REMOVEGROUP, (WPARAM)iGroupId, 0)
  544. #define LVM_MOVEGROUP         (LVM_FIRST + 151)
  545. #define ListView_MoveGroup(hwnd, iGroupId, toIndex) 
  546.     SNDMSG((hwnd), LVM_MOVEGROUP, (WPARAM)iGroupId, (LPARAM)toIndex)
  547. #define LVM_MOVEITEMTOGROUP            (LVM_FIRST + 154)
  548. #define ListView_MoveItemToGroup(hwnd, idItemFrom, idGroupTo) 
  549.     SNDMSG((hwnd), LVM_MOVEITEMTOGROUP, (WPARAM)idItemFrom, (LPARAM)idGroupTo)
  550. #define LVGMF_NONE          0x00000000
  551. #define LVGMF_BORDERSIZE    0x00000001
  552. #define LVGMF_BORDERCOLOR   0x00000002
  553. #define LVGMF_TEXTCOLOR     0x00000004
  554. typedef struct tagLVGROUPMETRICS
  555. {
  556.     UINT cbSize;
  557.     UINT mask;
  558.     UINT Left;
  559.     UINT Top;
  560.     UINT Right;
  561.     UINT Bottom;
  562.     COLORREF crLeft;
  563.     COLORREF crTop;
  564.     COLORREF crRight;
  565.     COLORREF crBottom;
  566.     COLORREF crHeader;
  567.     COLORREF crFooter;
  568. } LVGROUPMETRICS, *PLVGROUPMETRICS;
  569. #define LVM_SETGROUPMETRICS         (LVM_FIRST + 155)
  570. #define ListView_SetGroupMetrics(hwnd, pGroupMetrics) 
  571.     SNDMSG((hwnd), LVM_SETGROUPMETRICS, 0, (LPARAM)pGroupMetrics)
  572. #define LVM_GETGROUPMETRICS         (LVM_FIRST + 156)
  573. #define ListView_GetGroupMetrics(hwnd, pGroupMetrics) 
  574.     SNDMSG((hwnd), LVM_GETGROUPMETRICS, 0, (LPARAM)pGroupMetrics)
  575. #define LVM_ENABLEGROUPVIEW         (LVM_FIRST + 157)
  576. #define ListView_EnableGroupView(hwnd, fEnable) 
  577.     SNDMSG((hwnd), LVM_ENABLEGROUPVIEW, (WPARAM)fEnable, 0)
  578. typedef int (CALLBACK *PFNLVGROUPCOMPARE)(int, int, void *);
  579. #define LVM_SORTGROUPS         (LVM_FIRST + 158)
  580. #define ListView_SortGroups(hwnd, _pfnGroupCompate, _plv) 
  581.     SNDMSG((hwnd), LVM_SORTGROUPS, (WPARAM)_pfnGroupCompate, (LPARAM)_plv)
  582. typedef struct tagLVINSERTGROUPSORTED
  583. {
  584.     PFNLVGROUPCOMPARE pfnGroupCompare;
  585.     void *pvData;
  586.     LVGROUP lvGroup;
  587. }LVINSERTGROUPSORTED, *PLVINSERTGROUPSORTED;
  588. #define LVM_INSERTGROUPSORTED           (LVM_FIRST + 159)
  589. #define ListView_InsertGroupSorted(hwnd, structInsert) 
  590.     SNDMSG((hwnd), LVM_INSERTGROUPSORTED, (WPARAM)structInsert, 0)
  591. #define LVM_REMOVEALLGROUPS             (LVM_FIRST + 160)
  592. #define ListView_RemoveAllGroups(hwnd) 
  593.     SNDMSG((hwnd), LVM_REMOVEALLGROUPS, 0, 0)
  594. #define LVM_HASGROUP                    (LVM_FIRST + 161)
  595. #define ListView_HasGroup(hwnd, dwGroupId) 
  596.     SNDMSG((hwnd), LVM_HASGROUP, dwGroupId, 0)
  597. #define LVTVIF_AUTOSIZE       0x00000000
  598. #define LVTVIF_FIXEDWIDTH     0x00000001
  599. #define LVTVIF_FIXEDHEIGHT    0x00000002
  600. #define LVTVIF_FIXEDSIZE      0x00000003
  601. #define LVTVIM_TILESIZE       0x00000001
  602. #define LVTVIM_COLUMNS        0x00000002
  603. #define LVTVIM_LABELMARGIN    0x00000004
  604. typedef struct tagLVTILEVIEWINFO
  605. {
  606.     UINT cbSize;
  607.     DWORD dwMask;     //LVTVIM_*
  608.     DWORD dwFlags;    //LVTVIF_*
  609.     SIZE sizeTile;
  610.     int cLines;
  611.     RECT rcLabelMargin;
  612. } LVTILEVIEWINFO, *PLVTILEVIEWINFO;
  613. typedef struct tagLVTILEINFO
  614. {
  615.     UINT cbSize;
  616.     int iItem;
  617.     UINT cColumns;
  618.     PUINT puColumns;
  619. } LVTILEINFO, *PLVTILEINFO;
  620. #define LVM_SETTILEVIEWINFO                 (LVM_FIRST + 162)
  621. #define ListView_SetTileViewInfo(hwnd, ptvi) 
  622.     SNDMSG((hwnd), LVM_SETTILEVIEWINFO, 0, (LPARAM)ptvi)
  623. #define LVM_GETTILEVIEWINFO                 (LVM_FIRST + 163)
  624. #define ListView_GetTileViewInfo(hwnd, ptvi) 
  625.     SNDMSG((hwnd), LVM_GETTILEVIEWINFO, 0, (LPARAM)ptvi)
  626. #define LVM_SETTILEINFO                     (LVM_FIRST + 164)
  627. #define ListView_SetTileInfo(hwnd, pti) 
  628.     SNDMSG((hwnd), LVM_SETTILEINFO, 0, (LPARAM)pti)
  629. #define LVM_GETTILEINFO                     (LVM_FIRST + 165)
  630. #define ListView_GetTileInfo(hwnd, pti) 
  631.     SNDMSG((hwnd), LVM_GETTILEINFO, 0, (LPARAM)pti)
  632. typedef struct 
  633. {
  634.     UINT cbSize;
  635.     DWORD dwFlags;
  636.     int iItem;
  637.     DWORD dwReserved;
  638. } LVINSERTMARK, * LPLVINSERTMARK;
  639. #define LVIM_AFTER      0x00000001 // TRUE = insert After iItem, otherwise before
  640. #define LVM_SETINSERTMARK                   (LVM_FIRST + 166)
  641. #define ListView_SetInsertMark(hwnd, lvim) 
  642.     (BOOL)SNDMSG((hwnd), LVM_SETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim))
  643. #define LVM_GETINSERTMARK                   (LVM_FIRST + 167)
  644. #define ListView_GetInsertMark(hwnd, lvim) 
  645.     (BOOL)SNDMSG((hwnd), LVM_GETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim))
  646. #define LVM_INSERTMARKHITTEST               (LVM_FIRST + 168)
  647. #define ListView_InsertMarkHitTest(hwnd, point, lvim) 
  648.     (int)SNDMSG((hwnd), LVM_INSERTMARKHITTEST, (WPARAM)(LPPOINT)(point), (LPARAM)(LPLVINSERTMARK)(lvim))
  649. #define LVM_GETINSERTMARKRECT               (LVM_FIRST + 169)
  650. #define ListView_GetInsertMarkRect(hwnd, rc) 
  651.     (int)SNDMSG((hwnd), LVM_GETINSERTMARKRECT, (WPARAM)0, (LPARAM)(LPRECT)(rc))
  652. #define LVM_SETINSERTMARKCOLOR                 (LVM_FIRST + 170)
  653. #define ListView_SetInsertMarkColor(hwnd, color) 
  654.     (COLORREF)SNDMSG((hwnd), LVM_SETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color))
  655. #define LVM_GETINSERTMARKCOLOR                 (LVM_FIRST + 171)
  656. #define ListView_GetInsertMarkColor(hwnd) 
  657.     (COLORREF)SNDMSG((hwnd), LVM_GETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)0)
  658. typedef struct tagLVSETINFOTIP
  659. {
  660.     UINT cbSize;
  661.     DWORD dwFlags;
  662.     LPWSTR pszText;
  663.     int iItem;
  664.     int iSubItem;
  665. } LVSETINFOTIP, *PLVSETINFOTIP;
  666. #define  LVM_SETINFOTIP         (LVM_FIRST + 173)
  667. #define ListView_SetInfoTip(hwndLV, plvInfoTip)
  668.         (BOOL)SNDMSG((hwndLV), LVM_SETINFOTIP, (WPARAM)0, (LPARAM)plvInfoTip)
  669. #define LVM_GETSELECTEDCOLUMN   (LVM_FIRST + 174)
  670. #define ListView_GetSelectedColumn(hwnd) 
  671.     (UINT)SNDMSG((hwnd), LVM_GETSELECTEDCOLUMN, 0, 0)
  672. #define LVM_ISGROUPVIEWENABLED  (LVM_FIRST + 175)
  673. #define ListView_IsGroupViewEnabled(hwnd) 
  674.     (BOOL)SNDMSG((hwnd), LVM_ISGROUPVIEWENABLED, 0, 0)
  675. #define LVM_GETOUTLINECOLOR     (LVM_FIRST + 176)
  676. #define ListView_GetOutlineColor(hwnd) 
  677.     (COLORREF)SNDMSG((hwnd), LVM_GETOUTLINECOLOR, 0, 0)
  678. #define LVM_SETOUTLINECOLOR     (LVM_FIRST + 177)
  679. #define ListView_SetOutlineColor(hwnd, color) 
  680.     (COLORREF)SNDMSG((hwnd), LVM_SETOUTLINECOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color))
  681. #define LVM_CANCELEDITLABEL     (LVM_FIRST + 179)
  682. #define ListView_CancelEditLabel(hwnd) 
  683.     (VOID)SNDMSG((hwnd), LVM_CANCELEDITLABEL, (WPARAM)0, (LPARAM)0)
  684. // These next to methods make it easy to identify an item that can be repositioned
  685. // within listview. For example: Many developers use the lParam to store an identifier that is
  686. // unique. Unfortunatly, in order to find this item, they have to iterate through all of the items
  687. // in the listview. Listview will maintain a unique identifier.  The upper bound is the size of a DWORD.
  688. #define LVM_MAPINDEXTOID     (LVM_FIRST + 180)
  689. #define ListView_MapIndexToID(hwnd, index) 
  690.     (UINT)SNDMSG((hwnd), LVM_MAPINDEXTOID, (WPARAM)index, (LPARAM)0)
  691. #define LVM_MAPIDTOINDEX     (LVM_FIRST + 181)
  692. #define ListView_MapIDToIndex(hwnd, id) 
  693.     (UINT)SNDMSG((hwnd), LVM_MAPIDTOINDEX, (WPARAM)id, (LPARAM)0)
  694. #endif
  695. #ifdef UNICODE
  696. #define LVBKIMAGE               LVBKIMAGEW
  697. #define LPLVBKIMAGE             LPLVBKIMAGEW
  698. #define LVM_SETBKIMAGE          LVM_SETBKIMAGEW
  699. #define LVM_GETBKIMAGE          LVM_GETBKIMAGEW
  700. #else
  701. #define LVBKIMAGE               LVBKIMAGEA
  702. #define LPLVBKIMAGE             LPLVBKIMAGEA
  703. #define LVM_SETBKIMAGE          LVM_SETBKIMAGEA
  704. #define LVM_GETBKIMAGE          LVM_GETBKIMAGEA
  705. #endif
  706. #define ListView_SetBkImage(hwnd, plvbki) 
  707.     (BOOL)SNDMSG((hwnd), LVM_SETBKIMAGE, 0, (LPARAM)(plvbki))
  708. #define ListView_GetBkImage(hwnd, plvbki) 
  709.     (BOOL)SNDMSG((hwnd), LVM_GETBKIMAGE, 0, (LPARAM)(plvbki))
  710. #endif      // _WIN32_IE >= 0x0400
  711. #if (_WIN32_IE >= 0x0300)
  712. #define LPNM_LISTVIEW   LPNMLISTVIEW
  713. #define NM_LISTVIEW     NMLISTVIEW
  714. #else
  715. #define tagNMLISTVIEW   _NM_LISTVIEW
  716. #define    NMLISTVIEW    NM_LISTVIEW
  717. #define  LPNMLISTVIEW  LPNM_LISTVIEW
  718. #endif
  719. typedef struct tagNMLISTVIEW
  720. {
  721.     NMHDR   hdr;
  722.     int     iItem;
  723.     int     iSubItem;
  724.     UINT    uNewState;
  725.     UINT    uOldState;
  726.     UINT    uChanged;
  727.     POINT   ptAction;
  728.     LPARAM  lParam;
  729. } NMLISTVIEW, *LPNMLISTVIEW;
  730. #if (_WIN32_IE >= 0x400)
  731. // NMITEMACTIVATE is used instead of NMLISTVIEW in IE >= 0x400
  732. // therefore all the fields are the same except for extra uKeyFlags
  733. // they are used to store key flags at the time of the single click with
  734. // delayed activation - because by the time the timer goes off a user may
  735. // not hold the keys (shift, ctrl) any more
  736. typedef struct tagNMITEMACTIVATE
  737. {
  738.     NMHDR   hdr;
  739.     int     iItem;
  740.     int     iSubItem;
  741.     UINT    uNewState;
  742.     UINT    uOldState;
  743.     UINT    uChanged;
  744.     POINT   ptAction;
  745.     LPARAM  lParam;
  746.     UINT    uKeyFlags;
  747. } NMITEMACTIVATE, *LPNMITEMACTIVATE;
  748. // key flags stored in uKeyFlags
  749. #define LVKF_ALT       0x0001
  750. #define LVKF_CONTROL   0x0002
  751. #define LVKF_SHIFT     0x0004
  752. #endif //(_WIN32_IE >= 0x0400)
  753. #if (_WIN32_IE >= 0x0300)
  754. #define NMLVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMLVCUSTOMDRW, clrTextBk)
  755. typedef struct tagNMLVCUSTOMDRAW
  756. {
  757.     NMCUSTOMDRAW nmcd;
  758.     COLORREF clrText;
  759.     COLORREF clrTextBk;
  760. #if (_WIN32_IE >= 0x0400)
  761.     int iSubItem;
  762. #endif
  763. #if (_WIN32_WINNT >= 0x501)
  764.     DWORD dwItemType;
  765.     // Item custom draw
  766.     COLORREF clrFace;
  767.     int iIconEffect;
  768.     int iIconPhase;
  769.     int iPartId;
  770.     int iStateId;
  771.     // Group Custom Draw
  772.     RECT rcText;
  773.     UINT uAlign;      // Alignment. Use LVGA_HEADER_CENTER, LVGA_HEADER_RIGHT, LVGA_HEADER_LEFT
  774. #endif
  775. } NMLVCUSTOMDRAW, *LPNMLVCUSTOMDRAW;
  776. // dwItemType
  777. #define LVCDI_ITEM      0x00000000
  778. #define LVCDI_GROUP     0x00000001
  779. // ListView custom draw return values
  780. #define LVCDRF_NOSELECT             0x00010000
  781. #define LVCDRF_NOGROUPFRAME         0x00020000  
  782. typedef struct tagNMLVCACHEHINT
  783. {
  784.     NMHDR   hdr;
  785.     int     iFrom;
  786.     int     iTo;
  787. } NMLVCACHEHINT, *LPNMLVCACHEHINT;
  788. #define LPNM_CACHEHINT  LPNMLVCACHEHINT
  789. #define PNM_CACHEHINT   LPNMLVCACHEHINT
  790. #define NM_CACHEHINT    NMLVCACHEHINT
  791. typedef struct tagNMLVFINDITEMA
  792. {
  793.     NMHDR   hdr;
  794.     int     iStart;
  795.     LVFINDINFOA lvfi;
  796. } NMLVFINDITEMA, *LPNMLVFINDITEMA;
  797. typedef struct tagNMLVFINDITEMW
  798. {
  799.     NMHDR   hdr;
  800.     int     iStart;
  801.     LVFINDINFOW lvfi;
  802. } NMLVFINDITEMW, *LPNMLVFINDITEMW;
  803. #define PNM_FINDITEMA   LPNMLVFINDITEMA
  804. #define LPNM_FINDITEMA  LPNMLVFINDITEMA
  805. #define NM_FINDITEMA    NMLVFINDITEMA
  806. #define PNM_FINDITEMW   LPNMLVFINDITEMW
  807. #define LPNM_FINDITEMW  LPNMLVFINDITEMW
  808. #define NM_FINDITEMW    NMLVFINDITEMW
  809. #ifdef UNICODE
  810. #define PNM_FINDITEM    PNM_FINDITEMW
  811. #define LPNM_FINDITEM   LPNM_FINDITEMW
  812. #define NM_FINDITEM     NM_FINDITEMW
  813. #define NMLVFINDITEM    NMLVFINDITEMW
  814. #define LPNMLVFINDITEM  LPNMLVFINDITEMW
  815. #else
  816. #define PNM_FINDITEM    PNM_FINDITEMA
  817. #define LPNM_FINDITEM   LPNM_FINDITEMA
  818. #define NM_FINDITEM     NM_FINDITEMA
  819. #define NMLVFINDITEM    NMLVFINDITEMA
  820. #define LPNMLVFINDITEM  LPNMLVFINDITEMA
  821. #endif
  822. typedef struct tagNMLVODSTATECHANGE
  823. {
  824.     NMHDR hdr;
  825.     int iFrom;
  826.     int iTo;
  827.     UINT uNewState;
  828.     UINT uOldState;
  829. } NMLVODSTATECHANGE, *LPNMLVODSTATECHANGE;
  830. #define PNM_ODSTATECHANGE   LPNMLVODSTATECHANGE
  831. #define LPNM_ODSTATECHANGE  LPNMLVODSTATECHANGE
  832. #define NM_ODSTATECHANGE    NMLVODSTATECHANGE
  833. #endif      // _WIN32_IE >= 0x0300
  834. #define LVN_ITEMCHANGING        (LVN_FIRST-0)
  835. #define LVN_ITEMCHANGED         (LVN_FIRST-1)
  836. #define LVN_INSERTITEM          (LVN_FIRST-2)
  837. #define LVN_DELETEITEM          (LVN_FIRST-3)
  838. #define LVN_DELETEALLITEMS      (LVN_FIRST-4)
  839. #define LVN_BEGINLABELEDITA     (LVN_FIRST-5)
  840. #define LVN_BEGINLABELEDITW     (LVN_FIRST-75)
  841. #define LVN_ENDLABELEDITA       (LVN_FIRST-6)
  842. #define LVN_ENDLABELEDITW       (LVN_FIRST-76)
  843. #define LVN_COLUMNCLICK         (LVN_FIRST-8)
  844. #define LVN_BEGINDRAG           (LVN_FIRST-9)
  845. #define LVN_BEGINRDRAG          (LVN_FIRST-11)
  846. #if (_WIN32_IE >= 0x0300)
  847. #define LVN_ODCACHEHINT         (LVN_FIRST-13)
  848. #define LVN_ODFINDITEMA         (LVN_FIRST-52)
  849. #define LVN_ODFINDITEMW         (LVN_FIRST-79)
  850. #define LVN_ITEMACTIVATE        (LVN_FIRST-14)
  851. #define LVN_ODSTATECHANGED      (LVN_FIRST-15)
  852. #ifdef UNICODE
  853. #define LVN_ODFINDITEM          LVN_ODFINDITEMW
  854. #else
  855. #define LVN_ODFINDITEM          LVN_ODFINDITEMA
  856. #endif
  857. #endif      // _WIN32_IE >= 0x0300
  858. #if (_WIN32_IE >= 0x0400)
  859. #define LVN_HOTTRACK            (LVN_FIRST-21)
  860. #endif
  861. #define LVN_GETDISPINFOA        (LVN_FIRST-50)
  862. #define LVN_GETDISPINFOW        (LVN_FIRST-77)
  863. #define LVN_SETDISPINFOA        (LVN_FIRST-51)
  864. #define LVN_SETDISPINFOW        (LVN_FIRST-78)
  865. #ifdef UNICODE
  866. #define LVN_BEGINLABELEDIT      LVN_BEGINLABELEDITW
  867. #define LVN_ENDLABELEDIT        LVN_ENDLABELEDITW
  868. #define LVN_GETDISPINFO         LVN_GETDISPINFOW
  869. #define LVN_SETDISPINFO         LVN_SETDISPINFOW
  870. #else
  871. #define LVN_BEGINLABELEDIT      LVN_BEGINLABELEDITA
  872. #define LVN_ENDLABELEDIT        LVN_ENDLABELEDITA
  873. #define LVN_GETDISPINFO         LVN_GETDISPINFOA
  874. #define LVN_SETDISPINFO         LVN_SETDISPINFOA
  875. #endif
  876. #define LVIF_DI_SETITEM         0x1000
  877. #if (_WIN32_IE >= 0x0300)
  878. #define LV_DISPINFOA    NMLVDISPINFOA
  879. #define LV_DISPINFOW    NMLVDISPINFOW
  880. #else
  881. #define tagLVDISPINFO   _LV_DISPINFO
  882. #define NMLVDISPINFOA    LV_DISPINFOA
  883. #define tagLVDISPINFOW  _LV_DISPINFOW
  884. #define NMLVDISPINFOW    LV_DISPINFOW
  885. #endif
  886. #define LV_DISPINFO     NMLVDISPINFO
  887. typedef struct tagLVDISPINFO {
  888.     NMHDR hdr;
  889.     LVITEMA item;
  890. } NMLVDISPINFOA, *LPNMLVDISPINFOA;
  891. typedef struct tagLVDISPINFOW {
  892.     NMHDR hdr;
  893.     LVITEMW item;
  894. } NMLVDISPINFOW, *LPNMLVDISPINFOW;
  895. #ifdef UNICODE
  896. #define  NMLVDISPINFO           NMLVDISPINFOW
  897. #else
  898. #define  NMLVDISPINFO           NMLVDISPINFOA
  899. #endif
  900. #define LVN_KEYDOWN             (LVN_FIRST-55)
  901. #if (_WIN32_IE >= 0x0300)
  902. #define LV_KEYDOWN              NMLVKEYDOWN
  903. #else
  904. #define tagLVKEYDOWN            _LV_KEYDOWN
  905. #define NMLVKEYDOWN              LV_KEYDOWN
  906. #endif
  907. #ifdef _WIN32
  908. #include <pshpack1.h>
  909. #endif
  910. typedef struct tagLVKEYDOWN
  911. {
  912.     NMHDR hdr;
  913.     WORD wVKey;
  914.     UINT flags;
  915. } NMLVKEYDOWN, *LPNMLVKEYDOWN;
  916. #ifdef _WIN32
  917. #include <poppack.h>
  918. #endif
  919. #if (_WIN32_IE >= 0x0300)
  920. #define LVN_MARQUEEBEGIN        (LVN_FIRST-56)
  921. #endif
  922. #if (_WIN32_IE >= 0x0400)
  923. typedef struct tagNMLVGETINFOTIPA
  924. {
  925.     NMHDR hdr;
  926.     DWORD dwFlags;
  927.     LPSTR pszText;
  928.     int cchTextMax;
  929.     int iItem;
  930.     int iSubItem;
  931.     LPARAM lParam;
  932. } NMLVGETINFOTIPA, *LPNMLVGETINFOTIPA;
  933. typedef struct tagNMLVGETINFOTIPW
  934. {
  935.     NMHDR hdr;
  936.     DWORD dwFlags;
  937.     LPWSTR pszText;
  938.     int cchTextMax;
  939.     int iItem;
  940.     int iSubItem;
  941.     LPARAM lParam;
  942. } NMLVGETINFOTIPW, *LPNMLVGETINFOTIPW;
  943. // NMLVGETINFOTIPA.dwFlag values
  944. #define LVGIT_UNFOLDED  0x0001
  945. #define LVN_GETINFOTIPA          (LVN_FIRST-57)
  946. #define LVN_GETINFOTIPW          (LVN_FIRST-58)
  947. #ifdef UNICODE
  948. #define LVN_GETINFOTIP          LVN_GETINFOTIPW
  949. #define NMLVGETINFOTIP          NMLVGETINFOTIPW
  950. #define LPNMLVGETINFOTIP        LPNMLVGETINFOTIPW
  951. #else
  952. #define LVN_GETINFOTIP          LVN_GETINFOTIPA
  953. #define NMLVGETINFOTIP          NMLVGETINFOTIPA
  954. #define LPNMLVGETINFOTIP        LPNMLVGETINFOTIPA
  955. #endif
  956. #endif      // _WIN32_IE >= 0x0400
  957. #if (_WIN32_WINNT >= 0x501)
  958. typedef struct tagNMLVSCROLL
  959. {
  960.     NMHDR   hdr;
  961.     int     dx;
  962.     int     dy;
  963. } NMLVSCROLL, *LPNMLVSCROLL;
  964. #define LVN_BEGINSCROLL          (LVN_FIRST-80)          
  965. #define LVN_ENDSCROLL            (LVN_FIRST-81)
  966. #endif
  967. #endif // NOLISTVIEW
  968. //====== TREEVIEW CONTROL =====================================================
  969. #ifndef NOTREEVIEW
  970. #ifdef _WIN32
  971. #define WC_TREEVIEWA            "SysTreeView32"
  972. #define WC_TREEVIEWW            L"SysTreeView32"
  973. #ifdef UNICODE
  974. #define  WC_TREEVIEW            WC_TREEVIEWW
  975. #else
  976. #define  WC_TREEVIEW            WC_TREEVIEWA
  977. #endif
  978. #else
  979. #define WC_TREEVIEW             "SysTreeView"
  980. #endif
  981. // begin_r_commctrl
  982. #define TVS_HASBUTTONS          0x0001
  983. #define TVS_HASLINES            0x0002
  984. #define TVS_LINESATROOT         0x0004
  985. #define TVS_EDITLABELS          0x0008
  986. #define TVS_DISABLEDRAGDROP     0x0010
  987. #define TVS_SHOWSELALWAYS       0x0020
  988. #if (_WIN32_IE >= 0x0300)
  989. #define TVS_RTLREADING          0x0040
  990. #define TVS_NOTOOLTIPS          0x0080
  991. #define TVS_CHECKBOXES          0x0100
  992. #define TVS_TRACKSELECT         0x0200
  993. #if (_WIN32_IE >= 0x0400)
  994. #define TVS_SINGLEEXPAND        0x0400
  995. #define TVS_INFOTIP             0x0800
  996. #define TVS_FULLROWSELECT       0x1000
  997. #define TVS_NOSCROLL            0x2000
  998. #define TVS_NONEVENHEIGHT       0x4000
  999. #endif
  1000. #if (_WIN32_IE >= 0x500)
  1001. #define TVS_NOHSCROLL           0x8000  // TVS_NOSCROLL overrides this
  1002. #endif
  1003. #endif
  1004. // end_r_commctrl
  1005. typedef struct _TREEITEM *HTREEITEM;
  1006. #define TVIF_TEXT               0x0001
  1007. #define TVIF_IMAGE              0x0002
  1008. #define TVIF_PARAM              0x0004
  1009. #define TVIF_STATE              0x0008
  1010. #define TVIF_HANDLE             0x0010
  1011. #define TVIF_SELECTEDIMAGE      0x0020
  1012. #define TVIF_CHILDREN           0x0040
  1013. #if (_WIN32_IE >= 0x0400)
  1014. #define TVIF_INTEGRAL           0x0080
  1015. #endif
  1016. #define TVIS_SELECTED           0x0002
  1017. #define TVIS_CUT                0x0004
  1018. #define TVIS_DROPHILITED        0x0008
  1019. #define TVIS_BOLD               0x0010
  1020. #define TVIS_EXPANDED           0x0020
  1021. #define TVIS_EXPANDEDONCE       0x0040
  1022. #if (_WIN32_IE >= 0x0300)
  1023. #define TVIS_EXPANDPARTIAL      0x0080
  1024. #endif
  1025. #define TVIS_OVERLAYMASK        0x0F00
  1026. #define TVIS_STATEIMAGEMASK     0xF000
  1027. #define TVIS_USERMASK           0xF000
  1028. #define I_CHILDRENCALLBACK  (-1)
  1029. #if (_WIN32_IE >= 0x0300)
  1030. #define LPTV_ITEMW              LPTVITEMW
  1031. #define LPTV_ITEMA              LPTVITEMA
  1032. #define TV_ITEMW                TVITEMW
  1033. #define TV_ITEMA                TVITEMA
  1034. #else
  1035. #define tagTVITEMA             _TV_ITEMA
  1036. #define    TVITEMA              TV_ITEMA
  1037. #define  LPTVITEMA            LPTV_ITEMA
  1038. #define tagTVITEMW             _TV_ITEMW
  1039. #define    TVITEMW              TV_ITEMW
  1040. #define  LPTVITEMW            LPTV_ITEMW
  1041. #endif
  1042. #define LPTV_ITEM               LPTVITEM
  1043. #define TV_ITEM                 TVITEM
  1044. typedef struct tagTVITEMA {
  1045.     UINT      mask;
  1046.     HTREEITEM hItem;
  1047.     UINT      state;
  1048.     UINT      stateMask;
  1049.     LPSTR     pszText;
  1050.     int       cchTextMax;
  1051.     int       iImage;
  1052.     int       iSelectedImage;
  1053.     int       cChildren;
  1054.     LPARAM    lParam;
  1055. } TVITEMA, *LPTVITEMA;
  1056. typedef struct tagTVITEMW {
  1057.     UINT      mask;
  1058.     HTREEITEM hItem;
  1059.     UINT      state;
  1060.     UINT      stateMask;
  1061.     LPWSTR    pszText;
  1062.     int       cchTextMax;
  1063.     int       iImage;
  1064.     int       iSelectedImage;
  1065.     int       cChildren;
  1066.     LPARAM    lParam;
  1067. } TVITEMW, *LPTVITEMW;
  1068. #if (_WIN32_IE >= 0x0400)
  1069. // only used for Get and Set messages.  no notifies
  1070. typedef struct tagTVITEMEXA {
  1071.     UINT      mask;
  1072.     HTREEITEM hItem;
  1073.     UINT      state;
  1074.     UINT      stateMask;
  1075.     LPSTR     pszText;
  1076.     int       cchTextMax;
  1077.     int       iImage;
  1078.     int       iSelectedImage;
  1079.     int       cChildren;
  1080.     LPARAM    lParam;
  1081.     int       iIntegral;
  1082. } TVITEMEXA, *LPTVITEMEXA;
  1083. // only used for Get and Set messages.  no notifies
  1084. typedef struct tagTVITEMEXW {
  1085.     UINT      mask;
  1086.     HTREEITEM hItem;
  1087.     UINT      state;
  1088.     UINT      stateMask;
  1089.     LPWSTR    pszText;
  1090.     int       cchTextMax;
  1091.     int       iImage;
  1092.     int       iSelectedImage;
  1093.     int       cChildren;
  1094.     LPARAM    lParam;
  1095.     int       iIntegral;
  1096. } TVITEMEXW, *LPTVITEMEXW;
  1097. #ifdef UNICODE
  1098. typedef TVITEMEXW TVITEMEX;
  1099. typedef LPTVITEMEXW LPTVITEMEX;
  1100. #else
  1101. typedef TVITEMEXA TVITEMEX;
  1102. typedef LPTVITEMEXA LPTVITEMEX;
  1103. #endif // UNICODE
  1104. #endif
  1105. #ifdef UNICODE
  1106. #define  TVITEM                 TVITEMW
  1107. #define  LPTVITEM               LPTVITEMW
  1108. #else
  1109. #define  TVITEM                 TVITEMA
  1110. #define  LPTVITEM               LPTVITEMA
  1111. #endif
  1112. #define TVI_ROOT                ((HTREEITEM)(ULONG_PTR)-0x10000)
  1113. #define TVI_FIRST               ((HTREEITEM)(ULONG_PTR)-0x0FFFF)
  1114. #define TVI_LAST                ((HTREEITEM)(ULONG_PTR)-0x0FFFE)
  1115. #define TVI_SORT                ((HTREEITEM)(ULONG_PTR)-0x0FFFD)
  1116. #if (_WIN32_IE >= 0x0300)
  1117. #define LPTV_INSERTSTRUCTA      LPTVINSERTSTRUCTA
  1118. #define LPTV_INSERTSTRUCTW      LPTVINSERTSTRUCTW
  1119. #define TV_INSERTSTRUCTA        TVINSERTSTRUCTA
  1120. #define TV_INSERTSTRUCTW        TVINSERTSTRUCTW
  1121. #else
  1122. #define tagTVINSERTSTRUCTA     _TV_INSERTSTRUCTA
  1123. #define    TVINSERTSTRUCTA      TV_INSERTSTRUCTA
  1124. #define  LPTVINSERTSTRUCTA    LPTV_INSERTSTRUCTA
  1125. #define tagTVINSERTSTRUCTW     _TV_INSERTSTRUCTW
  1126. #define    TVINSERTSTRUCTW      TV_INSERTSTRUCTW
  1127. #define  LPTVINSERTSTRUCTW    LPTV_INSERTSTRUCTW
  1128. #endif
  1129. #define TV_INSERTSTRUCT         TVINSERTSTRUCT
  1130. #define LPTV_INSERTSTRUCT       LPTVINSERTSTRUCT
  1131. #define TVINSERTSTRUCTA_V1_SIZE CCSIZEOF_STRUCT(TVINSERTSTRUCTA, item)
  1132. #define TVINSERTSTRUCTW_V1_SIZE CCSIZEOF_STRUCT(TVINSERTSTRUCTW, item)
  1133. typedef struct tagTVINSERTSTRUCTA {
  1134.     HTREEITEM hParent;
  1135.     HTREEITEM hInsertAfter;
  1136. #if (_WIN32_IE >= 0x0400)
  1137.     union
  1138.     {
  1139.         TVITEMEXA itemex;
  1140.         TV_ITEMA  item;
  1141.     } DUMMYUNIONNAME;
  1142. #else
  1143.     TV_ITEMA item;
  1144. #endif
  1145. } TVINSERTSTRUCTA, *LPTVINSERTSTRUCTA;
  1146. typedef struct tagTVINSERTSTRUCTW {
  1147.     HTREEITEM hParent;
  1148.     HTREEITEM hInsertAfter;
  1149. #if (_WIN32_IE >= 0x0400)
  1150.     union
  1151.     {
  1152.         TVITEMEXW itemex;
  1153.         TV_ITEMW  item;
  1154.     } DUMMYUNIONNAME;
  1155. #else
  1156.     TV_ITEMW item;
  1157. #endif
  1158. } TVINSERTSTRUCTW, *LPTVINSERTSTRUCTW;
  1159. #ifdef UNICODE
  1160. #define  TVINSERTSTRUCT         TVINSERTSTRUCTW
  1161. #define  LPTVINSERTSTRUCT       LPTVINSERTSTRUCTW
  1162. #define TVINSERTSTRUCT_V1_SIZE TVINSERTSTRUCTW_V1_SIZE
  1163. #else
  1164. #define  TVINSERTSTRUCT         TVINSERTSTRUCTA
  1165. #define  LPTVINSERTSTRUCT       LPTVINSERTSTRUCTA
  1166. #define TVINSERTSTRUCT_V1_SIZE TVINSERTSTRUCTA_V1_SIZE
  1167. #endif
  1168. #define TVM_INSERTITEMA         (TV_FIRST + 0)
  1169. #define TVM_INSERTITEMW         (TV_FIRST + 50)
  1170. #ifdef UNICODE
  1171. #define  TVM_INSERTITEM         TVM_INSERTITEMW
  1172. #else
  1173. #define  TVM_INSERTITEM         TVM_INSERTITEMA
  1174. #endif
  1175. #define TreeView_InsertItem(hwnd, lpis) 
  1176.     (HTREEITEM)SNDMSG((hwnd), TVM_INSERTITEM, 0, (LPARAM)(LPTV_INSERTSTRUCT)(lpis))
  1177. #define TVM_DELETEITEM          (TV_FIRST + 1)
  1178. #define TreeView_DeleteItem(hwnd, hitem) 
  1179.     (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hitem))
  1180. #define TreeView_DeleteAllItems(hwnd) 
  1181.     (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT)
  1182. #define TVM_EXPAND              (TV_FIRST + 2)
  1183. #define TreeView_Expand(hwnd, hitem, code) 
  1184.     (BOOL)SNDMSG((hwnd), TVM_EXPAND, (WPARAM)(code), (LPARAM)(HTREEITEM)(hitem))
  1185. #define TVE_COLLAPSE            0x0001
  1186. #define TVE_EXPAND              0x0002
  1187. #define TVE_TOGGLE              0x0003
  1188. #if (_WIN32_IE >= 0x0300)
  1189. #define TVE_EXPANDPARTIAL       0x4000
  1190. #endif
  1191. #define TVE_COLLAPSERESET       0x8000
  1192. #define TVM_GETITEMRECT         (TV_FIRST + 4)
  1193. #define TreeView_GetItemRect(hwnd, hitem, prc, code) 
  1194.     (*(HTREEITEM *)prc = (hitem), (BOOL)SNDMSG((hwnd), TVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT *)(prc)))
  1195. #define TVM_GETCOUNT            (TV_FIRST + 5)
  1196. #define TreeView_GetCount(hwnd) 
  1197.     (UINT)SNDMSG((hwnd), TVM_GETCOUNT, 0, 0)
  1198. #define TVM_GETINDENT           (TV_FIRST + 6)
  1199. #define TreeView_GetIndent(hwnd) 
  1200.     (UINT)SNDMSG((hwnd), TVM_GETINDENT, 0, 0)
  1201. #define TVM_SETINDENT           (TV_FIRST + 7)
  1202. #define TreeView_SetIndent(hwnd, indent) 
  1203.     (BOOL)SNDMSG((hwnd), TVM_SETINDENT, (WPARAM)(indent), 0)
  1204. #define TVM_GETIMAGELIST        (TV_FIRST + 8)
  1205. #define TreeView_GetImageList(hwnd, iImage) 
  1206.     (HIMAGELIST)SNDMSG((hwnd), TVM_GETIMAGELIST, iImage, 0)
  1207. #define TVSIL_NORMAL            0
  1208. #define TVSIL_STATE             2
  1209. #define TVM_SETIMAGELIST        (TV_FIRST + 9)
  1210. #define TreeView_SetImageList(hwnd, himl, iImage) 
  1211.     (HIMAGELIST)SNDMSG((hwnd), TVM_SETIMAGELIST, iImage, (LPARAM)(HIMAGELIST)(himl))
  1212. #define TVM_GETNEXTITEM         (TV_FIRST + 10)
  1213. #define TreeView_GetNextItem(hwnd, hitem, code) 
  1214.     (HTREEITEM)SNDMSG((hwnd), TVM_GETNEXTITEM, (WPARAM)(code), (LPARAM)(HTREEITEM)(hitem))
  1215. #define TVGN_ROOT               0x0000
  1216. #define TVGN_NEXT               0x0001
  1217. #define TVGN_PREVIOUS           0x0002
  1218. #define TVGN_PARENT             0x0003
  1219. #define TVGN_CHILD              0x0004
  1220. #define TVGN_FIRSTVISIBLE       0x0005
  1221. #define TVGN_NEXTVISIBLE        0x0006
  1222. #define TVGN_PREVIOUSVISIBLE    0x0007
  1223. #define TVGN_DROPHILITE         0x0008
  1224. #define TVGN_CARET              0x0009
  1225. #if (_WIN32_IE >= 0x0400)
  1226. #define TVGN_LASTVISIBLE        0x000A
  1227. #endif      // _WIN32_IE >= 0x0400
  1228. #if (_WIN32_WINNT >= 0x501)
  1229. #define TVSI_NOSINGLEEXPAND    0x8000 // Should not conflict with TVGN flags.
  1230. #endif
  1231. #define TreeView_GetChild(hwnd, hitem)          TreeView_GetNextItem(hwnd, hitem, TVGN_CHILD)
  1232. #define TreeView_GetNextSibling(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT)
  1233. #define TreeView_GetPrevSibling(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUS)
  1234. #define TreeView_GetParent(hwnd, hitem)         TreeView_GetNextItem(hwnd, hitem, TVGN_PARENT)
  1235. #define TreeView_GetFirstVisible(hwnd)          TreeView_GetNextItem(hwnd, NULL,  TVGN_FIRSTVISIBLE)
  1236. #define TreeView_GetNextVisible(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE)
  1237. #define TreeView_GetPrevVisible(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE)
  1238. #define TreeView_GetSelection(hwnd)             TreeView_GetNextItem(hwnd, NULL,  TVGN_CARET)
  1239. #define TreeView_GetDropHilight(hwnd)           TreeView_GetNextItem(hwnd, NULL,  TVGN_DROPHILITE)
  1240. #define TreeView_GetRoot(hwnd)                  TreeView_GetNextItem(hwnd, NULL,  TVGN_ROOT)
  1241. #if (_WIN32_IE >= 0x0400)
  1242. #define TreeView_GetLastVisible(hwnd)          TreeView_GetNextItem(hwnd, NULL,  TVGN_LASTVISIBLE)
  1243. #endif      // _WIN32_IE >= 0x0400
  1244. #define TVM_SELECTITEM          (TV_FIRST + 11)
  1245. #define TreeView_Select(hwnd, hitem, code) 
  1246.     (BOOL)SNDMSG((hwnd), TVM_SELECTITEM, (WPARAM)(code), (LPARAM)(HTREEITEM)(hitem))
  1247. #define TreeView_SelectItem(hwnd, hitem)            TreeView_Select(hwnd, hitem, TVGN_CARET)
  1248. #define TreeView_SelectDropTarget(hwnd, hitem)      TreeView_Select(hwnd, hitem, TVGN_DROPHILITE)
  1249. #define TreeView_SelectSetFirstVisible(hwnd, hitem) TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE)
  1250. #define TVM_GETITEMA            (TV_FIRST + 12)
  1251. #define TVM_GETITEMW            (TV_FIRST + 62)
  1252. #ifdef UNICODE
  1253. #define  TVM_GETITEM            TVM_GETITEMW
  1254. #else
  1255. #define  TVM_GETITEM            TVM_GETITEMA
  1256. #endif
  1257. #define TreeView_GetItem(hwnd, pitem) 
  1258.     (BOOL)SNDMSG((hwnd), TVM_GETITEM, 0, (LPARAM)(TV_ITEM *)(pitem))
  1259. #define TVM_SETITEMA            (TV_FIRST + 13)
  1260. #define TVM_SETITEMW            (TV_FIRST + 63)
  1261. #ifdef UNICODE
  1262. #define  TVM_SETITEM            TVM_SETITEMW
  1263. #else
  1264. #define  TVM_SETITEM            TVM_SETITEMA
  1265. #endif
  1266. #define TreeView_SetItem(hwnd, pitem) 
  1267.     (BOOL)SNDMSG((hwnd), TVM_SETITEM, 0, (LPARAM)(const TV_ITEM *)(pitem))
  1268. #define TVM_EDITLABELA          (TV_FIRST + 14)
  1269. #define TVM_EDITLABELW          (TV_FIRST + 65)
  1270. #ifdef UNICODE
  1271. #define TVM_EDITLABEL           TVM_EDITLABELW
  1272. #else
  1273. #define TVM_EDITLABEL           TVM_EDITLABELA
  1274. #endif
  1275. #define TreeView_EditLabel(hwnd, hitem) 
  1276.     (HWND)SNDMSG((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem))
  1277. #define TVM_GETEDITCONTROL      (TV_FIRST + 15)
  1278. #define TreeView_GetEditControl(hwnd) 
  1279.     (HWND)SNDMSG((hwnd), TVM_GETEDITCONTROL, 0, 0)
  1280. #define TVM_GETVISIBLECOUNT     (TV_FIRST + 16)
  1281. #define TreeView_GetVisibleCount(hwnd) 
  1282.     (UINT)SNDMSG((hwnd), TVM_GETVISIBLECOUNT, 0, 0)
  1283. #define TVM_HITTEST             (TV_FIRST + 17)
  1284. #define TreeView_HitTest(hwnd, lpht) 
  1285.     (HTREEITEM)SNDMSG((hwnd), TVM_HITTEST, 0, (LPARAM)(LPTV_HITTESTINFO)(lpht))
  1286. #if (_WIN32_IE >= 0x0300)
  1287. #define LPTV_HITTESTINFO   LPTVHITTESTINFO
  1288. #define   TV_HITTESTINFO     TVHITTESTINFO
  1289. #else
  1290. #define tagTVHITTESTINFO    _TV_HITTESTINFO
  1291. #define    TVHITTESTINFO     TV_HITTESTINFO
  1292. #define  LPTVHITTESTINFO   LPTV_HITTESTINFO
  1293. #endif
  1294. typedef struct tagTVHITTESTINFO {
  1295.     POINT       pt;
  1296.     UINT        flags;
  1297.     HTREEITEM   hItem;
  1298. } TVHITTESTINFO, *LPTVHITTESTINFO;
  1299. #define TVHT_NOWHERE            0x0001
  1300. #define TVHT_ONITEMICON         0x0002
  1301. #define TVHT_ONITEMLABEL        0x0004
  1302. #define TVHT_ONITEM             (TVHT_ONITEMICON | TVHT_ONITEMLABEL | TVHT_ONITEMSTATEICON)
  1303. #define TVHT_ONITEMINDENT       0x0008
  1304. #define TVHT_ONITEMBUTTON       0x0010
  1305. #define TVHT_ONITEMRIGHT        0x0020
  1306. #define TVHT_ONITEMSTATEICON    0x0040
  1307. #define TVHT_ABOVE              0x0100
  1308. #define TVHT_BELOW              0x0200
  1309. #define TVHT_TORIGHT            0x0400
  1310. #define TVHT_TOLEFT             0x0800
  1311. #define TVM_CREATEDRAGIMAGE     (TV_FIRST + 18)
  1312. #define TreeView_CreateDragImage(hwnd, hitem) 
  1313.     (HIMAGELIST)SNDMSG((hwnd), TVM_CREATEDRAGIMAGE, 0, (LPARAM)(HTREEITEM)(hitem))
  1314. #define TVM_SORTCHILDREN        (TV_FIRST + 19)
  1315. #define TreeView_SortChildren(hwnd, hitem, recurse) 
  1316.     (BOOL)SNDMSG((hwnd), TVM_SORTCHILDREN, (WPARAM)(recurse), (LPARAM)(HTREEITEM)(hitem))
  1317. #define TVM_ENSUREVISIBLE       (TV_FIRST + 20)
  1318. #define TreeView_EnsureVisible(hwnd, hitem) 
  1319.     (BOOL)SNDMSG((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(HTREEITEM)(hitem))
  1320. #define TVM_SORTCHILDRENCB      (TV_FIRST + 21)
  1321. #define TreeView_SortChildrenCB(hwnd, psort, recurse) 
  1322.     (BOOL)SNDMSG((hwnd), TVM_SORTCHILDRENCB, (WPARAM)(recurse), 
  1323.     (LPARAM)(LPTV_SORTCB)(psort))
  1324. #define TVM_ENDEDITLABELNOW     (TV_FIRST + 22)
  1325. #define TreeView_EndEditLabelNow(hwnd, fCancel) 
  1326.     (BOOL)SNDMSG((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)(fCancel), 0)
  1327. #define TVM_GETISEARCHSTRINGA   (TV_FIRST + 23)
  1328. #define TVM_GETISEARCHSTRINGW   (TV_FIRST + 64)
  1329. #ifdef UNICODE
  1330. #define TVM_GETISEARCHSTRING     TVM_GETISEARCHSTRINGW
  1331. #else
  1332. #define TVM_GETISEARCHSTRING     TVM_GETISEARCHSTRINGA
  1333. #endif
  1334. #if (_WIN32_IE >= 0x0300)
  1335. #define TVM_SETTOOLTIPS         (TV_FIRST + 24)
  1336. #define TreeView_SetToolTips(hwnd,  hwndTT) 
  1337.     (HWND)SNDMSG((hwnd), TVM_SETTOOLTIPS, (WPARAM)(hwndTT), 0)
  1338. #define TVM_GETTOOLTIPS         (TV_FIRST + 25)
  1339. #define TreeView_GetToolTips(hwnd) 
  1340.     (HWND)SNDMSG((hwnd), TVM_GETTOOLTIPS, 0, 0)
  1341. #endif
  1342. #define TreeView_GetISearchString(hwndTV, lpsz) 
  1343.         (BOOL)SNDMSG((hwndTV), TVM_GETISEARCHSTRING, 0, (LPARAM)(LPTSTR)(lpsz))
  1344. #if (_WIN32_IE >= 0x0400)
  1345. #define TVM_SETINSERTMARK       (TV_FIRST + 26)
  1346. #define TreeView_SetInsertMark(hwnd, hItem, fAfter) 
  1347.         (BOOL)SNDMSG((hwnd), TVM_SETINSERTMARK, (WPARAM) (fAfter), (LPARAM) (hItem))
  1348. #define TVM_SETUNICODEFORMAT     CCM_SETUNICODEFORMAT
  1349. #define TreeView_SetUnicodeFormat(hwnd, fUnicode)  
  1350.     (BOOL)SNDMSG((hwnd), TVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
  1351. #define TVM_GETUNICODEFORMAT     CCM_GETUNICODEFORMAT
  1352. #define TreeView_GetUnicodeFormat(hwnd)  
  1353.     (BOOL)SNDMSG((hwnd), TVM_GETUNICODEFORMAT, 0, 0)
  1354. #endif
  1355. #if (_WIN32_IE >= 0x0400)
  1356. #define TVM_SETITEMHEIGHT         (TV_FIRST + 27)
  1357. #define TreeView_SetItemHeight(hwnd,  iHeight) 
  1358.     (int)SNDMSG((hwnd), TVM_SETITEMHEIGHT, (WPARAM)(iHeight), 0)
  1359. #define TVM_GETITEMHEIGHT         (TV_FIRST + 28)
  1360. #define TreeView_GetItemHeight(hwnd) 
  1361.     (int)SNDMSG((hwnd), TVM_GETITEMHEIGHT, 0, 0)
  1362. #define TVM_SETBKCOLOR              (TV_FIRST + 29)
  1363. #define TreeView_SetBkColor(hwnd, clr) 
  1364.     (COLORREF)SNDMSG((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)(clr))
  1365. #define TVM_SETTEXTCOLOR              (TV_FIRST + 30)
  1366. #define TreeView_SetTextColor(hwnd, clr) 
  1367.     (COLORREF)SNDMSG((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)(clr))
  1368. #define TVM_GETBKCOLOR              (TV_FIRST + 31)
  1369. #define TreeView_GetBkColor(hwnd) 
  1370.     (COLORREF)SNDMSG((hwnd), TVM_GETBKCOLOR, 0, 0)
  1371. #define TVM_GETTEXTCOLOR              (TV_FIRST + 32)
  1372. #define TreeView_GetTextColor(hwnd) 
  1373.     (COLORREF)SNDMSG((hwnd), TVM_GETTEXTCOLOR, 0, 0)
  1374. #define TVM_SETSCROLLTIME              (TV_FIRST + 33)
  1375. #define TreeView_SetScrollTime(hwnd, uTime) 
  1376.     (UINT)SNDMSG((hwnd), TVM_SETSCROLLTIME, uTime, 0)
  1377. #define TVM_GETSCROLLTIME              (TV_FIRST + 34)
  1378. #define TreeView_GetScrollTime(hwnd) 
  1379.     (UINT)SNDMSG((hwnd), TVM_GETSCROLLTIME, 0, 0)
  1380. #define TVM_SETINSERTMARKCOLOR              (TV_FIRST + 37)
  1381. #define TreeView_SetInsertMarkColor(hwnd, clr) 
  1382.     (COLORREF)SNDMSG((hwnd), TVM_SETINSERTMARKCOLOR, 0, (LPARAM)(clr))
  1383. #define TVM_GETINSERTMARKCOLOR              (TV_FIRST + 38)
  1384. #define TreeView_GetInsertMarkColor(hwnd) 
  1385.     (COLORREF)SNDMSG((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0)
  1386. #endif  /* (_WIN32_IE >= 0x0400) */
  1387. #if (_WIN32_IE >= 0x0500)
  1388. // tvm_?etitemstate only uses mask, state and stateMask.
  1389. // so unicode or ansi is irrelevant.
  1390. #define TreeView_SetItemState(hwndTV, hti, data, _mask) 
  1391. { TVITEM _ms_TVi;
  1392.   _ms_TVi.mask = TVIF_STATE; 
  1393.   _ms_TVi.hItem = hti; 
  1394.   _ms_TVi.stateMask = _mask;
  1395.   _ms_TVi.state = data;
  1396.   SNDMSG((hwndTV), TVM_SETITEM, 0, (LPARAM)(TV_ITEM *)&_ms_TVi);
  1397. }
  1398. #define TreeView_SetCheckState(hwndTV, hti, fCheck) 
  1399.   TreeView_SetItemState(hwndTV, hti, INDEXTOSTATEIMAGEMASK((fCheck)?2:1), TVIS_STATEIMAGEMASK)
  1400. #define TVM_GETITEMSTATE        (TV_FIRST + 39)
  1401. #define TreeView_GetItemState(hwndTV, hti, mask) 
  1402.    (UINT)SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), (LPARAM)(mask))
  1403. #define TreeView_GetCheckState(hwndTV, hti) 
  1404.    ((((UINT)(SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), TVIS_STATEIMAGEMASK))) >> 12) -1)
  1405. #define TVM_SETLINECOLOR            (TV_FIRST + 40)
  1406. #define TreeView_SetLineColor(hwnd, clr) 
  1407.     (COLORREF)SNDMSG((hwnd), TVM_SETLINECOLOR, 0, (LPARAM)(clr))
  1408. #define TVM_GETLINECOLOR            (TV_FIRST + 41)
  1409. #define TreeView_GetLineColor(hwnd) 
  1410.     (COLORREF)SNDMSG((hwnd), TVM_GETLINECOLOR, 0, 0)
  1411. #endif
  1412. #if (_WIN32_WINNT >= 0x0501)
  1413. #define TVM_MAPACCIDTOHTREEITEM     (TV_FIRST + 42)
  1414. #define TreeView_MapAccIDToHTREEITEM(hwnd, id) 
  1415.     (HTREEITEM)SNDMSG((hwnd), TVM_MAPACCIDTOHTREEITEM, id, 0)
  1416.     
  1417. #define TVM_MAPHTREEITEMTOACCID     (TV_FIRST + 43)
  1418. #define TreeView_MapHTREEITEMToAccID(hwnd, htreeitem) 
  1419.     (UINT)SNDMSG((hwnd), TVM_MAPHTREEITEMTOACCID, (WPARAM)htreeitem, 0)
  1420. #endif
  1421. typedef int (CALLBACK *PFNTVCOMPARE)(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
  1422. #if (_WIN32_IE >= 0x0300)
  1423. #define LPTV_SORTCB    LPTVSORTCB
  1424. #define   TV_SORTCB      TVSORTCB
  1425. #else
  1426. #define tagTVSORTCB    _TV_SORTCB
  1427. #define    TVSORTCB     TV_SORTCB
  1428. #define  LPTVSORTCB   LPTV_SORTCB
  1429. #endif
  1430. typedef struct tagTVSORTCB
  1431. {
  1432.         HTREEITEM       hParent;
  1433.         PFNTVCOMPARE    lpfnCompare;
  1434.         LPARAM          lParam;
  1435. } TVSORTCB, *LPTVSORTCB;
  1436. #if (_WIN32_IE >= 0x0300)
  1437. #define LPNM_TREEVIEWA          LPNMTREEVIEWA
  1438. #define LPNM_TREEVIEWW          LPNMTREEVIEWW
  1439. #define NM_TREEVIEWW            NMTREEVIEWW
  1440. #define NM_TREEVIEWA            NMTREEVIEWA
  1441. #else
  1442. #define tagNMTREEVIEWA          _NM_TREEVIEWA
  1443. #define tagNMTREEVIEWW          _NM_TREEVIEWW
  1444. #define NMTREEVIEWA             NM_TREEVIEWA
  1445. #define NMTREEVIEWW             NM_TREEVIEWW
  1446. #define LPNMTREEVIEWA           LPNM_TREEVIEWA
  1447. #define LPNMTREEVIEWW           LPNM_TREEVIEWW
  1448. #endif
  1449. #define LPNM_TREEVIEW           LPNMTREEVIEW
  1450. #define NM_TREEVIEW             NMTREEVIEW
  1451. typedef struct tagNMTREEVIEWA {
  1452.     NMHDR       hdr;
  1453.     UINT        action;
  1454.     TVITEMA    itemOld;
  1455.     TVITEMA    itemNew;
  1456.     POINT       ptDrag;
  1457. } NMTREEVIEWA, *LPNMTREEVIEWA;
  1458. typedef struct tagNMTREEVIEWW {
  1459.     NMHDR       hdr;
  1460.     UINT        action;
  1461.     TVITEMW    itemOld;
  1462.     TVITEMW    itemNew;
  1463.     POINT       ptDrag;
  1464. } NMTREEVIEWW, *LPNMTREEVIEWW;
  1465. #ifdef UNICODE
  1466. #define  NMTREEVIEW             NMTREEVIEWW
  1467. #define  LPNMTREEVIEW           LPNMTREEVIEWW
  1468. #else
  1469. #define  NMTREEVIEW             NMTREEVIEWA
  1470. #define  LPNMTREEVIEW           LPNMTREEVIEWA
  1471. #endif
  1472. #define TVN_SELCHANGINGA        (TVN_FIRST-1)
  1473. #define TVN_SELCHANGINGW        (TVN_FIRST-50)
  1474. #define TVN_SELCHANGEDA         (TVN_FIRST-2)
  1475. #define TVN_SELCHANGEDW         (TVN_FIRST-51)
  1476. #define TVC_UNKNOWN             0x0000
  1477. #define TVC_BYMOUSE             0x0001
  1478. #define TVC_BYKEYBOARD          0x0002
  1479. #define TVN_GETDISPINFOA        (TVN_FIRST-3)
  1480. #define TVN_GETDISPINFOW        (TVN_FIRST-52)
  1481. #define TVN_SETDISPINFOA        (TVN_FIRST-4)
  1482. #define TVN_SETDISPINFOW        (TVN_FIRST-53)
  1483. #define TVIF_DI_SETITEM         0x1000
  1484. #if (_WIN32_IE >= 0x0300)
  1485. #define TV_DISPINFOA            NMTVDISPINFOA
  1486. #define TV_DISPINFOW            NMTVDISPINFOW
  1487. #else
  1488. #define tagTVDISPINFOA  _TV_DISPINFOA
  1489. #define NMTVDISPINFOA    TV_DISPINFOA
  1490. #define tagTVDISPINFOW  _TV_DISPINFOW
  1491. #define NMTVDISPINFOW    TV_DISPINFOW
  1492. #endif
  1493. #define TV_DISPINFO             NMTVDISPINFO
  1494. typedef struct tagTVDISPINFOA {
  1495.     NMHDR hdr;
  1496.     TVITEMA item;
  1497. } NMTVDISPINFOA, *LPNMTVDISPINFOA;
  1498. typedef struct tagTVDISPINFOW {
  1499.     NMHDR hdr;
  1500.     TVITEMW item;
  1501. } NMTVDISPINFOW, *LPNMTVDISPINFOW;
  1502. #ifdef UNICODE
  1503. #define NMTVDISPINFO            NMTVDISPINFOW
  1504. #define LPNMTVDISPINFO          LPNMTVDISPINFOW
  1505. #else
  1506. #define NMTVDISPINFO            NMTVDISPINFOA
  1507. #define LPNMTVDISPINFO          LPNMTVDISPINFOA
  1508. #endif
  1509. #define TVN_ITEMEXPANDINGA      (TVN_FIRST-5)
  1510. #define TVN_ITEMEXPANDINGW      (TVN_FIRST-54)
  1511. #define TVN_ITEMEXPANDEDA       (TVN_FIRST-6)
  1512. #define TVN_ITEMEXPANDEDW       (TVN_FIRST-55)
  1513. #define TVN_BEGINDRAGA          (TVN_FIRST-7)
  1514. #define TVN_BEGINDRAGW          (TVN_FIRST-56)
  1515. #define TVN_BEGINRDRAGA         (TVN_FIRST-8)
  1516. #define TVN_BEGINRDRAGW         (TVN_FIRST-57)
  1517. #define TVN_DELETEITEMA         (TVN_FIRST-9)
  1518. #define TVN_DELETEITEMW         (TVN_FIRST-58)
  1519. #define TVN_BEGINLABELEDITA     (TVN_FIRST-10)
  1520. #define TVN_BEGINLABELEDITW     (TVN_FIRST-59)
  1521. #define TVN_ENDLABELEDITA       (TVN_FIRST-11)
  1522. #define TVN_ENDLABELEDITW       (TVN_FIRST-60)
  1523. #define TVN_KEYDOWN             (TVN_FIRST-12)
  1524. #if (_WIN32_IE >= 0x0400)
  1525. #define TVN_GETINFOTIPA         (TVN_FIRST-13)
  1526. #define TVN_GETINFOTIPW         (TVN_FIRST-14)
  1527. #define TVN_SINGLEEXPAND        (TVN_FIRST-15)
  1528. #define TVNRET_DEFAULT          0
  1529. #define TVNRET_SKIPOLD          1
  1530. #define TVNRET_SKIPNEW          2
  1531. #endif // 0x400
  1532. #if (_WIN32_IE >= 0x0300)
  1533. #define TV_KEYDOWN      NMTVKEYDOWN
  1534. #else
  1535. #define tagTVKEYDOWN    _TV_KEYDOWN
  1536. #define  NMTVKEYDOWN     TV_KEYDOWN
  1537. #endif
  1538. #ifdef _WIN32
  1539. #include <pshpack1.h>
  1540. #endif
  1541. typedef struct tagTVKEYDOWN {
  1542.     NMHDR hdr;
  1543.     WORD wVKey;
  1544.     UINT flags;
  1545. } NMTVKEYDOWN, *LPNMTVKEYDOWN;
  1546. #ifdef _WIN32
  1547. #include <poppack.h>
  1548. #endif
  1549. #ifdef UNICODE
  1550. #define TVN_SELCHANGING         TVN_SELCHANGINGW
  1551. #define TVN_SELCHANGED          TVN_SELCHANGEDW
  1552. #define TVN_GETDISPINFO         TVN_GETDISPINFOW
  1553. #define TVN_SETDISPINFO         TVN_SETDISPINFOW
  1554. #define TVN_ITEMEXPANDING       TVN_ITEMEXPANDINGW
  1555. #define TVN_ITEMEXPANDED        TVN_ITEMEXPANDEDW
  1556. #define TVN_BEGINDRAG           TVN_BEGINDRAGW
  1557. #define TVN_BEGINRDRAG          TVN_BEGINRDRAGW
  1558. #define TVN_DELETEITEM          TVN_DELETEITEMW
  1559. #define TVN_BEGINLABELEDIT      TVN_BEGINLABELEDITW
  1560. #define TVN_ENDLABELEDIT        TVN_ENDLABELEDITW
  1561. #else
  1562. #define TVN_SELCHANGING         TVN_SELCHANGINGA
  1563. #define TVN_SELCHANGED          TVN_SELCHANGEDA
  1564. #define TVN_GETDISPINFO         TVN_GETDISPINFOA
  1565. #define TVN_SETDISPINFO         TVN_SETDISPINFOA
  1566. #define TVN_ITEMEXPANDING       TVN_ITEMEXPANDINGA
  1567. #define TVN_ITEMEXPANDED        TVN_ITEMEXPANDEDA
  1568. #define TVN_BEGINDRAG           TVN_BEGINDRAGA
  1569. #define TVN_BEGINRDRAG          TVN_BEGINRDRAGA
  1570. #define TVN_DELETEITEM          TVN_DELETEITEMA
  1571. #define TVN_BEGINLABELEDIT      TVN_BEGINLABELEDITA
  1572. #define TVN_ENDLABELEDIT        TVN_ENDLABELEDITA
  1573. #endif
  1574. #if (_WIN32_IE >= 0x0300)
  1575. #define NMTVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMTVCUSTOMDRAW, clrTextBk)
  1576. typedef struct tagNMTVCUSTOMDRAW
  1577. {
  1578.     NMCUSTOMDRAW nmcd;
  1579.     COLORREF     clrText;
  1580.     COLORREF     clrTextBk;
  1581. #if (_WIN32_IE >= 0x0400)
  1582.     int iLevel;
  1583. #endif
  1584. } NMTVCUSTOMDRAW, *LPNMTVCUSTOMDRAW;
  1585. #endif
  1586. #if (_WIN32_IE >= 0x0400)
  1587. // for tooltips
  1588. typedef struct tagNMTVGETINFOTIPA
  1589. {
  1590.     NMHDR hdr;
  1591.     LPSTR pszText;
  1592.     int cchTextMax;
  1593.     HTREEITEM hItem;
  1594.     LPARAM lParam;
  1595. } NMTVGETINFOTIPA, *LPNMTVGETINFOTIPA;
  1596. typedef struct tagNMTVGETINFOTIPW
  1597. {
  1598.     NMHDR hdr;
  1599.     LPWSTR pszText;
  1600.     int cchTextMax;
  1601.     HTREEITEM hItem;
  1602.     LPARAM lParam;
  1603. } NMTVGETINFOTIPW, *LPNMTVGETINFOTIPW;
  1604. #ifdef UNICODE
  1605. #define TVN_GETINFOTIP          TVN_GETINFOTIPW
  1606. #define NMTVGETINFOTIP          NMTVGETINFOTIPW
  1607. #define LPNMTVGETINFOTIP        LPNMTVGETINFOTIPW
  1608. #else
  1609. #define TVN_GETINFOTIP          TVN_GETINFOTIPA
  1610. #define NMTVGETINFOTIP          NMTVGETINFOTIPA
  1611. #define LPNMTVGETINFOTIP        LPNMTVGETINFOTIPA
  1612. #endif
  1613. // treeview's customdraw return meaning don't draw images.  valid on CDRF_NOTIFYITEMPREPAINT
  1614. #define TVCDRF_NOIMAGES         0x00010000
  1615. #endif      // _WIN32_IE >= 0x0400
  1616. #endif      // NOTREEVIEW
  1617. #if (_WIN32_IE >= 0x0300)
  1618. #ifndef NOUSEREXCONTROLS
  1619. ////////////////////  ComboBoxEx ////////////////////////////////
  1620. #define WC_COMBOBOXEXW         L"ComboBoxEx32"
  1621. #define WC_COMBOBOXEXA         "ComboBoxEx32"
  1622. #ifdef UNICODE
  1623. #define WC_COMBOBOXEX          WC_COMBOBOXEXW
  1624. #else
  1625. #define WC_COMBOBOXEX          WC_COMBOBOXEXA
  1626. #endif
  1627. #define CBEIF_TEXT              0x00000001
  1628. #define CBEIF_IMAGE             0x00000002
  1629. #define CBEIF_SELECTEDIMAGE     0x00000004
  1630. #define CBEIF_OVERLAY           0x00000008
  1631. #define CBEIF_INDENT            0x00000010
  1632. #define CBEIF_LPARAM            0x00000020
  1633. #define CBEIF_DI_SETITEM        0x10000000
  1634. typedef struct tagCOMBOBOXEXITEMA
  1635. {
  1636.     UINT mask;
  1637.     INT_PTR iItem;
  1638.     LPSTR pszText;
  1639.     int cchTextMax;
  1640.     int iImage;
  1641.     int iSelectedImage;
  1642.     int iOverlay;
  1643.     int iIndent;
  1644.     LPARAM lParam;
  1645. } COMBOBOXEXITEMA, *PCOMBOBOXEXITEMA;
  1646. typedef COMBOBOXEXITEMA CONST *PCCOMBOEXITEMA;
  1647. typedef struct tagCOMBOBOXEXITEMW
  1648. {
  1649.     UINT mask;
  1650.     INT_PTR iItem;
  1651.     LPWSTR pszText;
  1652.     int cchTextMax;
  1653.     int iImage;
  1654.     int iSelectedImage;
  1655.     int iOverlay;
  1656.     int iIndent;
  1657.     LPARAM lParam;
  1658. } COMBOBOXEXITEMW, *PCOMBOBOXEXITEMW;
  1659. typedef COMBOBOXEXITEMW CONST *PCCOMBOEXITEMW;
  1660. #ifdef UNICODE
  1661. #define COMBOBOXEXITEM            COMBOBOXEXITEMW
  1662. #define PCOMBOBOXEXITEM           PCOMBOBOXEXITEMW
  1663. #define PCCOMBOBOXEXITEM          PCCOMBOBOXEXITEMW
  1664. #else
  1665. #define COMBOBOXEXITEM            COMBOBOXEXITEMA
  1666. #define PCOMBOBOXEXITEM           PCOMBOBOXEXITEMA
  1667. #define PCCOMBOBOXEXITEM          PCCOMBOBOXEXITEMA
  1668. #endif
  1669. #define CBEM_INSERTITEMA        (WM_USER + 1)
  1670. #define CBEM_SETIMAGELIST       (WM_USER + 2)
  1671. #define CBEM_GETIMAGELIST       (WM_USER + 3)
  1672. #define CBEM_GETITEMA           (WM_USER + 4)
  1673. #define CBEM_SETITEMA           (WM_USER + 5)
  1674. #define CBEM_DELETEITEM         CB_DELETESTRING
  1675. #define CBEM_GETCOMBOCONTROL    (WM_USER + 6)
  1676. #define CBEM_GETEDITCONTROL     (WM_USER + 7)
  1677. #if (_WIN32_IE >= 0x0400)
  1678. #define CBEM_SETEXSTYLE         (WM_USER + 8)  // use  SETEXTENDEDSTYLE instead
  1679. #define CBEM_SETEXTENDEDSTYLE   (WM_USER + 14)   // lparam == new style, wParam (optional) == mask
  1680. #define CBEM_GETEXSTYLE         (WM_USER + 9) // use GETEXTENDEDSTYLE instead
  1681. #define CBEM_GETEXTENDEDSTYLE   (WM_USER + 9)
  1682. #define CBEM_SETUNICODEFORMAT   CCM_SETUNICODEFORMAT
  1683. #define CBEM_GETUNICODEFORMAT   CCM_GETUNICODEFORMAT
  1684. #else
  1685. #define CBEM_SETEXSTYLE         (WM_USER + 8)
  1686. #define CBEM_GETEXSTYLE         (WM_USER + 9)
  1687. #endif
  1688. #define CBEM_HASEDITCHANGED     (WM_USER + 10)
  1689. #define CBEM_INSERTITEMW        (WM_USER + 11)
  1690. #define CBEM_SETITEMW           (WM_USER + 12)
  1691. #define CBEM_GETITEMW           (WM_USER + 13)
  1692. #ifdef UNICODE
  1693. #define CBEM_INSERTITEM         CBEM_INSERTITEMW
  1694. #define CBEM_SETITEM            CBEM_SETITEMW
  1695. #define CBEM_GETITEM            CBEM_GETITEMW
  1696. #else
  1697. #define CBEM_INSERTITEM         CBEM_INSERTITEMA
  1698. #define CBEM_SETITEM            CBEM_SETITEMA
  1699. #define CBEM_GETITEM            CBEM_GETITEMA
  1700. #endif
  1701. #if (_WIN32_WINNT >= 0x501)
  1702. #define CBEM_SETWINDOWTHEME     CCM_SETWINDOWTHEME
  1703. #endif
  1704. #define CBES_EX_NOEDITIMAGE          0x00000001
  1705. #define CBES_EX_NOEDITIMAGEINDENT    0x00000002
  1706. #define CBES_EX_PATHWORDBREAKPROC    0x00000004
  1707. #if (_WIN32_IE >= 0x0400)
  1708. #define CBES_EX_NOSIZELIMIT          0x00000008
  1709. #define CBES_EX_CASESENSITIVE        0x00000010
  1710. typedef struct {
  1711.     NMHDR hdr;
  1712.     COMBOBOXEXITEMA ceItem;
  1713. } NMCOMBOBOXEXA, *PNMCOMBOBOXEXA;
  1714. typedef struct {
  1715.     NMHDR hdr;
  1716.     COMBOBOXEXITEMW ceItem;
  1717. } NMCOMBOBOXEXW, *PNMCOMBOBOXEXW;
  1718. #ifdef UNICODE
  1719. #define NMCOMBOBOXEX            NMCOMBOBOXEXW
  1720. #define PNMCOMBOBOXEX           PNMCOMBOBOXEXW
  1721. #define CBEN_GETDISPINFO        CBEN_GETDISPINFOW
  1722. #else
  1723. #define NMCOMBOBOXEX            NMCOMBOBOXEXA
  1724. #define PNMCOMBOBOXEX           PNMCOMBOBOXEXA
  1725. #define CBEN_GETDISPINFO        CBEN_GETDISPINFOA
  1726. #endif
  1727. #else
  1728. typedef struct {
  1729.     NMHDR hdr;
  1730.     COMBOBOXEXITEM ceItem;
  1731. } NMCOMBOBOXEX, *PNMCOMBOBOXEX;
  1732. #define CBEN_GETDISPINFO         (CBEN_FIRST - 0)
  1733. #endif      // _WIN32_IE >= 0x0400
  1734. #if (_WIN32_IE >= 0x0400)
  1735. #define CBEN_GETDISPINFOA        (CBEN_FIRST - 0)
  1736. #endif
  1737. #define CBEN_INSERTITEM          (CBEN_FIRST - 1)
  1738. #define CBEN_DELETEITEM          (CBEN_FIRST - 2)
  1739. #define CBEN_BEGINEDIT           (CBEN_FIRST - 4)
  1740. #define CBEN_ENDEDITA            (CBEN_FIRST - 5)
  1741. #define CBEN_ENDEDITW            (CBEN_FIRST - 6)
  1742. #if (_WIN32_IE >= 0x0400)
  1743. #define CBEN_GETDISPINFOW        (CBEN_FIRST - 7)
  1744. #endif
  1745. #if (_WIN32_IE >= 0x0400)
  1746. #define CBEN_DRAGBEGINA                  (CBEN_FIRST - 8)
  1747. #define CBEN_DRAGBEGINW                  (CBEN_FIRST - 9)
  1748. #ifdef UNICODE
  1749. #define CBEN_DRAGBEGIN CBEN_DRAGBEGINW
  1750. #else
  1751. #define CBEN_DRAGBEGIN CBEN_DRAGBEGINA
  1752. #endif
  1753. #endif  //(_WIN32_IE >= 0x0400)
  1754. // lParam specifies why the endedit is happening
  1755. #ifdef UNICODE
  1756. #define CBEN_ENDEDIT CBEN_ENDEDITW
  1757. #else
  1758. #define CBEN_ENDEDIT CBEN_ENDEDITA
  1759. #endif
  1760. #define CBENF_KILLFOCUS         1
  1761. #define CBENF_RETURN            2
  1762. #define CBENF_ESCAPE            3
  1763. #define CBENF_DROPDOWN          4
  1764. #define CBEMAXSTRLEN 260
  1765. #if (_WIN32_IE >= 0x0400)
  1766. // CBEN_DRAGBEGIN sends this information ...
  1767. typedef struct {
  1768.     NMHDR hdr;
  1769.     int   iItemid;
  1770.     WCHAR szText[CBEMAXSTRLEN];
  1771. }NMCBEDRAGBEGINW, *LPNMCBEDRAGBEGINW, *PNMCBEDRAGBEGINW;
  1772. typedef struct {
  1773.     NMHDR hdr;
  1774.     int   iItemid;
  1775.     char szText[CBEMAXSTRLEN];
  1776. }NMCBEDRAGBEGINA, *LPNMCBEDRAGBEGINA, *PNMCBEDRAGBEGINA;
  1777. #ifdef UNICODE
  1778. #define  NMCBEDRAGBEGIN NMCBEDRAGBEGINW
  1779. #define  LPNMCBEDRAGBEGIN LPNMCBEDRAGBEGINW
  1780. #define  PNMCBEDRAGBEGIN PNMCBEDRAGBEGINW
  1781. #else
  1782. #define  NMCBEDRAGBEGIN NMCBEDRAGBEGINA
  1783. #define  LPNMCBEDRAGBEGIN LPNMCBEDRAGBEGINA
  1784. #define  PNMCBEDRAGBEGIN PNMCBEDRAGBEGINA
  1785. #endif
  1786. #endif      // _WIN32_IE >= 0x0400
  1787. // CBEN_ENDEDIT sends this information...
  1788. // fChanged if the user actually did anything
  1789. // iNewSelection gives what would be the new selection unless the notify is failed
  1790. //                      iNewSelection may be CB_ERR if there's no match
  1791. typedef struct {
  1792.         NMHDR hdr;
  1793.         BOOL fChanged;
  1794.         int iNewSelection;
  1795.         WCHAR szText[CBEMAXSTRLEN];
  1796.         int iWhy;
  1797. } NMCBEENDEDITW, *LPNMCBEENDEDITW, *PNMCBEENDEDITW;
  1798. typedef struct {
  1799.         NMHDR hdr;
  1800.         BOOL fChanged;
  1801.         int iNewSelection;
  1802.         char szText[CBEMAXSTRLEN];
  1803.         int iWhy;
  1804. } NMCBEENDEDITA, *LPNMCBEENDEDITA,*PNMCBEENDEDITA;
  1805. #ifdef UNICODE
  1806. #define  NMCBEENDEDIT NMCBEENDEDITW
  1807. #define  LPNMCBEENDEDIT LPNMCBEENDEDITW
  1808. #define  PNMCBEENDEDIT PNMCBEENDEDITW
  1809. #else
  1810. #define  NMCBEENDEDIT NMCBEENDEDITA
  1811. #define  LPNMCBEENDEDIT LPNMCBEENDEDITA
  1812. #define  PNMCBEENDEDIT PNMCBEENDEDITA
  1813. #endif
  1814. #endif
  1815. #endif      // _WIN32_IE >= 0x0300
  1816. //====== TAB CONTROL ==========================================================
  1817. #ifndef NOTABCONTROL
  1818. #ifdef _WIN32
  1819. #define WC_TABCONTROLA          "SysTabControl32"
  1820. #define WC_TABCONTROLW          L"SysTabControl32"
  1821. #ifdef UNICODE
  1822. #define  WC_TABCONTROL          WC_TABCONTROLW
  1823. #else
  1824. #define  WC_TABCONTROL          WC_TABCONTROLA
  1825. #endif
  1826. #else
  1827. #define WC_TABCONTROL           "SysTabControl"
  1828. #endif
  1829. // begin_r_commctrl
  1830. #if (_WIN32_IE >= 0x0300)
  1831. #define TCS_SCROLLOPPOSITE      0x0001   // assumes multiline tab
  1832. #define TCS_BOTTOM              0x0002
  1833. #define TCS_RIGHT               0x0002
  1834. #define TCS_MULTISELECT         0x0004  // allow multi-select in button mode
  1835. #endif
  1836. #if (_WIN32_IE >= 0x0400)
  1837. #define TCS_FLATBUTTONS         0x0008
  1838. #endif
  1839. #define TCS_FORCEICONLEFT       0x0010
  1840. #define TCS_FORCELABELLEFT      0x0020
  1841. #if (_WIN32_IE >= 0x0300)
  1842. #define TCS_HOTTRACK            0x0040
  1843. #define TCS_VERTICAL            0x0080
  1844. #endif
  1845. #define TCS_TABS                0x0000
  1846. #define TCS_BUTTONS             0x0100
  1847. #define TCS_SINGLELINE          0x0000
  1848. #define TCS_MULTILINE           0x0200
  1849. #define TCS_RIGHTJUSTIFY        0x0000
  1850. #define TCS_FIXEDWIDTH          0x0400
  1851. #define TCS_RAGGEDRIGHT         0x0800
  1852. #define TCS_FOCUSONBUTTONDOWN   0x1000
  1853. #define TCS_OWNERDRAWFIXED      0x2000
  1854. #define TCS_TOOLTIPS            0x4000
  1855. #define TCS_FOCUSNEVER          0x8000
  1856. // end_r_commctrl
  1857. #if (_WIN32_IE >= 0x0400)
  1858. // EX styles for use with TCM_SETEXTENDEDSTYLE
  1859. #define TCS_EX_FLATSEPARATORS   0x00000001
  1860. #define TCS_EX_REGISTERDROP     0x00000002
  1861. #endif
  1862. #define TCM_GETIMAGELIST        (TCM_FIRST + 2)
  1863. #define TabCtrl_GetImageList(hwnd) 
  1864.     (HIMAGELIST)SNDMSG((hwnd), TCM_GETIMAGELIST, 0, 0L)
  1865. #define TCM_SETIMAGELIST        (TCM_FIRST + 3)
  1866. #define TabCtrl_SetImageList(hwnd, himl) 
  1867.     (HIMAGELIST)SNDMSG((hwnd), TCM_SETIMAGELIST, 0, (LPARAM)(HIMAGELIST)(himl))
  1868. #define TCM_GETITEMCOUNT        (TCM_FIRST + 4)
  1869. #define TabCtrl_GetItemCount(hwnd) 
  1870.     (int)SNDMSG((hwnd), TCM_GETITEMCOUNT, 0, 0L)
  1871. #define TCIF_TEXT               0x0001
  1872. #define TCIF_IMAGE              0x0002
  1873. #define TCIF_RTLREADING         0x0004
  1874. #define TCIF_PARAM              0x0008
  1875. #if (_WIN32_IE >= 0x0300)
  1876. #define TCIF_STATE              0x0010
  1877. #define TCIS_BUTTONPRESSED      0x0001
  1878. #endif
  1879. #if (_WIN32_IE >= 0x0400)
  1880. #define TCIS_HIGHLIGHTED        0x0002
  1881. #endif
  1882. #if (_WIN32_IE >= 0x0300)
  1883. #define TC_ITEMHEADERA         TCITEMHEADERA
  1884. #define TC_ITEMHEADERW         TCITEMHEADERW
  1885. #else
  1886. #define tagTCITEMHEADERA       _TC_ITEMHEADERA
  1887. #define    TCITEMHEADERA        TC_ITEMHEADERA
  1888. #define tagTCITEMHEADERW       _TC_ITEMHEADERW
  1889. #define    TCITEMHEADERW        TC_ITEMHEADERW
  1890. #endif
  1891. #define TC_ITEMHEADER          TCITEMHEADER
  1892. typedef struct tagTCITEMHEADERA
  1893. {
  1894.     UINT mask;
  1895.     UINT lpReserved1;
  1896.     UINT lpReserved2;
  1897.     LPSTR pszText;
  1898.     int cchTextMax;
  1899.     int iImage;
  1900. } TCITEMHEADERA, *LPTCITEMHEADERA;
  1901. typedef struct tagTCITEMHEADERW
  1902. {
  1903.     UINT mask;
  1904.     UINT lpReserved1;
  1905.     UINT lpReserved2;
  1906.     LPWSTR pszText;
  1907.     int cchTextMax;
  1908.     int iImage;
  1909. } TCITEMHEADERW, *LPTCITEMHEADERW;
  1910. #ifdef UNICODE
  1911. #define  TCITEMHEADER          TCITEMHEADERW
  1912. #define  LPTCITEMHEADER        LPTCITEMHEADERW
  1913. #else
  1914. #define  TCITEMHEADER          TCITEMHEADERA
  1915. #define  LPTCITEMHEADER        LPTCITEMHEADERA
  1916. #endif
  1917. #if (_WIN32_IE >= 0x0300)
  1918. #define TC_ITEMA                TCITEMA
  1919. #define TC_ITEMW                TCITEMW
  1920. #else
  1921. #define tagTCITEMA              _TC_ITEMA
  1922. #define    TCITEMA               TC_ITEMA
  1923. #define tagTCITEMW              _TC_ITEMW
  1924. #define    TCITEMW               TC_ITEMW
  1925. #endif
  1926. #define TC_ITEM                 TCITEM
  1927. typedef struct tagTCITEMA
  1928. {
  1929.     UINT mask;
  1930. #if (_WIN32_IE >= 0x0300)
  1931.     DWORD dwState;
  1932.     DWORD dwStateMask;
  1933. #else
  1934.     UINT lpReserved1;
  1935.     UINT lpReserved2;
  1936. #endif
  1937.     LPSTR pszText;
  1938.     int cchTextMax;
  1939.     int iImage;
  1940.     LPARAM lParam;
  1941. } TCITEMA, *LPTCITEMA;
  1942. typedef struct tagTCITEMW
  1943. {
  1944.     UINT mask;
  1945. #if (_WIN32_IE >= 0x0300)
  1946.     DWORD dwState;
  1947.     DWORD dwStateMask;
  1948. #else
  1949.     UINT lpReserved1;
  1950.     UINT lpReserved2;
  1951. #endif
  1952.     LPWSTR pszText;
  1953.     int cchTextMax;
  1954.     int iImage;
  1955.     LPARAM lParam;
  1956. } TCITEMW, *LPTCITEMW;
  1957. #ifdef UNICODE
  1958. #define  TCITEM                 TCITEMW
  1959. #define  LPTCITEM               LPTCITEMW
  1960. #else
  1961. #define  TCITEM                 TCITEMA
  1962. #define  LPTCITEM               LPTCITEMA
  1963. #endif
  1964. #define TCM_GETITEMA            (TCM_FIRST + 5)
  1965. #define TCM_GETITEMW            (TCM_FIRST + 60)
  1966. #ifdef UNICODE
  1967. #define TCM_GETITEM             TCM_GETITEMW
  1968. #else
  1969. #define TCM_GETITEM             TCM_GETITEMA
  1970. #endif
  1971. #define TabCtrl_GetItem(hwnd, iItem, pitem) 
  1972.     (BOOL)SNDMSG((hwnd), TCM_GETITEM, (WPARAM)(int)(iItem), (LPARAM)(TC_ITEM *)(pitem))
  1973. #define TCM_SETITEMA            (TCM_FIRST + 6)
  1974. #define TCM_SETITEMW            (TCM_FIRST + 61)
  1975. #ifdef UNICODE
  1976. #define TCM_SETITEM             TCM_SETITEMW
  1977. #else
  1978. #define TCM_SETITEM             TCM_SETITEMA
  1979. #endif
  1980. #define TabCtrl_SetItem(hwnd, iItem, pitem) 
  1981.     (BOOL)SNDMSG((hwnd), TCM_SETITEM, (WPARAM)(int)(iItem), (LPARAM)(TC_ITEM *)(pitem))
  1982. #define TCM_INSERTITEMA         (TCM_FIRST + 7)
  1983. #define TCM_INSERTITEMW         (TCM_FIRST + 62)
  1984. #ifdef UNICODE
  1985. #define TCM_INSERTITEM          TCM_INSERTITEMW
  1986. #else
  1987. #define TCM_INSERTITEM          TCM_INSERTITEMA
  1988. #endif
  1989. #define TabCtrl_InsertItem(hwnd, iItem, pitem)   
  1990.     (int)SNDMSG((hwnd), TCM_INSERTITEM, (WPARAM)(int)(iItem), (LPARAM)(const TC_ITEM *)(pitem))
  1991. #define TCM_DELETEITEM          (TCM_FIRST + 8)
  1992. #define TabCtrl_DeleteItem(hwnd, i) 
  1993.     (BOOL)SNDMSG((hwnd), TCM_DELETEITEM, (WPARAM)(int)(i), 0L)
  1994. #define TCM_DELETEALLITEMS      (TCM_FIRST + 9)
  1995. #define TabCtrl_DeleteAllItems(hwnd) 
  1996.     (BOOL)SNDMSG((hwnd), TCM_DELETEALLITEMS, 0, 0L)
  1997. #define TCM_GETITEMRECT         (TCM_FIRST + 10)
  1998. #define TabCtrl_GetItemRect(hwnd, i, prc) 
  1999.     (BOOL)SNDMSG((hwnd), TCM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT *)(prc))
  2000. #define TCM_GETCURSEL           (TCM_FIRST + 11)
  2001. #define TabCtrl_GetCurSel(hwnd) 
  2002.     (int)SNDMSG((hwnd), TCM_GETCURSEL, 0, 0)
  2003. #define TCM_SETCURSEL           (TCM_FIRST + 12)
  2004. #define TabCtrl_SetCurSel(hwnd, i) 
  2005.     (int)SNDMSG((hwnd), TCM_SETCURSEL, (WPARAM)(i), 0)
  2006. #define TCHT_NOWHERE            0x0001
  2007. #define TCHT_ONITEMICON         0x0002
  2008. #define TCHT_ONITEMLABEL        0x0004
  2009. #define TCHT_ONITEM             (TCHT_ONITEMICON | TCHT_ONITEMLABEL)
  2010. #if (_WIN32_IE >= 0x0300)
  2011. #define LPTC_HITTESTINFO        LPTCHITTESTINFO
  2012. #define TC_HITTESTINFO          TCHITTESTINFO
  2013. #else
  2014. #define tagTCHITTESTINFO        _TC_HITTESTINFO
  2015. #define    TCHITTESTINFO         TC_HITTESTINFO
  2016. #define  LPTCHITTESTINFO       LPTC_HITTESTINFO
  2017. #endif
  2018. typedef struct tagTCHITTESTINFO
  2019. {
  2020.     POINT pt;
  2021.     UINT flags;
  2022. } TCHITTESTINFO, *LPTCHITTESTINFO;
  2023. #define TCM_HITTEST             (TCM_FIRST + 13)
  2024. #define TabCtrl_HitTest(hwndTC, pinfo) 
  2025.     (int)SNDMSG((hwndTC), TCM_HITTEST, 0, (LPARAM)(TC_HITTESTINFO *)(pinfo))
  2026. #define TCM_SETITEMEXTRA        (TCM_FIRST + 14)
  2027. #define TabCtrl_SetItemExtra(hwndTC, cb) 
  2028.     (BOOL)SNDMSG((hwndTC), TCM_SETITEMEXTRA, (WPARAM)(cb), 0L)
  2029. #define TCM_ADJUSTRECT          (TCM_FIRST + 40)
  2030. #define TabCtrl_AdjustRect(hwnd, bLarger, prc) 
  2031.     (int)SNDMSG(hwnd, TCM_ADJUSTRECT, (WPARAM)(BOOL)(bLarger), (LPARAM)(RECT *)prc)
  2032. #define TCM_SETITEMSIZE         (TCM_FIRST + 41)
  2033. #define TabCtrl_SetItemSize(hwnd, x, y) 
  2034.     (DWORD)SNDMSG((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y))
  2035. #define TCM_REMOVEIMAGE         (TCM_FIRST + 42)
  2036. #define TabCtrl_RemoveImage(hwnd, i) 
  2037.         (void)SNDMSG((hwnd), TCM_REMOVEIMAGE, i, 0L)
  2038. #define TCM_SETPADDING          (TCM_FIRST + 43)
  2039. #define TabCtrl_SetPadding(hwnd,  cx, cy) 
  2040.         (void)SNDMSG((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy))
  2041. #define TCM_GETROWCOUNT         (TCM_FIRST + 44)
  2042. #define TabCtrl_GetRowCount(hwnd) 
  2043.         (int)SNDMSG((hwnd), TCM_GETROWCOUNT, 0, 0L)
  2044. #define TCM_GETTOOLTIPS         (TCM_FIRST + 45)
  2045. #define TabCtrl_GetToolTips(hwnd) 
  2046.         (HWND)SNDMSG((hwnd), TCM_GETTOOLTIPS, 0, 0L)
  2047. #define TCM_SETTOOLTIPS         (TCM_FIRST + 46)
  2048. #define TabCtrl_SetToolTips(hwnd, hwndTT) 
  2049.         (void)SNDMSG((hwnd), TCM_SETTOOLTIPS, (WPARAM)(hwndTT), 0L)
  2050. #define TCM_GETCURFOCUS         (TCM_FIRST + 47)
  2051. #define TabCtrl_GetCurFocus(hwnd) 
  2052.     (int)SNDMSG((hwnd), TCM_GETCURFOCUS, 0, 0)
  2053. #define TCM_SETCURFOCUS         (TCM_FIRST + 48)
  2054. #define TabCtrl_SetCurFocus(hwnd, i) 
  2055.     SNDMSG((hwnd),TCM_SETCURFOCUS, i, 0)
  2056. #if (_WIN32_IE >= 0x0300)
  2057. #define TCM_SETMINTABWIDTH      (TCM_FIRST + 49)
  2058. #define TabCtrl_SetMinTabWidth(hwnd, x) 
  2059.         (int)SNDMSG((hwnd), TCM_SETMINTABWIDTH, 0, x)
  2060. #define TCM_DESELECTALL         (TCM_FIRST + 50)
  2061. #define TabCtrl_DeselectAll(hwnd, fExcludeFocus)
  2062.         (void)SNDMSG((hwnd), TCM_DESELECTALL, fExcludeFocus, 0)
  2063. #endif
  2064. #if (_WIN32_IE >= 0x0400)
  2065. #define TCM_HIGHLIGHTITEM       (TCM_FIRST + 51)
  2066. #define TabCtrl_HighlightItem(hwnd, i, fHighlight) 
  2067.     (BOOL)SNDMSG((hwnd), TCM_HIGHLIGHTITEM, (WPARAM)(i), (LPARAM)MAKELONG (fHighlight, 0))
  2068. #define TCM_SETEXTENDEDSTYLE    (TCM_FIRST + 52)  // optional wParam == mask
  2069. #define TabCtrl_SetExtendedStyle(hwnd, dw)
  2070.         (DWORD)SNDMSG((hwnd), TCM_SETEXTENDEDSTYLE, 0, dw)
  2071. #define TCM_GETEXTENDEDSTYLE    (TCM_FIRST + 53)
  2072. #define TabCtrl_GetExtendedStyle(hwnd)
  2073.         (DWORD)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, 0)
  2074. #define TCM_SETUNICODEFORMAT     CCM_SETUNICODEFORMAT
  2075. #define TabCtrl_SetUnicodeFormat(hwnd, fUnicode)  
  2076.     (BOOL)SNDMSG((hwnd), TCM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
  2077. #define TCM_GETUNICODEFORMAT     CCM_GETUNICODEFORMAT
  2078. #define TabCtrl_GetUnicodeFormat(hwnd)  
  2079.     (BOOL)SNDMSG((hwnd), TCM_GETUNICODEFORMAT, 0, 0)
  2080. #endif      // _WIN32_IE >= 0x0400
  2081. #define TCN_KEYDOWN             (TCN_FIRST - 0)
  2082. #if (_WIN32_IE >= 0x0300)
  2083. #define TC_KEYDOWN              NMTCKEYDOWN
  2084. #else
  2085. #define tagTCKEYDOWN            _TC_KEYDOWN
  2086. #define  NMTCKEYDOWN             TC_KEYDOWN
  2087. #endif
  2088. #ifdef _WIN32
  2089. #include <pshpack1.h>
  2090. #endif
  2091. typedef struct tagTCKEYDOWN
  2092. {
  2093.     NMHDR hdr;
  2094.     WORD wVKey;
  2095.     UINT flags;
  2096. } NMTCKEYDOWN;
  2097. #ifdef _WIN32
  2098. #include <poppack.h>
  2099. #endif
  2100. #define TCN_SELCHANGE           (TCN_FIRST - 1)
  2101. #define TCN_SELCHANGING         (TCN_FIRST - 2)
  2102. #if (_WIN32_IE >= 0x0400)
  2103. #define TCN_GETOBJECT           (TCN_FIRST - 3)
  2104. #endif      // _WIN32_IE >= 0x0400
  2105. #if (_WIN32_IE >= 0x0500)
  2106. #define TCN_FOCUSCHANGE         (TCN_FIRST - 4)
  2107. #endif      // _WIN32_IE >= 0x0500
  2108. #endif      // NOTABCONTROL
  2109. //====== ANIMATE CONTROL ======================================================
  2110. #ifndef NOANIMATE
  2111. #ifdef _WIN32
  2112. #define ANIMATE_CLASSW          L"SysAnimate32"
  2113. #define ANIMATE_CLASSA          "SysAnimate32"
  2114. #ifdef UNICODE
  2115. #define ANIMATE_CLASS           ANIMATE_CLASSW
  2116. #else
  2117. #define ANIMATE_CLASS           ANIMATE_CLASSA
  2118. #endif
  2119. // begin_r_commctrl
  2120. #define ACS_CENTER              0x0001
  2121. #define ACS_TRANSPARENT         0x0002
  2122. #define ACS_AUTOPLAY            0x0004
  2123. #if (_WIN32_IE >= 0x0300)
  2124. #define ACS_TIMER               0x0008  // don't use threads... use timers
  2125. #endif
  2126. // end_r_commctrl
  2127. #define ACM_OPENA               (WM_USER+100)
  2128. #define ACM_OPENW               (WM_USER+103)
  2129. #ifdef UNICODE
  2130. #define ACM_OPEN                ACM_OPENW
  2131. #else
  2132. #define ACM_OPEN                ACM_OPENA
  2133. #endif
  2134. #define ACM_PLAY                (WM_USER+101)
  2135. #define ACM_STOP                (WM_USER+102)
  2136. #define ACN_START               1
  2137. #define ACN_STOP                2
  2138. #define Animate_Create(hwndP, id, dwStyle, hInstance)   
  2139.             CreateWindow(ANIMATE_CLASS, NULL,           
  2140.                 dwStyle, 0, 0, 0, 0, hwndP, (HMENU)(id), hInstance, NULL)
  2141. #define Animate_Open(hwnd, szName)          (BOOL)SNDMSG(hwnd, ACM_OPEN, 0, (LPARAM)(LPTSTR)(szName))
  2142. #define Animate_OpenEx(hwnd, hInst, szName) (BOOL)SNDMSG(hwnd, ACM_OPEN, (WPARAM)(hInst), (LPARAM)(LPTSTR)(szName))
  2143. #define Animate_Play(hwnd, from, to, rep)   (BOOL)SNDMSG(hwnd, ACM_PLAY, (WPARAM)(rep), (LPARAM)MAKELONG(from, to))
  2144. #define Animate_Stop(hwnd)                  (BOOL)SNDMSG(hwnd, ACM_STOP, 0, 0)
  2145. #define Animate_Close(hwnd)                 Animate_Open(hwnd, NULL)
  2146. #define Animate_Seek(hwnd, frame)           Animate_Play(hwnd, frame, frame, 1)
  2147. #endif
  2148. #endif      // NOANIMATE
  2149. #if (_WIN32_IE >= 0x0300)
  2150. //====== MONTHCAL CONTROL ======================================================
  2151. #ifndef NOMONTHCAL
  2152. #ifdef _WIN32
  2153. #define MONTHCAL_CLASSW          L"SysMonthCal32"
  2154. #define MONTHCAL_CLASSA          "SysMonthCal32"
  2155. #ifdef UNICODE
  2156. #define MONTHCAL_CLASS           MONTHCAL_CLASSW
  2157. #else
  2158. #define MONTHCAL_CLASS           MONTHCAL_CLASSA
  2159. #endif
  2160. // bit-packed array of "bold" info for a month
  2161. // if a bit is on, that day is drawn bold
  2162. typedef DWORD MONTHDAYSTATE, *LPMONTHDAYSTATE;
  2163. #define MCM_FIRST           0x1000
  2164. // BOOL MonthCal_GetCurSel(HWND hmc, LPSYSTEMTIME pst)
  2165. //   returns FALSE if MCS_MULTISELECT
  2166. //   returns TRUE and sets *pst to the currently selected date otherwise
  2167. #define MCM_GETCURSEL       (MCM_FIRST + 1)
  2168. #define MonthCal_GetCurSel(hmc, pst)    (BOOL)SNDMSG(hmc, MCM_GETCURSEL, 0, (LPARAM)(pst))
  2169. // BOOL MonthCal_SetCurSel(HWND hmc, LPSYSTEMTIME pst)
  2170. //   returns FALSE if MCS_MULTISELECT
  2171. //   returns TURE and sets the currently selected date to *pst otherwise
  2172. #define MCM_SETCURSEL       (MCM_FIRST + 2)
  2173. #define MonthCal_SetCurSel(hmc, pst)    (BOOL)SNDMSG(hmc, MCM_SETCURSEL, 0, (LPARAM)(pst))
  2174. // DWORD MonthCal_GetMaxSelCount(HWND hmc)
  2175. //   returns the maximum number of selectable days allowed
  2176. #define MCM_GETMAXSELCOUNT  (MCM_FIRST + 3)
  2177. #define MonthCal_GetMaxSelCount(hmc)    (DWORD)SNDMSG(hmc, MCM_GETMAXSELCOUNT, 0, 0L)
  2178. // BOOL MonthCal_SetMaxSelCount(HWND hmc, UINT n)
  2179. //   sets the max number days that can be selected iff MCS_MULTISELECT
  2180. #define MCM_SETMAXSELCOUNT  (MCM_FIRST + 4)
  2181. #define MonthCal_SetMaxSelCount(hmc, n) (BOOL)SNDMSG(hmc, MCM_SETMAXSELCOUNT, (WPARAM)(n), 0L)
  2182. // BOOL MonthCal_GetSelRange(HWND hmc, LPSYSTEMTIME rgst)
  2183. //   sets rgst[0] to the first day of the selection range
  2184. //   sets rgst[1] to the last day of the selection range
  2185. #define MCM_GETSELRANGE     (MCM_FIRST + 5)
  2186. #define MonthCal_GetSelRange(hmc, rgst) SNDMSG(hmc, MCM_GETSELRANGE, 0, (LPARAM)(rgst))
  2187. // BOOL MonthCal_SetSelRange(HWND hmc, LPSYSTEMTIME rgst)
  2188. //   selects the range of days from rgst[0] to rgst[1]
  2189. #define MCM_SETSELRANGE     (MCM_FIRST + 6)
  2190. #define MonthCal_SetSelRange(hmc, rgst) SNDMSG(hmc, MCM_SETSELRANGE, 0, (LPARAM)(rgst))
  2191. // DWORD MonthCal_GetMonthRange(HWND hmc, DWORD gmr, LPSYSTEMTIME rgst)
  2192. //   if rgst specified, sets rgst[0] to the starting date and
  2193. //      and rgst[1] to the ending date of the the selectable (non-grayed)
  2194. //      days if GMR_VISIBLE or all the displayed days (including grayed)
  2195. //      if GMR_DAYSTATE.
  2196. //   returns the number of months spanned by the above range.
  2197. #define MCM_GETMONTHRANGE   (MCM_FIRST + 7)
  2198. #define MonthCal_GetMonthRange(hmc, gmr, rgst)  (DWORD)SNDMSG(hmc, MCM_GETMONTHRANGE, (WPARAM)(gmr), (LPARAM)(rgst))
  2199. // BOOL MonthCal_SetDayState(HWND hmc, int cbds, DAYSTATE *rgds)
  2200. //   cbds is the count of DAYSTATE items in rgds and it must be equal
  2201. //   to the value returned from MonthCal_GetMonthRange(hmc, GMR_DAYSTATE, NULL)
  2202. //   This sets the DAYSTATE bits for each month (grayed and non-grayed
  2203. //   days) displayed in the calendar. The first bit in a month's DAYSTATE
  2204. //   corresponts to bolding day 1, the second bit affects day 2, etc.
  2205. #define MCM_SETDAYSTATE     (MCM_FIRST + 8)
  2206. #define MonthCal_SetDayState(hmc, cbds, rgds)   SNDMSG(hmc, MCM_SETDAYSTATE, (WPARAM)(cbds), (LPARAM)(rgds))
  2207. // BOOL MonthCal_GetMinReqRect(HWND hmc, LPRECT prc)
  2208. //   sets *prc the minimal size needed to display one month
  2209. //   To display two months, undo the AdjustWindowRect calculation already done to
  2210. //   this rect, double the width, and redo the AdjustWindowRect calculation --
  2211. //   the monthcal control will display two calendars in this window (if you also
  2212. //   double the vertical size, you will get 4 calendars)
  2213. //   NOTE: if you want to gurantee that the "Today" string is not clipped,
  2214. //   get the MCM_GETMAXTODAYWIDTH and use the max of that width and this width
  2215. #define MCM_GETMINREQRECT   (MCM_FIRST + 9)
  2216. #define MonthCal_GetMinReqRect(hmc, prc)        SNDMSG(hmc, MCM_GETMINREQRECT, 0, (LPARAM)(prc))
  2217. // set colors to draw control with -- see MCSC_ bits below
  2218. #define MCM_SETCOLOR            (MCM_FIRST + 10)
  2219. #define MonthCal_SetColor(hmc, iColor, clr) SNDMSG(hmc, MCM_SETCOLOR, iColor, clr)
  2220. #define MCM_GETCOLOR            (MCM_FIRST + 11)
  2221. #define MonthCal_GetColor(hmc, iColor) SNDMSG(hmc, MCM_GETCOLOR, iColor, 0)
  2222. #define MCSC_BACKGROUND   0   // the background color (between months)
  2223. #define MCSC_TEXT         1   // the dates
  2224. #define MCSC_TITLEBK      2   // background of the title
  2225. #define MCSC_TITLETEXT    3
  2226. #define MCSC_MONTHBK      4   // background within the month cal
  2227. #define MCSC_TRAILINGTEXT 5   // the text color of header & trailing days
  2228. // set what day is "today"   send NULL to revert back to real date
  2229. #define MCM_SETTODAY    (MCM_FIRST + 12)
  2230. #define MonthCal_SetToday(hmc, pst)             SNDMSG(hmc, MCM_SETTODAY, 0, (LPARAM)(pst))
  2231. // get what day is "today"
  2232. // returns BOOL for success/failure
  2233. #define MCM_GETTODAY    (MCM_FIRST + 13)
  2234. #define MonthCal_GetToday(hmc, pst)             (BOOL)SNDMSG(hmc, MCM_GETTODAY, 0, (LPARAM)(pst))
  2235. // determine what pinfo->pt is over
  2236. #define MCM_HITTEST          (MCM_FIRST + 14)
  2237. #define MonthCal_HitTest(hmc, pinfo) 
  2238.         SNDMSG(hmc, MCM_HITTEST, 0, (LPARAM)(PMCHITTESTINFO)(pinfo))
  2239. typedef struct {
  2240.         UINT cbSize;
  2241.         POINT pt;
  2242.         UINT uHit;   // out param
  2243.         SYSTEMTIME st;
  2244. } MCHITTESTINFO, *PMCHITTESTINFO;
  2245. #define MCHT_TITLE                      0x00010000
  2246. #define MCHT_CALENDAR                   0x00020000
  2247. #define MCHT_TODAYLINK                  0x00030000
  2248. #define MCHT_NEXT                       0x01000000   // these indicate that hitting
  2249. #define MCHT_PREV                       0x02000000  // here will go to the next/prev month
  2250. #define MCHT_NOWHERE                    0x00000000
  2251. #define MCHT_TITLEBK                    (MCHT_TITLE)
  2252. #define MCHT_TITLEMONTH                 (MCHT_TITLE | 0x0001)
  2253. #define MCHT_TITLEYEAR                  (MCHT_TITLE | 0x0002)
  2254. #define MCHT_TITLEBTNNEXT               (MCHT_TITLE | MCHT_NEXT | 0x0003)
  2255. #define MCHT_TITLEBTNPREV               (MCHT_TITLE | MCHT_PREV | 0x0003)
  2256. #define MCHT_CALENDARBK                 (MCHT_CALENDAR)
  2257. #define MCHT_CALENDARDATE               (MCHT_CALENDAR | 0x0001)
  2258. #define MCHT_CALENDARDATENEXT           (MCHT_CALENDARDATE | MCHT_NEXT)
  2259. #define MCHT_CALENDARDATEPREV           (MCHT_CALENDARDATE | MCHT_PREV)
  2260. #define MCHT_CALENDARDAY                (MCHT_CALENDAR | 0x0002)
  2261. #define MCHT_CALENDARWEEKNUM            (MCHT_CALENDAR | 0x0003)
  2262. // set first day of week to iDay:
  2263. // 0 for Monday, 1 for Tuesday, ..., 6 for Sunday
  2264. // -1 for means use locale info
  2265. #define MCM_SETFIRSTDAYOFWEEK (MCM_FIRST + 15)
  2266. #define MonthCal_SetFirstDayOfWeek(hmc, iDay) 
  2267.         SNDMSG(hmc, MCM_SETFIRSTDAYOFWEEK, 0, iDay)
  2268. // DWORD result...  low word has the day.  high word is bool if this is app set
  2269. // or not (FALSE == using locale info)
  2270. #define MCM_GETFIRSTDAYOFWEEK (MCM_FIRST + 16)
  2271. #define MonthCal_GetFirstDayOfWeek(hmc) 
  2272.         (DWORD)SNDMSG(hmc, MCM_GETFIRSTDAYOFWEEK, 0, 0)
  2273. // DWORD MonthCal_GetRange(HWND hmc, LPSYSTEMTIME rgst)
  2274. //   modifies rgst[0] to be the minimum ALLOWABLE systemtime (or 0 if no minimum)
  2275. //   modifies rgst[1] to be the maximum ALLOWABLE systemtime (or 0 if no maximum)
  2276. //   returns GDTR_MIN|GDTR_MAX if there is a minimum|maximum limit
  2277. #define MCM_GETRANGE (MCM_FIRST + 17)
  2278. #define MonthCal_GetRange(hmc, rgst) 
  2279.         (DWORD)SNDMSG(hmc, MCM_GETRANGE, 0, (LPARAM)(rgst))
  2280. // BOOL MonthCal_SetRange(HWND hmc, DWORD gdtr, LPSYSTEMTIME rgst)
  2281. //   if GDTR_MIN, sets the minimum ALLOWABLE systemtime to rgst[0], otherwise removes minimum
  2282. //   if GDTR_MAX, sets the maximum ALLOWABLE systemtime to rgst[1], otherwise removes maximum
  2283. //   returns TRUE on success, FALSE on error (such as invalid parameters)
  2284. #define MCM_SETRANGE (MCM_FIRST + 18)
  2285. #define MonthCal_SetRange(hmc, gd, rgst) 
  2286.         (BOOL)SNDMSG(hmc, MCM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst))
  2287. // int MonthCal_GetMonthDelta(HWND hmc)
  2288. //   returns the number of months one click on a next/prev button moves by
  2289. #define MCM_GETMONTHDELTA (MCM_FIRST + 19)
  2290. #define MonthCal_GetMonthDelta(hmc) 
  2291.         (int)SNDMSG(hmc, MCM_GETMONTHDELTA, 0, 0)
  2292. // int MonthCal_SetMonthDelta(HWND hmc, int n)
  2293. //   sets the month delta to n. n==0 reverts to moving by a page of months
  2294. //   returns the previous value of n.
  2295. #define MCM_SETMONTHDELTA (MCM_FIRST + 20)
  2296. #define MonthCal_SetMonthDelta(hmc, n) 
  2297.         (int)SNDMSG(hmc, MCM_SETMONTHDELTA, n, 0)
  2298. // DWORD MonthCal_GetMaxTodayWidth(HWND hmc, LPSIZE psz)
  2299. //   sets *psz to the maximum width/height of the "Today" string displayed
  2300. //   at the bottom of the calendar (as long as MCS_NOTODAY is not specified)
  2301. #define MCM_GETMAXTODAYWIDTH (MCM_FIRST + 21)
  2302. #define MonthCal_GetMaxTodayWidth(hmc) 
  2303.         (DWORD)SNDMSG(hmc, MCM_GETMAXTODAYWIDTH, 0, 0)
  2304. #if (_WIN32_IE >= 0x0400)
  2305. #define MCM_SETUNICODEFORMAT     CCM_SETUNICODEFORMAT
  2306. #define MonthCal_SetUnicodeFormat(hwnd, fUnicode)  
  2307.     (BOOL)SNDMSG((hwnd), MCM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
  2308. #define MCM_GETUNICODEFORMAT     CCM_GETUNICODEFORMAT
  2309. #define MonthCal_GetUnicodeFormat(hwnd)  
  2310.     (BOOL)SNDMSG((hwnd), MCM_GETUNICODEFORMAT, 0, 0)
  2311. #endif
  2312. // MCN_SELCHANGE is sent whenever the currently displayed date changes
  2313. // via month change, year change, keyboard navigation, prev/next button
  2314. //
  2315. typedef struct tagNMSELCHANGE
  2316. {
  2317.     NMHDR           nmhdr;  // this must be first, so we don't break WM_NOTIFY
  2318.     SYSTEMTIME      stSelStart;
  2319.     SYSTEMTIME      stSelEnd;
  2320. } NMSELCHANGE, *LPNMSELCHANGE;
  2321. #define MCN_SELCHANGE       (MCN_FIRST + 1)
  2322. // MCN_GETDAYSTATE is sent for MCS_DAYSTATE controls whenever new daystate
  2323. // information is needed (month or year scroll) to draw bolding information.
  2324. // The app must fill in cDayState months worth of information starting from
  2325. // stStart date. The app may fill in the array at prgDayState or change
  2326. // prgDayState to point to a different array out of which the information
  2327. // will be copied. (similar to tooltips)
  2328. //
  2329. typedef struct tagNMDAYSTATE
  2330. {
  2331.     NMHDR           nmhdr;  // this must be first, so we don't break WM_NOTIFY
  2332.     SYSTEMTIME      stStart;
  2333.     int             cDayState;
  2334.     LPMONTHDAYSTATE prgDayState; // points to cDayState MONTHDAYSTATEs
  2335. } NMDAYSTATE, *LPNMDAYSTATE;
  2336. #define MCN_GETDAYSTATE     (MCN_FIRST + 3)
  2337. // MCN_SELECT is sent whenever a selection has occured (via mouse or keyboard)
  2338. //
  2339. typedef NMSELCHANGE NMSELECT, *LPNMSELECT;
  2340. #define MCN_SELECT          (MCN_FIRST + 4)
  2341. // begin_r_commctrl
  2342. #define MCS_DAYSTATE        0x0001
  2343. #define MCS_MULTISELECT     0x0002
  2344. #define MCS_WEEKNUMBERS     0x0004
  2345. #if (_WIN32_IE >= 0x0400)
  2346. #define MCS_NOTODAYCIRCLE   0x0008
  2347. #define MCS_NOTODAY         0x0010
  2348. #else
  2349. #define MCS_NOTODAY         0x0008
  2350. #endif
  2351. // end_r_commctrl
  2352. #define GMR_VISIBLE     0       // visible portion of display
  2353. #define GMR_DAYSTATE    1       // above plus the grayed out parts of
  2354.                                 // partially displayed months
  2355. #endif // _WIN32
  2356. #endif // NOMONTHCAL
  2357. //====== DATETIMEPICK CONTROL ==================================================
  2358. #ifndef NODATETIMEPICK
  2359. #ifdef _WIN32
  2360. #define DATETIMEPICK_CLASSW          L"SysDateTimePick32"
  2361. #define DATETIMEPICK_CLASSA          "SysDateTimePick32"
  2362. #ifdef UNICODE
  2363. #define DATETIMEPICK_CLASS           DATETIMEPICK_CLASSW
  2364. #else
  2365. #define DATETIMEPICK_CLASS           DATETIMEPICK_CLASSA
  2366. #endif
  2367. #define DTM_FIRST        0x1000
  2368. // DWORD DateTimePick_GetSystemtime(HWND hdp, LPSYSTEMTIME pst)
  2369. //   returns GDT_NONE if "none" is selected (DTS_SHOWNONE only)
  2370. //   returns GDT_VALID and modifies *pst to be the currently selected value
  2371. #define DTM_GETSYSTEMTIME   (DTM_FIRST + 1)
  2372. #define DateTime_GetSystemtime(hdp, pst)    (DWORD)SNDMSG(hdp, DTM_GETSYSTEMTIME, 0, (LPARAM)(pst))
  2373. // BOOL DateTime_SetSystemtime(HWND hdp, DWORD gd, LPSYSTEMTIME pst)
  2374. //   if gd==GDT_NONE, sets datetimepick to None (DTS_SHOWNONE only)
  2375. //   if gd==GDT_VALID, sets datetimepick to *pst
  2376. //   returns TRUE on success, FALSE on error (such as bad params)
  2377. #define DTM_SETSYSTEMTIME   (DTM_FIRST + 2)
  2378. #define DateTime_SetSystemtime(hdp, gd, pst)    (BOOL)SNDMSG(hdp, DTM_SETSYSTEMTIME, (WPARAM)(gd), (LPARAM)(pst))
  2379. // DWORD DateTime_GetRange(HWND hdp, LPSYSTEMTIME rgst)
  2380. //   modifies rgst[0] to be the minimum ALLOWABLE systemtime (or 0 if no minimum)
  2381. //   modifies rgst[1] to be the maximum ALLOWABLE systemtime (or 0 if no maximum)
  2382. //   returns GDTR_MIN|GDTR_MAX if there is a minimum|maximum limit
  2383. #define DTM_GETRANGE (DTM_FIRST + 3)
  2384. #define DateTime_GetRange(hdp, rgst)  (DWORD)SNDMSG(hdp, DTM_GETRANGE, 0, (LPARAM)(rgst))
  2385. // BOOL DateTime_SetRange(HWND hdp, DWORD gdtr, LPSYSTEMTIME rgst)
  2386. //   if GDTR_MIN, sets the minimum ALLOWABLE systemtime to rgst[0], otherwise removes minimum
  2387. //   if GDTR_MAX, sets the maximum ALLOWABLE systemtime to rgst[1], otherwise removes maximum
  2388. //   returns TRUE on success, FALSE on error (such as invalid parameters)
  2389. #define DTM_SETRANGE (DTM_FIRST + 4)
  2390. #define DateTime_SetRange(hdp, gd, rgst)  (BOOL)SNDMSG(hdp, DTM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst))
  2391. // BOOL DateTime_SetFormat(HWND hdp, LPCTSTR sz)
  2392. //   sets the display formatting string to sz (see GetDateFormat and GetTimeFormat for valid formatting chars)
  2393. //   NOTE: 'X' is a valid formatting character which indicates that the application
  2394. //   will determine how to display information. Such apps must support DTN_WMKEYDOWN,
  2395. //   DTN_FORMAT, and DTN_FORMATQUERY.
  2396. #define DTM_SETFORMATA (DTM_FIRST + 5)
  2397. #define DTM_SETFORMATW (DTM_FIRST + 50)
  2398. #ifdef UNICODE
  2399. #define DTM_SETFORMAT       DTM_SETFORMATW
  2400. #else
  2401. #define DTM_SETFORMAT       DTM_SETFORMATA
  2402. #endif
  2403. #define DateTime_SetFormat(hdp, sz)  (BOOL)SNDMSG(hdp, DTM_SETFORMAT, 0, (LPARAM)(sz))
  2404. #define DTM_SETMCCOLOR    (DTM_FIRST + 6)
  2405. #define DateTime_SetMonthCalColor(hdp, iColor, clr) SNDMSG(hdp, DTM_SETMCCOLOR, iColor, clr)
  2406. #define DTM_GETMCCOLOR    (DTM_FIRST + 7)
  2407. #define DateTime_GetMonthCalColor(hdp, iColor) SNDMSG(hdp, DTM_GETMCCOLOR, iColor, 0)
  2408. // HWND DateTime_GetMonthCal(HWND hdp)
  2409. //   returns the HWND of the MonthCal popup window. Only valid
  2410. // between DTN_DROPDOWN and DTN_CLOSEUP notifications.
  2411. #define DTM_GETMONTHCAL   (DTM_FIRST + 8)
  2412. #define DateTime_GetMonthCal(hdp) (HWND)SNDMSG(hdp, DTM_GETMONTHCAL, 0, 0)
  2413. #if (_WIN32_IE >= 0x0400)
  2414. #define DTM_SETMCFONT     (DTM_FIRST + 9)
  2415. #define DateTime_SetMonthCalFont(hdp, hfont, fRedraw) SNDMSG(hdp, DTM_SETMCFONT, (WPARAM)(hfont), (LPARAM)(fRedraw))
  2416. #define DTM_GETMCFONT     (DTM_FIRST + 10)
  2417. #define DateTime_GetMonthCalFont(hdp) SNDMSG(hdp, DTM_GETMCFONT, 0, 0)
  2418. #endif      // _WIN32_IE >= 0x0400
  2419. // begin_r_commctrl
  2420. #define DTS_UPDOWN          0x0001 // use UPDOWN instead of MONTHCAL
  2421. #define DTS_SHOWNONE        0x0002 // allow a NONE selection
  2422. #define DTS_SHORTDATEFORMAT 0x0000 // use the short date format (app must forward WM_WININICHANGE messages)
  2423. #define DTS_LONGDATEFORMAT  0x0004 // use the long date format (app must forward WM_WININICHANGE messages)
  2424. #if (_WIN32_IE >= 0x500)
  2425. #define DTS_SHORTDATECENTURYFORMAT 0x000C// short date format with century (app must forward WM_WININICHANGE messages)
  2426. #endif // (_WIN32_IE >= 0x500)
  2427. #define DTS_TIMEFORMAT      0x0009 // use the time format (app must forward WM_WININICHANGE messages)
  2428. #define DTS_APPCANPARSE     0x0010 // allow user entered strings (app MUST respond to DTN_USERSTRING)
  2429. #define DTS_RIGHTALIGN      0x0020 // right-align popup instead of left-align it
  2430. // end_r_commctrl
  2431. #define DTN_DATETIMECHANGE  (DTN_FIRST + 1) // the systemtime has changed
  2432. typedef struct tagNMDATETIMECHANGE
  2433. {
  2434.     NMHDR       nmhdr;
  2435.     DWORD       dwFlags;    // GDT_VALID or GDT_NONE
  2436.     SYSTEMTIME  st;         // valid iff dwFlags==GDT_VALID
  2437. } NMDATETIMECHANGE, *LPNMDATETIMECHANGE;
  2438. #define DTN_USERSTRINGA  (DTN_FIRST + 2) // the user has entered a string
  2439. #define DTN_USERSTRINGW  (DTN_FIRST + 15)
  2440. typedef struct tagNMDATETIMESTRINGA
  2441. {
  2442.     NMHDR      nmhdr;
  2443.     LPCSTR     pszUserString;  // string user entered
  2444.     SYSTEMTIME st;             // app fills this in
  2445.     DWORD      dwFlags;        // GDT_VALID or GDT_NONE
  2446. } NMDATETIMESTRINGA, *LPNMDATETIMESTRINGA;
  2447. typedef struct tagNMDATETIMESTRINGW
  2448. {
  2449.     NMHDR      nmhdr;
  2450.     LPCWSTR    pszUserString;  // string user entered
  2451.     SYSTEMTIME st;             // app fills this in
  2452.     DWORD      dwFlags;        // GDT_VALID or GDT_NONE
  2453. } NMDATETIMESTRINGW, *LPNMDATETIMESTRINGW;
  2454. #ifdef UNICODE
  2455. #define DTN_USERSTRING          DTN_USERSTRINGW
  2456. #define NMDATETIMESTRING        NMDATETIMESTRINGW
  2457. #define LPNMDATETIMESTRING      LPNMDATETIMESTRINGW
  2458. #else
  2459. #define DTN_USERSTRING          DTN_USERSTRINGA
  2460. #define NMDATETIMESTRING        NMDATETIMESTRINGA
  2461. #define LPNMDATETIMESTRING      LPNMDATETIMESTRINGA
  2462. #endif
  2463. #define DTN_WMKEYDOWNA  (DTN_FIRST + 3) // modify keydown on app format field (X)
  2464. #define DTN_WMKEYDOWNW  (DTN_FIRST + 16)
  2465. typedef struct tagNMDATETIMEWMKEYDOWNA
  2466. {
  2467.     NMHDR      nmhdr;
  2468.     int        nVirtKey;  // virtual key code of WM_KEYDOWN which MODIFIES an X field
  2469.     LPCSTR     pszFormat; // format substring
  2470.     SYSTEMTIME st;        // current systemtime, app should modify based on key
  2471. } NMDATETIMEWMKEYDOWNA, *LPNMDATETIMEWMKEYDOWNA;
  2472. typedef struct tagNMDATETIMEWMKEYDOWNW
  2473. {
  2474.     NMHDR      nmhdr;
  2475.     int        nVirtKey;  // virtual key code of WM_KEYDOWN which MODIFIES an X field
  2476.     LPCWSTR    pszFormat; // format substring
  2477.     SYSTEMTIME st;        // current systemtime, app should modify based on key
  2478. } NMDATETIMEWMKEYDOWNW, *LPNMDATETIMEWMKEYDOWNW;
  2479. #ifdef UNICODE
  2480. #define DTN_WMKEYDOWN           DTN_WMKEYDOWNW
  2481. #define NMDATETIMEWMKEYDOWN     NMDATETIMEWMKEYDOWNW
  2482. #define LPNMDATETIMEWMKEYDOWN   LPNMDATETIMEWMKEYDOWNW
  2483. #else
  2484. #define DTN_WMKEYDOWN           DTN_WMKEYDOWNA
  2485. #define NMDATETIMEWMKEYDOWN     NMDATETIMEWMKEYDOWNA
  2486. #define LPNMDATETIMEWMKEYDOWN   LPNMDATETIMEWMKEYDOWNA
  2487. #endif
  2488. #define DTN_FORMATA  (DTN_FIRST + 4) // query display for app format field (X)
  2489. #define DTN_FORMATW  (DTN_FIRST + 17)
  2490. typedef struct tagNMDATETIMEFORMATA
  2491. {
  2492.     NMHDR nmhdr;
  2493.     LPCSTR  pszFormat;   // format substring
  2494.     SYSTEMTIME st;       // current systemtime
  2495.     LPCSTR pszDisplay;   // string to display
  2496.     CHAR szDisplay[64];  // buffer pszDisplay originally points at
  2497. } NMDATETIMEFORMATA, *LPNMDATETIMEFORMATA;
  2498. typedef struct tagNMDATETIMEFORMATW
  2499. {
  2500.     NMHDR nmhdr;
  2501.     LPCWSTR pszFormat;   // format substring
  2502.     SYSTEMTIME st;       // current systemtime
  2503.     LPCWSTR pszDisplay;  // string to display
  2504.     WCHAR szDisplay[64]; // buffer pszDisplay originally points at
  2505. } NMDATETIMEFORMATW, *LPNMDATETIMEFORMATW;
  2506. #ifdef UNICODE
  2507. #define DTN_FORMAT             DTN_FORMATW
  2508. #define NMDATETIMEFORMAT        NMDATETIMEFORMATW
  2509. #define LPNMDATETIMEFORMAT      LPNMDATETIMEFORMATW
  2510. #else
  2511. #define DTN_FORMAT             DTN_FORMATA
  2512. #define NMDATETIMEFORMAT        NMDATETIMEFORMATA
  2513. #define LPNMDATETIMEFORMAT      LPNMDATETIMEFORMATA
  2514. #endif
  2515. #define DTN_FORMATQUERYA  (DTN_FIRST + 5) // query formatting info for app format field (X)
  2516. #define DTN_FORMATQUERYW (DTN_FIRST + 18)
  2517. typedef struct tagNMDATETIMEFORMATQUERYA
  2518. {
  2519.     NMHDR nmhdr;
  2520.     LPCSTR pszFormat;  // format substring
  2521.     SIZE szMax;        // max bounding rectangle app will use for this format string
  2522. } NMDATETIMEFORMATQUERYA, *LPNMDATETIMEFORMATQUERYA;
  2523. typedef struct tagNMDATETIMEFORMATQUERYW
  2524. {
  2525.     NMHDR nmhdr;
  2526.     LPCWSTR pszFormat; // format substring
  2527.     SIZE szMax;        // max bounding rectangle app will use for this format string
  2528. } NMDATETIMEFORMATQUERYW, *LPNMDATETIMEFORMATQUERYW;
  2529. #ifdef UNICODE
  2530. #define DTN_FORMATQUERY         DTN_FORMATQUERYW
  2531. #define NMDATETIMEFORMATQUERY   NMDATETIMEFORMATQUERYW
  2532. #define LPNMDATETIMEFORMATQUERY LPNMDATETIMEFORMATQUERYW
  2533. #else
  2534. #define DTN_FORMATQUERY         DTN_FORMATQUERYA
  2535. #define NMDATETIMEFORMATQUERY   NMDATETIMEFORMATQUERYA
  2536. #define LPNMDATETIMEFORMATQUERY LPNMDATETIMEFORMATQUERYA
  2537. #endif
  2538. #define DTN_DROPDOWN    (DTN_FIRST + 6) // MonthCal has dropped down
  2539. #define DTN_CLOSEUP     (DTN_FIRST + 7) // MonthCal is popping up
  2540. #define GDTR_MIN     0x0001
  2541. #define GDTR_MAX     0x0002
  2542. #define GDT_ERROR    -1
  2543. #define GDT_VALID    0
  2544. #define GDT_NONE     1
  2545. #endif // _WIN32
  2546. #endif // NODATETIMEPICK
  2547. #if (_WIN32_IE >= 0x0400)
  2548. #ifndef NOIPADDRESS
  2549. ///////////////////////////////////////////////
  2550. ///    IP Address edit control
  2551. // Messages sent to IPAddress controls
  2552. #define IPM_CLEARADDRESS (WM_USER+100) // no parameters
  2553. #define IPM_SETADDRESS   (WM_USER+101) // lparam = TCP/IP address
  2554. #define IPM_GETADDRESS   (WM_USER+102) // lresult = # of non black fields.  lparam = LPDWORD for TCP/IP address
  2555. #define IPM_SETRANGE (WM_USER+103) // wparam = field, lparam = range
  2556. #define IPM_SETFOCUS (WM_USER+104) // wparam = field
  2557. #define IPM_ISBLANK  (WM_USER+105) // no parameters
  2558. #define WC_IPADDRESSW           L"SysIPAddress32"
  2559. #define WC_IPADDRESSA           "SysIPAddress32"
  2560. #ifdef UNICODE
  2561. #define WC_IPADDRESS          WC_IPADDRESSW
  2562. #else
  2563. #define WC_IPADDRESS          WC_IPADDRESSA
  2564. #endif
  2565. #define IPN_FIELDCHANGED                (IPN_FIRST - 0)
  2566. typedef struct tagNMIPADDRESS
  2567. {
  2568.         NMHDR hdr;
  2569.         int iField;
  2570.         int iValue;
  2571. } NMIPADDRESS, *LPNMIPADDRESS;
  2572. // The following is a useful macro for passing the range values in the
  2573. // IPM_SETRANGE message.