commctrl.h
上传用户:whjcdz88
上传日期:2007-01-02
资源大小:350k
文件大小:181k
源码类别:

工具条

开发平台:

Visual C++

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