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

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************
  2. *                                                                             *
  3. * commctrl.h - - Interface for the Windows Common Controls                    *
  4. *                                                                             *
  5. * Version 1.2                                                                 *
  6. *                                                                             *
  7. * Copyright (c) Microsoft Corporation. All rights reserved.                   *
  8. *                                                                             *
  9. *****************************************************************************/
  10. #ifndef _INC_COMMCTRL
  11. #define _INC_COMMCTRL
  12. #ifndef _WINRESRC_
  13. #ifndef _WIN32_IE
  14. #define _WIN32_IE 0x0501
  15. #else
  16. #if (_WIN32_IE < 0x0400) && defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500)
  17. #error _WIN32_IE setting conflicts with _WIN32_WINNT setting
  18. #endif
  19. #endif
  20. #endif
  21. #ifndef _HRESULT_DEFINED
  22. #define _HRESULT_DEFINED
  23. typedef LONG HRESULT;
  24. #endif // _HRESULT_DEFINED
  25. #ifndef NOUSER
  26. //
  27. // Define API decoration for direct importing of DLL references.
  28. //
  29. #ifndef WINCOMMCTRLAPI
  30. #if !defined(_COMCTL32_) && defined(_WIN32)
  31. #define WINCOMMCTRLAPI DECLSPEC_IMPORT
  32. #else
  33. #define WINCOMMCTRLAPI
  34. #endif
  35. #endif // WINCOMMCTRLAPI
  36. //
  37. // For compilers that don't support nameless unions
  38. //
  39. #ifndef DUMMYUNIONNAME
  40. #ifdef NONAMELESSUNION
  41. #define DUMMYUNIONNAME   u
  42. #define DUMMYUNIONNAME2  u2
  43. #define DUMMYUNIONNAME3  u3
  44. #define DUMMYUNIONNAME4  u4
  45. #define DUMMYUNIONNAME5  u5
  46. #else
  47. #define DUMMYUNIONNAME
  48. #define DUMMYUNIONNAME2
  49. #define DUMMYUNIONNAME3
  50. #define DUMMYUNIONNAME4
  51. #define DUMMYUNIONNAME5
  52. #endif
  53. #endif // DUMMYUNIONNAME
  54. #ifdef __cplusplus
  55. extern "C" {
  56. #endif
  57. //
  58. // Users of this header may define any number of these constants to avoid
  59. // the definitions of each functional group.
  60. //
  61. //    NOTOOLBAR    Customizable bitmap-button toolbar control.
  62. //    NOUPDOWN     Up and Down arrow increment/decrement control.
  63. //    NOSTATUSBAR  Status bar control.
  64. //    NOMENUHELP   APIs to help manage menus, especially with a status bar.
  65. //    NOTRACKBAR   Customizable column-width tracking control.
  66. //    NODRAGLIST   APIs to make a listbox source and sink drag&drop actions.
  67. //    NOPROGRESS   Progress gas gauge.
  68. //    NOHOTKEY     HotKey control
  69. //    NOHEADER     Header bar control.
  70. //    NOIMAGEAPIS  ImageList apis.
  71. //    NOLISTVIEW   ListView control.
  72. //    NOTREEVIEW   TreeView control.
  73. //    NOTABCONTROL Tab control.
  74. //    NOANIMATE    Animate control.
  75. //    NOBUTTON     Button control.
  76. //    NOSTATIC     Static control.
  77. //    NOEDIT       Edit control.
  78. //    NOLISTBOX    Listbox control.
  79. //    NOCOMBOBOX   Combobox control.
  80. //    NOSCROLLBAR  Scrollbar control.
  81. //
  82. //=============================================================================
  83. #include <prsht.h>
  84. #ifndef SNDMSG
  85. #ifdef __cplusplus
  86. #ifndef _MAC
  87. #define SNDMSG ::SendMessage
  88. #else
  89. #define SNDMSG ::AfxSendMessage
  90. #endif
  91. #else
  92. #ifndef _MAC
  93. #define SNDMSG SendMessage
  94. #else
  95. #define SNDMSG AfxSendMessage
  96. #endif //_MAC
  97. #endif
  98. #endif // ifndef SNDMSG
  99. #ifdef _MAC
  100. #ifndef RC_INVOKED
  101. #ifndef _WLM_NOFORCE_LIBS
  102. #ifndef _WLMDLL
  103.     #ifdef _DEBUG
  104.         #pragma comment(lib, "comctld.lib")
  105.     #else
  106.         #pragma comment(lib, "comctl.lib")
  107.     #endif
  108.     #pragma comment(linker, "/macres:comctl.rsc")
  109.     #else
  110.     #ifdef _DEBUG
  111.         #pragma comment(lib, "msvcctld.lib")
  112.     #else
  113.         #pragma comment(lib, "msvcctl.lib")
  114.     #endif
  115. #endif // _WLMDLL
  116. #endif // _WLM_NOFORCE_LIBS
  117. #endif // RC_INVOKED
  118. #endif //_MAC
  119. WINCOMMCTRLAPI void WINAPI InitCommonControls(void);
  120. #if (_WIN32_IE >= 0x0300)
  121. typedef struct tagINITCOMMONCONTROLSEX {
  122.     DWORD dwSize;             // size of this structure
  123.     DWORD dwICC;              // flags indicating which classes to be initialized
  124. } INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;
  125. #define ICC_LISTVIEW_CLASSES   0x00000001 // listview, header
  126. #define ICC_TREEVIEW_CLASSES   0x00000002 // treeview, tooltips
  127. #define ICC_BAR_CLASSES        0x00000004 // toolbar, statusbar, trackbar, tooltips
  128. #define ICC_TAB_CLASSES        0x00000008 // tab, tooltips
  129. #define ICC_UPDOWN_CLASS       0x00000010 // updown
  130. #define ICC_PROGRESS_CLASS     0x00000020 // progress
  131. #define ICC_HOTKEY_CLASS       0x00000040 // hotkey
  132. #define ICC_ANIMATE_CLASS      0x00000080 // animate
  133. #define ICC_WIN95_CLASSES      0x000000FF
  134. #define ICC_DATE_CLASSES       0x00000100 // month picker, date picker, time picker, updown
  135. #define ICC_USEREX_CLASSES     0x00000200 // comboex
  136. #define ICC_COOL_CLASSES       0x00000400 // rebar (coolbar) control
  137. #if (_WIN32_IE >= 0x0400)
  138. #define ICC_INTERNET_CLASSES   0x00000800
  139. #define ICC_PAGESCROLLER_CLASS 0x00001000   // page scroller
  140. #define ICC_NATIVEFNTCTL_CLASS 0x00002000   // native font control
  141. #endif
  142. #if (_WIN32_WINNT >= 0x501)
  143. #define ICC_STANDARD_CLASSES   0x00004000
  144. #define ICC_LINK_CLASS         0x00008000
  145. #endif
  146. WINCOMMCTRLAPI BOOL WINAPI InitCommonControlsEx(LPINITCOMMONCONTROLSEX);
  147. #endif      // _WIN32_IE >= 0x0300
  148. #define ODT_HEADER              100
  149. #define ODT_TAB                 101
  150. #define ODT_LISTVIEW            102
  151. //====== Ranges for control message IDs =======================================
  152. #define LVM_FIRST               0x1000      // ListView messages
  153. #define TV_FIRST                0x1100      // TreeView messages
  154. #define HDM_FIRST               0x1200      // Header messages
  155. #define TCM_FIRST               0x1300      // Tab control messages
  156. #if (_WIN32_IE >= 0x0400)
  157. #define PGM_FIRST               0x1400      // Pager control messages
  158. #if (_WIN32_WINNT >= 0x501)
  159. #define ECM_FIRST               0x1500      // Edit control messages
  160. #define BCM_FIRST               0x1600      // Button control messages
  161. #define CBM_FIRST               0x1700      // Combobox control messages
  162. #endif
  163. #define CCM_FIRST               0x2000      // Common control shared messages
  164. #define CCM_LAST                (CCM_FIRST + 0x200)
  165. #define CCM_SETBKCOLOR          (CCM_FIRST + 1) // lParam is bkColor
  166. typedef struct tagCOLORSCHEME {
  167.    DWORD            dwSize;
  168.    COLORREF         clrBtnHighlight;       // highlight color
  169.    COLORREF         clrBtnShadow;          // shadow color
  170. } COLORSCHEME, *LPCOLORSCHEME;
  171. #define CCM_SETCOLORSCHEME      (CCM_FIRST + 2) // lParam is color scheme
  172. #define CCM_GETCOLORSCHEME      (CCM_FIRST + 3) // fills in COLORSCHEME pointed to by lParam
  173. #define CCM_GETDROPTARGET       (CCM_FIRST + 4)
  174. #define CCM_SETUNICODEFORMAT    (CCM_FIRST + 5)
  175. #define CCM_GETUNICODEFORMAT    (CCM_FIRST + 6)
  176. #if (_WIN32_IE >= 0x0500)
  177. #if (_WIN32_WINNT >= 0x501)
  178. #define COMCTL32_VERSION  6
  179. #else
  180. #define COMCTL32_VERSION  5
  181. #endif
  182. #define CCM_SETVERSION          (CCM_FIRST + 0x7)
  183. #define CCM_GETVERSION          (CCM_FIRST + 0x8)
  184. #define CCM_SETNOTIFYWINDOW     (CCM_FIRST + 0x9) // wParam == hwndParent.
  185. #if (_WIN32_WINNT >= 0x501)
  186. #define CCM_SETWINDOWTHEME      (CCM_FIRST + 0xb)
  187. #define CCM_DPISCALE            (CCM_FIRST + 0xc) // wParam == Awareness
  188. #endif 
  189. #endif // (_WIN32_IE >= 0x0500)
  190. #endif // (_WIN32_IE >= 0x0400)
  191. #if (_WIN32_IE >= 0x0400)
  192. // for tooltips
  193. #define INFOTIPSIZE 1024
  194. #endif
  195. //====== WM_NOTIFY Macros =====================================================
  196. #define HANDLE_WM_NOTIFY(hwnd, wParam, lParam, fn) 
  197.     (fn)((hwnd), (int)(wParam), (NMHDR *)(lParam))
  198. #define FORWARD_WM_NOTIFY(hwnd, idFrom, pnmhdr, fn) 
  199.     (LRESULT)(fn)((hwnd), WM_NOTIFY, (WPARAM)(int)(idFrom), (LPARAM)(NMHDR *)(pnmhdr))
  200. //====== Generic WM_NOTIFY notification codes =================================
  201. #define NM_OUTOFMEMORY          (NM_FIRST-1)
  202. #define NM_CLICK                (NM_FIRST-2)    // uses NMCLICK struct
  203. #define NM_DBLCLK               (NM_FIRST-3)
  204. #define NM_RETURN               (NM_FIRST-4)
  205. #define NM_RCLICK               (NM_FIRST-5)    // uses NMCLICK struct
  206. #define NM_RDBLCLK              (NM_FIRST-6)
  207. #define NM_SETFOCUS             (NM_FIRST-7)
  208. #define NM_KILLFOCUS            (NM_FIRST-8)
  209. #if (_WIN32_IE >= 0x0300)
  210. #define NM_CUSTOMDRAW           (NM_FIRST-12)
  211. #define NM_HOVER                (NM_FIRST-13)
  212. #endif
  213. #if (_WIN32_IE >= 0x0400)
  214. #define NM_NCHITTEST            (NM_FIRST-14)   // uses NMMOUSE struct
  215. #define NM_KEYDOWN              (NM_FIRST-15)   // uses NMKEY struct
  216. #define NM_RELEASEDCAPTURE      (NM_FIRST-16)
  217. #define NM_SETCURSOR            (NM_FIRST-17)   // uses NMMOUSE struct
  218. #define NM_CHAR                 (NM_FIRST-18)   // uses NMCHAR struct
  219. #endif
  220. #if (_WIN32_IE >= 0x0401)
  221. #define NM_TOOLTIPSCREATED      (NM_FIRST-19)   // notify of when the tooltips window is create
  222. #endif
  223. #if (_WIN32_IE >= 0x0500)
  224. #define NM_LDOWN                (NM_FIRST-20)
  225. #define NM_RDOWN                (NM_FIRST-21)
  226. #define NM_THEMECHANGED         (NM_FIRST-22)
  227. #endif
  228. #ifndef CCSIZEOF_STRUCT
  229. #define CCSIZEOF_STRUCT(structname, member)  (((int)((LPBYTE)(&((structname*)0)->member) - ((LPBYTE)((structname*)0)))) + sizeof(((structname*)0)->member))
  230. #endif
  231. //====== Generic WM_NOTIFY notification structures ============================
  232. #if (_WIN32_IE >= 0x0401)
  233. typedef struct tagNMTOOLTIPSCREATED
  234. {
  235.     NMHDR hdr;
  236.     HWND hwndToolTips;
  237. } NMTOOLTIPSCREATED, * LPNMTOOLTIPSCREATED;
  238. #endif
  239. #if (_WIN32_IE >= 0x0400)
  240. typedef struct tagNMMOUSE {
  241.     NMHDR   hdr;
  242.     DWORD_PTR dwItemSpec;
  243.     DWORD_PTR dwItemData;
  244.     POINT   pt;
  245.     LPARAM  dwHitInfo; // any specifics about where on the item or control the mouse is
  246. } NMMOUSE, *LPNMMOUSE;
  247. typedef NMMOUSE NMCLICK;
  248. typedef LPNMMOUSE LPNMCLICK;
  249. // Generic structure to request an object of a specific type.
  250. typedef struct tagNMOBJECTNOTIFY {
  251.     NMHDR   hdr;
  252.     int     iItem;
  253. #ifdef __IID_DEFINED__
  254.     const IID *piid;
  255. #else
  256.     const void *piid;
  257. #endif
  258.     void *pObject;
  259.     HRESULT hResult;
  260.     DWORD dwFlags;    // control specific flags (hints as to where in iItem it hit)
  261. } NMOBJECTNOTIFY, *LPNMOBJECTNOTIFY;
  262. // Generic structure for a key
  263. typedef struct tagNMKEY
  264. {
  265.     NMHDR hdr;
  266.     UINT  nVKey;
  267.     UINT  uFlags;
  268. } NMKEY, *LPNMKEY;
  269. // Generic structure for a character
  270. typedef struct tagNMCHAR {
  271.     NMHDR   hdr;
  272.     UINT    ch;
  273.     DWORD   dwItemPrev;     // Item previously selected
  274.     DWORD   dwItemNext;     // Item to be selected
  275. } NMCHAR, *LPNMCHAR;
  276. #endif           // _WIN32_IE >= 0x0400
  277. //====== WM_NOTIFY codes (NMHDR.code values) ==================================
  278. #define NM_FIRST                (0U-  0U)       // generic to all controls
  279. #define NM_LAST                 (0U- 99U)
  280. #define LVN_FIRST               (0U-100U)       // listview
  281. #define LVN_LAST                (0U-199U)
  282. // Property sheet reserved      (0U-200U) -  (0U-299U) - see prsht.h
  283. #define HDN_FIRST               (0U-300U)       // header
  284. #define HDN_LAST                (0U-399U)
  285. #define TVN_FIRST               (0U-400U)       // treeview
  286. #define TVN_LAST                (0U-499U)
  287. #define TTN_FIRST               (0U-520U)       // tooltips
  288. #define TTN_LAST                (0U-549U)
  289. #define TCN_FIRST               (0U-550U)       // tab control
  290. #define TCN_LAST                (0U-580U)
  291. // Shell reserved               (0U-580U) -  (0U-589U)
  292. #define CDN_FIRST               (0U-601U)       // common dialog (new)
  293. #define CDN_LAST                (0U-699U)
  294. #define TBN_FIRST               (0U-700U)       // toolbar
  295. #define TBN_LAST                (0U-720U)
  296. #define UDN_FIRST               (0U-721)        // updown
  297. #define UDN_LAST                (0U-740)
  298. #if (_WIN32_IE >= 0x0300)
  299. #define MCN_FIRST               (0U-750U)       // monthcal
  300. #define MCN_LAST                (0U-759U)
  301. #define DTN_FIRST               (0U-760U)       // datetimepick
  302. #define DTN_LAST                (0U-799U)
  303. #define CBEN_FIRST              (0U-800U)       // combo box ex
  304. #define CBEN_LAST               (0U-830U)
  305. #define RBN_FIRST               (0U-831U)       // rebar
  306. #define RBN_LAST                (0U-859U)
  307. #endif
  308. #if (_WIN32_IE >= 0x0400)
  309. #define IPN_FIRST               (0U-860U)       // internet address
  310. #define IPN_LAST                (0U-879U)       // internet address
  311. #define SBN_FIRST               (0U-880U)       // status bar
  312. #define SBN_LAST                (0U-899U)
  313. #define PGN_FIRST               (0U-900U)       // Pager Control
  314. #define PGN_LAST                (0U-950U)
  315. #endif
  316. #if (_WIN32_IE >= 0x0500)
  317. #ifndef WMN_FIRST
  318. #define WMN_FIRST               (0U-1000U)
  319. #define WMN_LAST                (0U-1200U)
  320. #endif
  321. #endif
  322. #if (_WIN32_WINNT >= 0x0501)
  323. #define BCN_FIRST               (0U-1250U)
  324. #define BCN_LAST                (0U-1350U)
  325. #endif
  326. #define MSGF_COMMCTRL_BEGINDRAG     0x4200
  327. #define MSGF_COMMCTRL_SIZEHEADER    0x4201
  328. #define MSGF_COMMCTRL_DRAGSELECT    0x4202
  329. #define MSGF_COMMCTRL_TOOLBARCUST   0x4203
  330. #if (_WIN32_IE >= 0x0300)
  331. //==================== CUSTOM DRAW ==========================================
  332. // custom draw return flags
  333. // values under 0x00010000 are reserved for global custom draw values.
  334. // above that are for specific controls
  335. #define CDRF_DODEFAULT          0x00000000
  336. #define CDRF_NEWFONT            0x00000002
  337. #define CDRF_SKIPDEFAULT        0x00000004
  338. #define CDRF_NOTIFYPOSTPAINT    0x00000010
  339. #define CDRF_NOTIFYITEMDRAW     0x00000020
  340. #if (_WIN32_IE >= 0x0400)
  341. #define CDRF_NOTIFYSUBITEMDRAW  0x00000020  // flags are the same, we can distinguish by context
  342. #endif
  343. #define CDRF_NOTIFYPOSTERASE    0x00000040
  344. // drawstage flags
  345. // values under 0x00010000 are reserved for global custom draw values.
  346. // above that are for specific controls
  347. #define CDDS_PREPAINT           0x00000001
  348. #define CDDS_POSTPAINT          0x00000002
  349. #define CDDS_PREERASE           0x00000003
  350. #define CDDS_POSTERASE          0x00000004
  351. // the 0x000010000 bit means it's individual item specific
  352. #define CDDS_ITEM               0x00010000
  353. #define CDDS_ITEMPREPAINT       (CDDS_ITEM | CDDS_PREPAINT)
  354. #define CDDS_ITEMPOSTPAINT      (CDDS_ITEM | CDDS_POSTPAINT)
  355. #define CDDS_ITEMPREERASE       (CDDS_ITEM | CDDS_PREERASE)
  356. #define CDDS_ITEMPOSTERASE      (CDDS_ITEM | CDDS_POSTERASE)
  357. #if (_WIN32_IE >= 0x0400)
  358. #define CDDS_SUBITEM            0x00020000
  359. #endif
  360. // itemState flags
  361. #define CDIS_SELECTED       0x0001
  362. #define CDIS_GRAYED         0x0002
  363. #define CDIS_DISABLED       0x0004
  364. #define CDIS_CHECKED        0x0008
  365. #define CDIS_FOCUS          0x0010
  366. #define CDIS_DEFAULT        0x0020
  367. #define CDIS_HOT            0x0040
  368. #define CDIS_MARKED         0x0080
  369. #define CDIS_INDETERMINATE  0x0100
  370. #if (_WIN32_WINNT >= 0x501)
  371. #define CDIS_SHOWKEYBOARDCUES   0x0200
  372. #endif
  373. typedef struct tagNMCUSTOMDRAWINFO
  374. {
  375.     NMHDR hdr;
  376.     DWORD dwDrawStage;
  377.     HDC hdc;
  378.     RECT rc;
  379.     DWORD_PTR dwItemSpec;  // this is control specific, but it's how to specify an item.  valid only with CDDS_ITEM bit set
  380.     UINT  uItemState;
  381.     LPARAM lItemlParam;
  382. } NMCUSTOMDRAW, *LPNMCUSTOMDRAW;
  383. typedef struct tagNMTTCUSTOMDRAW
  384. {
  385.     NMCUSTOMDRAW nmcd;
  386.     UINT uDrawFlags;
  387. } NMTTCUSTOMDRAW, *LPNMTTCUSTOMDRAW;
  388. #endif      // _WIN32_IE >= 0x0300
  389. //====== IMAGE APIS ===========================================================
  390. #ifndef NOIMAGEAPIS
  391. #define CLR_NONE                0xFFFFFFFFL
  392. #define CLR_DEFAULT             0xFF000000L
  393. #ifndef HIMAGELIST
  394. struct _IMAGELIST;
  395. typedef struct _IMAGELIST* HIMAGELIST;
  396. #endif
  397. #ifndef IMAGELISTDRAWPARAMS
  398. #if (_WIN32_IE >= 0x0300)
  399. typedef struct _IMAGELISTDRAWPARAMS 
  400. {
  401.     DWORD       cbSize;
  402.     HIMAGELIST  himl;
  403.     int         i;
  404.     HDC         hdcDst;
  405.     int         x;
  406.     int         y;
  407.     int         cx;
  408.     int         cy;
  409.     int         xBitmap;        // x offest from the upperleft of bitmap
  410.     int         yBitmap;        // y offset from the upperleft of bitmap
  411.     COLORREF    rgbBk;
  412.     COLORREF    rgbFg;
  413.     UINT        fStyle;
  414.     DWORD       dwRop;
  415. #if (_WIN32_WINNT >= 0x501)
  416.     DWORD       fState;
  417.     DWORD       Frame;
  418.     COLORREF    crEffect;
  419. #endif
  420. } IMAGELISTDRAWPARAMS, *LPIMAGELISTDRAWPARAMS;
  421. #define IMAGELISTDRAWPARAMS_V3_SIZE CCSIZEOF_STRUCT(IMAGELISTDRAWPARAMS, dwRop)
  422. #endif      // _WIN32_IE >= 0x0300
  423. #endif
  424. #define ILC_MASK                0x00000001
  425. #define ILC_COLOR               0x00000000
  426. #define ILC_COLORDDB            0x000000FE
  427. #define ILC_COLOR4              0x00000004
  428. #define ILC_COLOR8              0x00000008
  429. #define ILC_COLOR16             0x00000010
  430. #define ILC_COLOR24             0x00000018
  431. #define ILC_COLOR32             0x00000020
  432. #define ILC_PALETTE             0x00000800      // (not implemented)
  433. #if (_WIN32_WINNT >= 0x501)
  434. #define ILC_MIRROR              0x00002000      // Mirror the icons contained, if the process is mirrored
  435. #define ILC_PERITEMMIRROR       0x00008000      // Causes the mirroring code to mirror each item when inserting a set of images, verses the whole strip
  436. #endif
  437. WINCOMMCTRLAPI HIMAGELIST  WINAPI ImageList_Create(int cx, int cy, UINT flags, int cInitial, int cGrow);
  438. WINCOMMCTRLAPI BOOL        WINAPI ImageList_Destroy(HIMAGELIST himl);
  439. WINCOMMCTRLAPI int         WINAPI ImageList_GetImageCount(HIMAGELIST himl);
  440. #if (_WIN32_IE >= 0x0300)
  441. WINCOMMCTRLAPI BOOL        WINAPI ImageList_SetImageCount(HIMAGELIST himl, UINT uNewCount);
  442. #endif
  443. WINCOMMCTRLAPI int         WINAPI ImageList_Add(HIMAGELIST himl, HBITMAP hbmImage, HBITMAP hbmMask);
  444. WINCOMMCTRLAPI int         WINAPI ImageList_ReplaceIcon(HIMAGELIST himl, int i, HICON hicon);
  445. WINCOMMCTRLAPI COLORREF    WINAPI ImageList_SetBkColor(HIMAGELIST himl, COLORREF clrBk);
  446. WINCOMMCTRLAPI COLORREF    WINAPI ImageList_GetBkColor(HIMAGELIST himl);
  447. WINCOMMCTRLAPI BOOL        WINAPI ImageList_SetOverlayImage(HIMAGELIST himl, int iImage, int iOverlay);
  448. #define     ImageList_AddIcon(himl, hicon) ImageList_ReplaceIcon(himl, -1, hicon)
  449. #define ILD_NORMAL              0x00000000
  450. #define ILD_TRANSPARENT         0x00000001
  451. #define ILD_MASK                0x00000010
  452. #define ILD_IMAGE               0x00000020
  453. #if (_WIN32_IE >= 0x0300)
  454. #define ILD_ROP                 0x00000040
  455. #endif
  456. #define ILD_BLEND25             0x00000002
  457. #define ILD_BLEND50             0x00000004
  458. #define ILD_OVERLAYMASK         0x00000F00
  459. #define INDEXTOOVERLAYMASK(i)   ((i) << 8)
  460. #define ILD_PRESERVEALPHA       0x00001000  // This preserves the alpha channel in dest
  461. #define ILD_SCALE               0x00002000  // Causes the image to be scaled to cx, cy instead of clipped
  462. #define ILD_DPISCALE            0x00004000
  463. #define ILD_SELECTED            ILD_BLEND50
  464. #define ILD_FOCUS               ILD_BLEND25
  465. #define ILD_BLEND               ILD_BLEND50
  466. #define CLR_HILIGHT             CLR_DEFAULT
  467. #define ILS_NORMAL              0x00000000 
  468. #define ILS_GLOW                0x00000001
  469. #define ILS_SHADOW              0x00000002
  470. #define ILS_SATURATE            0x00000004
  471. #define ILS_ALPHA               0x00000008
  472. WINCOMMCTRLAPI BOOL WINAPI ImageList_Draw(HIMAGELIST himl, int i, HDC hdcDst, int x, int y, UINT fStyle);
  473. #ifdef _WIN32
  474. WINCOMMCTRLAPI BOOL        WINAPI ImageList_Replace(HIMAGELIST himl, int i, HBITMAP hbmImage, HBITMAP hbmMask);
  475. WINCOMMCTRLAPI int         WINAPI ImageList_AddMasked(HIMAGELIST himl, HBITMAP hbmImage, COLORREF crMask);
  476. WINCOMMCTRLAPI BOOL        WINAPI ImageList_DrawEx(HIMAGELIST himl, int i, HDC hdcDst, int x, int y, int dx, int dy, COLORREF rgbBk, COLORREF rgbFg, UINT fStyle);
  477. #if (_WIN32_IE >= 0x0300)
  478. WINCOMMCTRLAPI BOOL        WINAPI ImageList_DrawIndirect(IMAGELISTDRAWPARAMS* pimldp);
  479. #endif
  480. WINCOMMCTRLAPI BOOL        WINAPI ImageList_Remove(HIMAGELIST himl, int i);
  481. WINCOMMCTRLAPI HICON       WINAPI ImageList_GetIcon(HIMAGELIST himl, int i, UINT flags);
  482. WINCOMMCTRLAPI HIMAGELIST  WINAPI ImageList_LoadImageA(HINSTANCE hi, LPCSTR lpbmp, int cx, int cGrow, COLORREF crMask, UINT uType, UINT uFlags);
  483. WINCOMMCTRLAPI HIMAGELIST  WINAPI ImageList_LoadImageW(HINSTANCE hi, LPCWSTR lpbmp, int cx, int cGrow, COLORREF crMask, UINT uType, UINT uFlags);
  484. #ifdef UNICODE
  485. #define ImageList_LoadImage     ImageList_LoadImageW
  486. #else
  487. #define ImageList_LoadImage     ImageList_LoadImageA
  488. #endif
  489. #if (_WIN32_IE >= 0x0300)
  490. #define ILCF_MOVE   (0x00000000)
  491. #define ILCF_SWAP   (0x00000001)
  492. WINCOMMCTRLAPI BOOL        WINAPI ImageList_Copy(HIMAGELIST himlDst, int iDst, HIMAGELIST himlSrc, int iSrc, UINT uFlags);
  493. #endif
  494. WINCOMMCTRLAPI BOOL        WINAPI ImageList_BeginDrag(HIMAGELIST himlTrack, int iTrack, int dxHotspot, int dyHotspot);
  495. WINCOMMCTRLAPI void        WINAPI ImageList_EndDrag();
  496. WINCOMMCTRLAPI BOOL        WINAPI ImageList_DragEnter(HWND hwndLock, int x, int y);
  497. WINCOMMCTRLAPI BOOL        WINAPI ImageList_DragLeave(HWND hwndLock);
  498. WINCOMMCTRLAPI BOOL        WINAPI ImageList_DragMove(int x, int y);
  499. WINCOMMCTRLAPI BOOL        WINAPI ImageList_SetDragCursorImage(HIMAGELIST himlDrag, int iDrag, int dxHotspot, int dyHotspot);
  500. WINCOMMCTRLAPI BOOL        WINAPI ImageList_DragShowNolock(BOOL fShow);
  501. WINCOMMCTRLAPI HIMAGELIST  WINAPI ImageList_GetDragImage(POINT *ppt,POINT *pptHotspot);
  502. #define     ImageList_RemoveAll(himl) ImageList_Remove(himl, -1)
  503. #define     ImageList_ExtractIcon(hi, himl, i) ImageList_GetIcon(himl, i, 0)
  504. #define     ImageList_LoadBitmap(hi, lpbmp, cx, cGrow, crMask) ImageList_LoadImage(hi, lpbmp, cx, cGrow, crMask, IMAGE_BITMAP, 0)
  505. #ifdef __IStream_INTERFACE_DEFINED__
  506. WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_Read(LPSTREAM pstm);
  507. WINCOMMCTRLAPI BOOL       WINAPI ImageList_Write(HIMAGELIST himl, LPSTREAM pstm);
  508. #if (_WIN32_WINNT >= 0x0501)
  509. #define ILP_NORMAL          0           // Writes or reads the stream using new sematics for this version of comctl32
  510. #define ILP_DOWNLEVEL       1           // Write or reads the stream using downlevel sematics.
  511. WINCOMMCTRLAPI HRESULT WINAPI ImageList_ReadEx(DWORD dwFlags, LPSTREAM pstm, REFIID riid, PVOID* ppv);
  512. WINCOMMCTRLAPI HRESULT WINAPI ImageList_WriteEx(HIMAGELIST himl, DWORD dwFlags, LPSTREAM pstm);
  513. #endif
  514. #endif
  515. #ifndef IMAGEINFO
  516. typedef struct _IMAGEINFO
  517. {
  518.     HBITMAP hbmImage;
  519.     HBITMAP hbmMask;
  520.     int     Unused1;
  521.     int     Unused2;
  522.     RECT    rcImage;
  523. } IMAGEINFO, *LPIMAGEINFO;
  524. #endif
  525. WINCOMMCTRLAPI BOOL        WINAPI ImageList_GetIconSize(HIMAGELIST himl, int *cx, int *cy);
  526. WINCOMMCTRLAPI BOOL        WINAPI ImageList_SetIconSize(HIMAGELIST himl, int cx, int cy);
  527. WINCOMMCTRLAPI BOOL        WINAPI ImageList_GetImageInfo(HIMAGELIST himl, int i, IMAGEINFO *pImageInfo);
  528. WINCOMMCTRLAPI HIMAGELIST  WINAPI ImageList_Merge(HIMAGELIST himl1, int i1, HIMAGELIST himl2, int i2, int dx, int dy);
  529. #if (_WIN32_IE >= 0x0400)
  530. WINCOMMCTRLAPI HIMAGELIST  WINAPI ImageList_Duplicate(HIMAGELIST himl);
  531. #endif
  532. #endif
  533. #endif
  534. //====== HEADER CONTROL =======================================================
  535. #ifndef NOHEADER
  536. #ifdef _WIN32
  537. #define WC_HEADERA              "SysHeader32"
  538. #define WC_HEADERW              L"SysHeader32"
  539. #ifdef UNICODE
  540. #define WC_HEADER               WC_HEADERW
  541. #else
  542. #define WC_HEADER               WC_HEADERA
  543. #endif
  544. #else
  545. #define WC_HEADER               "SysHeader"
  546. #endif
  547. // begin_r_commctrl
  548. #define HDS_HORZ                0x0000
  549. #define HDS_BUTTONS             0x0002
  550. #if (_WIN32_IE >= 0x0300)
  551. #define HDS_HOTTRACK            0x0004
  552. #endif
  553. #define HDS_HIDDEN              0x0008
  554. #if (_WIN32_IE >= 0x0300)
  555. #define HDS_DRAGDROP            0x0040
  556. #define HDS_FULLDRAG            0x0080
  557. #endif
  558. #if (_WIN32_IE >= 0x0500)
  559. #define HDS_FILTERBAR           0x0100
  560. #endif
  561. #if (_WIN32_WINNT >= 0x501)
  562. #define HDS_FLAT                0x0200
  563. #endif
  564. // end_r_commctrl
  565. #if (_WIN32_IE >= 0x0500)
  566. #define HDFT_ISSTRING       0x0000      // HD_ITEM.pvFilter points to a HD_TEXTFILTER
  567. #define HDFT_ISNUMBER       0x0001      // HD_ITEM.pvFilter points to a INT
  568. #define HDFT_HASNOVALUE     0x8000      // clear the filter, by setting this bit
  569. #ifdef UNICODE
  570. #define HD_TEXTFILTER HD_TEXTFILTERW
  571. #define HDTEXTFILTER HD_TEXTFILTERW
  572. #define LPHD_TEXTFILTER LPHD_TEXTFILTERW
  573. #define LPHDTEXTFILTER LPHD_TEXTFILTERW
  574. #else
  575. #define HD_TEXTFILTER HD_TEXTFILTERA
  576. #define HDTEXTFILTER HD_TEXTFILTERA
  577. #define LPHD_TEXTFILTER LPHD_TEXTFILTERA
  578. #define LPHDTEXTFILTER LPHD_TEXTFILTERA
  579. #endif
  580. typedef struct _HD_TEXTFILTERA
  581. {
  582.     LPSTR pszText;                      // [in] pointer to the buffer containing the filter (ANSI)
  583.     INT cchTextMax;                     // [in] max size of buffer/edit control buffer
  584. } HD_TEXTFILTERA, *LPHD_TEXTFILTERA;
  585. typedef struct _HD_TEXTFILTERW
  586. {
  587.     LPWSTR pszText;                     // [in] pointer to the buffer contiaining the filter (UNICODE)
  588.     INT cchTextMax;                     // [in] max size of buffer/edit control buffer
  589. } HD_TEXTFILTERW, *LPHD_TEXTFILTERW;
  590. #endif  // _WIN32_IE >= 0x0500
  591. #if (_WIN32_IE >= 0x0300)
  592. #define HD_ITEMA HDITEMA
  593. #define HD_ITEMW HDITEMW
  594. #else
  595. #define HDITEMW  HD_ITEMW
  596. #define HDITEMA  HD_ITEMA
  597. #endif
  598. #define HD_ITEM HDITEM
  599. typedef struct _HD_ITEMA
  600. {
  601.     UINT    mask;
  602.     int     cxy;
  603.     LPSTR   pszText;
  604.     HBITMAP hbm;
  605.     int     cchTextMax;
  606.     int     fmt;
  607.     LPARAM  lParam;
  608. #if (_WIN32_IE >= 0x0300)
  609.     int     iImage;        // index of bitmap in ImageList
  610.     int     iOrder;        // where to draw this item
  611. #endif
  612. #if (_WIN32_IE >= 0x0500)
  613.     UINT    type;           // [in] filter type (defined what pvFilter is a pointer to)
  614.     void *  pvFilter;       // [in] fillter data see above
  615. #endif
  616. } HDITEMA, *LPHDITEMA;
  617. #define HDITEMA_V1_SIZE CCSIZEOF_STRUCT(HDITEMA, lParam)
  618. #define HDITEMW_V1_SIZE CCSIZEOF_STRUCT(HDITEMW, lParam)
  619. typedef struct _HD_ITEMW
  620. {
  621.     UINT    mask;
  622.     int     cxy;
  623.     LPWSTR   pszText;
  624.     HBITMAP hbm;
  625.     int     cchTextMax;
  626.     int     fmt;
  627.     LPARAM  lParam;
  628. #if (_WIN32_IE >= 0x0300)
  629.     int     iImage;        // index of bitmap in ImageList
  630.     int     iOrder;
  631. #endif
  632. #if (_WIN32_IE >= 0x0500)
  633.     UINT    type;           // [in] filter type (defined what pvFilter is a pointer to)
  634.     void *  pvFilter;       // [in] fillter data see above
  635. #endif
  636. } HDITEMW, *LPHDITEMW;
  637. #ifdef UNICODE
  638. #define HDITEM HDITEMW
  639. #define LPHDITEM LPHDITEMW
  640. #define HDITEM_V1_SIZE HDITEMW_V1_SIZE
  641. #else
  642. #define HDITEM HDITEMA
  643. #define LPHDITEM LPHDITEMA
  644. #define HDITEM_V1_SIZE HDITEMA_V1_SIZE
  645. #endif
  646. #define HDI_WIDTH               0x0001
  647. #define HDI_HEIGHT              HDI_WIDTH
  648. #define HDI_TEXT                0x0002
  649. #define HDI_FORMAT              0x0004
  650. #define HDI_LPARAM              0x0008
  651. #define HDI_BITMAP              0x0010
  652. #if (_WIN32_IE >= 0x0300)
  653. #define HDI_IMAGE               0x0020
  654. #define HDI_DI_SETITEM          0x0040
  655. #define HDI_ORDER               0x0080
  656. #endif
  657. #if (_WIN32_IE >= 0x0500)
  658. #define HDI_FILTER              0x0100
  659. #endif
  660. #define HDF_LEFT                0x0000
  661. #define HDF_RIGHT               0x0001
  662. #define HDF_CENTER              0x0002
  663. #define HDF_JUSTIFYMASK         0x0003
  664. #define HDF_RTLREADING          0x0004
  665. #define HDF_OWNERDRAW           0x8000
  666. #define HDF_STRING              0x4000
  667. #define HDF_BITMAP              0x2000
  668. #if (_WIN32_IE >= 0x0300)
  669. #define HDF_BITMAP_ON_RIGHT     0x1000
  670. #define HDF_IMAGE               0x0800
  671. #endif
  672. #if (_WIN32_WINNT >= 0x501)
  673. #define HDF_SORTUP              0x0400
  674. #define HDF_SORTDOWN            0x0200
  675. #endif
  676. #define HDM_GETITEMCOUNT        (HDM_FIRST + 0)
  677. #define Header_GetItemCount(hwndHD) 
  678.     (int)SNDMSG((hwndHD), HDM_GETITEMCOUNT, 0, 0L)
  679. #define HDM_INSERTITEMA         (HDM_FIRST + 1)
  680. #define HDM_INSERTITEMW         (HDM_FIRST + 10)
  681. #ifdef UNICODE
  682. #define HDM_INSERTITEM          HDM_INSERTITEMW
  683. #else
  684. #define HDM_INSERTITEM          HDM_INSERTITEMA
  685. #endif
  686. #define Header_InsertItem(hwndHD, i, phdi) 
  687.     (int)SNDMSG((hwndHD), HDM_INSERTITEM, (WPARAM)(int)(i), (LPARAM)(const HD_ITEM *)(phdi))
  688. #define HDM_DELETEITEM          (HDM_FIRST + 2)
  689. #define Header_DeleteItem(hwndHD, i) 
  690.     (BOOL)SNDMSG((hwndHD), HDM_DELETEITEM, (WPARAM)(int)(i), 0L)
  691. #define HDM_GETITEMA            (HDM_FIRST + 3)
  692. #define HDM_GETITEMW            (HDM_FIRST + 11)
  693. #ifdef UNICODE
  694. #define HDM_GETITEM             HDM_GETITEMW
  695. #else
  696. #define HDM_GETITEM             HDM_GETITEMA
  697. #endif
  698. #define Header_GetItem(hwndHD, i, phdi) 
  699.     (BOOL)SNDMSG((hwndHD), HDM_GETITEM, (WPARAM)(int)(i), (LPARAM)(HD_ITEM *)(phdi))
  700. #define HDM_SETITEMA            (HDM_FIRST + 4)
  701. #define HDM_SETITEMW            (HDM_FIRST + 12)
  702. #ifdef UNICODE
  703. #define HDM_SETITEM             HDM_SETITEMW
  704. #else
  705. #define HDM_SETITEM             HDM_SETITEMA
  706. #endif
  707. #define Header_SetItem(hwndHD, i, phdi) 
  708.     (BOOL)SNDMSG((hwndHD), HDM_SETITEM, (WPARAM)(int)(i), (LPARAM)(const HD_ITEM *)(phdi))
  709. #if (_WIN32_IE >= 0x0300)
  710. #define HD_LAYOUT  HDLAYOUT
  711. #else
  712. #define HDLAYOUT   HD_LAYOUT
  713. #endif
  714. typedef struct _HD_LAYOUT
  715. {
  716.     RECT *prc;
  717.     WINDOWPOS *pwpos;
  718. } HDLAYOUT, *LPHDLAYOUT;
  719. #define HDM_LAYOUT              (HDM_FIRST + 5)
  720. #define Header_Layout(hwndHD, playout) 
  721.     (BOOL)SNDMSG((hwndHD), HDM_LAYOUT, 0, (LPARAM)(HD_LAYOUT *)(playout))
  722. #define HHT_NOWHERE             0x0001
  723. #define HHT_ONHEADER            0x0002
  724. #define HHT_ONDIVIDER           0x0004
  725. #define HHT_ONDIVOPEN           0x0008
  726. #if (_WIN32_IE >= 0x0500)
  727. #define HHT_ONFILTER            0x0010
  728. #define HHT_ONFILTERBUTTON      0x0020
  729. #endif
  730. #define HHT_ABOVE               0x0100
  731. #define HHT_BELOW               0x0200
  732. #define HHT_TORIGHT             0x0400
  733. #define HHT_TOLEFT              0x0800
  734. #if (_WIN32_IE >= 0x0300)
  735. #define HD_HITTESTINFO HDHITTESTINFO
  736. #else
  737. #define HDHITTESTINFO  HD_HITTESTINFO
  738. #endif
  739. typedef struct _HD_HITTESTINFO
  740. {
  741.     POINT pt;
  742.     UINT flags;
  743.     int iItem;
  744. } HDHITTESTINFO, *LPHDHITTESTINFO;
  745. #define HDM_HITTEST             (HDM_FIRST + 6)
  746. #if (_WIN32_IE >= 0x0300)
  747. #define HDM_GETITEMRECT         (HDM_FIRST + 7)
  748. #define Header_GetItemRect(hwnd, iItem, lprc) 
  749.         (BOOL)SNDMSG((hwnd), HDM_GETITEMRECT, (WPARAM)(iItem), (LPARAM)(lprc))
  750. #define HDM_SETIMAGELIST        (HDM_FIRST + 8)
  751. #define Header_SetImageList(hwnd, himl) 
  752.         (HIMAGELIST)SNDMSG((hwnd), HDM_SETIMAGELIST, 0, (LPARAM)(himl))
  753. #define HDM_GETIMAGELIST        (HDM_FIRST + 9)
  754. #define Header_GetImageList(hwnd) 
  755.         (HIMAGELIST)SNDMSG((hwnd), HDM_GETIMAGELIST, 0, 0)
  756. #define HDM_ORDERTOINDEX        (HDM_FIRST + 15)
  757. #define Header_OrderToIndex(hwnd, i) 
  758.         (int)SNDMSG((hwnd), HDM_ORDERTOINDEX, (WPARAM)(i), 0)
  759. #define HDM_CREATEDRAGIMAGE     (HDM_FIRST + 16)  // wparam = which item (by index)
  760. #define Header_CreateDragImage(hwnd, i) 
  761.         (HIMAGELIST)SNDMSG((hwnd), HDM_CREATEDRAGIMAGE, (WPARAM)(i), 0)
  762. #define HDM_GETORDERARRAY       (HDM_FIRST + 17)
  763. #define Header_GetOrderArray(hwnd, iCount, lpi) 
  764.         (BOOL)SNDMSG((hwnd), HDM_GETORDERARRAY, (WPARAM)(iCount), (LPARAM)(lpi))
  765. #define HDM_SETORDERARRAY       (HDM_FIRST + 18)
  766. #define Header_SetOrderArray(hwnd, iCount, lpi) 
  767.         (BOOL)SNDMSG((hwnd), HDM_SETORDERARRAY, (WPARAM)(iCount), (LPARAM)(lpi))
  768. // lparam = int array of size HDM_GETITEMCOUNT
  769. // the array specifies the order that all items should be displayed.
  770. // e.g.  { 2, 0, 1}
  771. // says the index 2 item should be shown in the 0ths position
  772. //      index 0 should be shown in the 1st position
  773. //      index 1 should be shown in the 2nd position
  774. #define HDM_SETHOTDIVIDER          (HDM_FIRST + 19)
  775. #define Header_SetHotDivider(hwnd, fPos, dw) 
  776.         (int)SNDMSG((hwnd), HDM_SETHOTDIVIDER, (WPARAM)(fPos), (LPARAM)(dw))
  777. // convenience message for external dragdrop
  778. // wParam = BOOL  specifying whether the lParam is a dwPos of the cursor
  779. //              position or the index of which divider to hotlight
  780. // lParam = depends on wParam  (-1 and wParm = FALSE turns off hotlight)
  781. #endif      // _WIN32_IE >= 0x0300
  782. #if (_WIN32_IE >= 0x0500)
  783. #define HDM_SETBITMAPMARGIN          (HDM_FIRST + 20)
  784. #define Header_SetBitmapMargin(hwnd, iWidth) 
  785.         (int)SNDMSG((hwnd), HDM_SETBITMAPMARGIN, (WPARAM)(iWidth), 0)
  786. #define HDM_GETBITMAPMARGIN          (HDM_FIRST + 21)
  787. #define Header_GetBitmapMargin(hwnd) 
  788.         (int)SNDMSG((hwnd), HDM_GETBITMAPMARGIN, 0, 0)
  789. #endif
  790. #if (_WIN32_IE >= 0x0400)
  791. #define HDM_SETUNICODEFORMAT   CCM_SETUNICODEFORMAT
  792. #define Header_SetUnicodeFormat(hwnd, fUnicode)  
  793.     (BOOL)SNDMSG((hwnd), HDM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
  794. #define HDM_GETUNICODEFORMAT   CCM_GETUNICODEFORMAT
  795. #define Header_GetUnicodeFormat(hwnd)  
  796.     (BOOL)SNDMSG((hwnd), HDM_GETUNICODEFORMAT, 0, 0)
  797. #endif
  798. #if (_WIN32_IE >= 0x0500)
  799. #define HDM_SETFILTERCHANGETIMEOUT  (HDM_FIRST+22)
  800. #define Header_SetFilterChangeTimeout(hwnd, i) 
  801.         (int)SNDMSG((hwnd), HDM_SETFILTERCHANGETIMEOUT, 0, (LPARAM)(i))
  802. #define HDM_EDITFILTER          (HDM_FIRST+23)
  803. #define Header_EditFilter(hwnd, i, fDiscardChanges) 
  804.         (int)SNDMSG((hwnd), HDM_EDITFILTER, (WPARAM)(i), MAKELPARAM(fDiscardChanges, 0))
  805. // Clear filter takes -1 as a column value to indicate that all
  806. // the filter should be cleared.  When this happens you will
  807. // only receive a single filter changed notification.
  808. #define HDM_CLEARFILTER         (HDM_FIRST+24)
  809. #define Header_ClearFilter(hwnd, i) 
  810.         (int)SNDMSG((hwnd), HDM_CLEARFILTER, (WPARAM)(i), 0)
  811. #define Header_ClearAllFilters(hwnd) 
  812.         (int)SNDMSG((hwnd), HDM_CLEARFILTER, (WPARAM)-1, 0)
  813. #endif
  814. #define HDN_ITEMCHANGINGA           (HDN_FIRST-0)
  815. #define HDN_ITEMCHANGINGW       (HDN_FIRST-20)
  816. #define HDN_ITEMCHANGEDA        (HDN_FIRST-1)
  817. #define HDN_ITEMCHANGEDW        (HDN_FIRST-21)
  818. #define HDN_ITEMCLICKA          (HDN_FIRST-2)
  819. #define HDN_ITEMCLICKW          (HDN_FIRST-22)
  820. #define HDN_ITEMDBLCLICKA       (HDN_FIRST-3)
  821. #define HDN_ITEMDBLCLICKW       (HDN_FIRST-23)
  822. #define HDN_DIVIDERDBLCLICKA    (HDN_FIRST-5)
  823. #define HDN_DIVIDERDBLCLICKW    (HDN_FIRST-25)
  824. #define HDN_BEGINTRACKA         (HDN_FIRST-6)
  825. #define HDN_BEGINTRACKW         (HDN_FIRST-26)
  826. #define HDN_ENDTRACKA           (HDN_FIRST-7)
  827. #define HDN_ENDTRACKW           (HDN_FIRST-27)
  828. #define HDN_TRACKA              (HDN_FIRST-8)
  829. #define HDN_TRACKW              (HDN_FIRST-28)
  830. #if (_WIN32_IE >= 0x0300)
  831. #define HDN_GETDISPINFOA        (HDN_FIRST-9)
  832. #define HDN_GETDISPINFOW        (HDN_FIRST-29)
  833. #define HDN_BEGINDRAG           (HDN_FIRST-10)
  834. #define HDN_ENDDRAG             (HDN_FIRST-11)
  835. #endif
  836. #if (_WIN32_IE >= 0x0500)
  837. #define HDN_FILTERCHANGE        (HDN_FIRST-12)
  838. #define HDN_FILTERBTNCLICK      (HDN_FIRST-13)
  839. #endif
  840. #ifdef UNICODE
  841. #define HDN_ITEMCHANGING         HDN_ITEMCHANGINGW
  842. #define HDN_ITEMCHANGED          HDN_ITEMCHANGEDW
  843. #define HDN_ITEMCLICK            HDN_ITEMCLICKW
  844. #define HDN_ITEMDBLCLICK         HDN_ITEMDBLCLICKW
  845. #define HDN_DIVIDERDBLCLICK      HDN_DIVIDERDBLCLICKW
  846. #define HDN_BEGINTRACK           HDN_BEGINTRACKW
  847. #define HDN_ENDTRACK             HDN_ENDTRACKW
  848. #define HDN_TRACK                HDN_TRACKW
  849. #if (_WIN32_IE >= 0x0300)
  850. #define HDN_GETDISPINFO          HDN_GETDISPINFOW
  851. #endif
  852. #else
  853. #define HDN_ITEMCHANGING         HDN_ITEMCHANGINGA
  854. #define HDN_ITEMCHANGED          HDN_ITEMCHANGEDA
  855. #define HDN_ITEMCLICK            HDN_ITEMCLICKA
  856. #define HDN_ITEMDBLCLICK         HDN_ITEMDBLCLICKA
  857. #define HDN_DIVIDERDBLCLICK      HDN_DIVIDERDBLCLICKA
  858. #define HDN_BEGINTRACK           HDN_BEGINTRACKA
  859. #define HDN_ENDTRACK             HDN_ENDTRACKA
  860. #define HDN_TRACK                HDN_TRACKA
  861. #if (_WIN32_IE >= 0x0300)
  862. #define HDN_GETDISPINFO          HDN_GETDISPINFOA
  863. #endif
  864. #endif
  865. #if (_WIN32_IE >= 0x0300)
  866. #define HD_NOTIFYA              NMHEADERA
  867. #define HD_NOTIFYW              NMHEADERW
  868. #else
  869. #define tagNMHEADERA            _HD_NOTIFY
  870. #define NMHEADERA               HD_NOTIFYA
  871. #define tagHMHEADERW            _HD_NOTIFYW
  872. #define NMHEADERW               HD_NOTIFYW
  873. #endif
  874. #define HD_NOTIFY               NMHEADER
  875. typedef struct tagNMHEADERA
  876. {
  877.     NMHDR   hdr;
  878.     int     iItem;
  879.     int     iButton;
  880.     HDITEMA *pitem;
  881. }  NMHEADERA, *LPNMHEADERA;
  882. typedef struct tagNMHEADERW
  883. {
  884.     NMHDR   hdr;
  885.     int     iItem;
  886.     int     iButton;
  887.     HDITEMW *pitem;
  888. } NMHEADERW, *LPNMHEADERW;
  889. #ifdef UNICODE
  890. #define NMHEADER                NMHEADERW
  891. #define LPNMHEADER              LPNMHEADERW
  892. #else
  893. #define NMHEADER                NMHEADERA
  894. #define LPNMHEADER              LPNMHEADERA
  895. #endif
  896. typedef struct tagNMHDDISPINFOW
  897. {
  898.     NMHDR   hdr;
  899.     int     iItem;
  900.     UINT    mask;
  901.     LPWSTR  pszText;
  902.     int     cchTextMax;
  903.     int     iImage;
  904.     LPARAM  lParam;
  905. } NMHDDISPINFOW, *LPNMHDDISPINFOW;
  906. typedef struct tagNMHDDISPINFOA
  907. {
  908.     NMHDR   hdr;
  909.     int     iItem;
  910.     UINT    mask;
  911.     LPSTR   pszText;
  912.     int     cchTextMax;
  913.     int     iImage;
  914.     LPARAM  lParam;
  915. } NMHDDISPINFOA, *LPNMHDDISPINFOA;
  916. #ifdef UNICODE
  917. #define NMHDDISPINFO            NMHDDISPINFOW
  918. #define LPNMHDDISPINFO          LPNMHDDISPINFOW
  919. #else
  920. #define NMHDDISPINFO            NMHDDISPINFOA
  921. #define LPNMHDDISPINFO          LPNMHDDISPINFOA
  922. #endif
  923. #if (_WIN32_IE >= 0x0500)
  924. typedef struct tagNMHDFILTERBTNCLICK
  925. {
  926.     NMHDR hdr;
  927.     INT iItem;
  928.     RECT rc;
  929. } NMHDFILTERBTNCLICK, *LPNMHDFILTERBTNCLICK;
  930. #endif
  931. #endif      // NOHEADER
  932. //====== TOOLBAR CONTROL ======================================================
  933. #ifndef NOTOOLBAR
  934. #ifdef _WIN32
  935. #define TOOLBARCLASSNAMEW       L"ToolbarWindow32"
  936. #define TOOLBARCLASSNAMEA       "ToolbarWindow32"
  937. #ifdef  UNICODE
  938. #define TOOLBARCLASSNAME        TOOLBARCLASSNAMEW
  939. #else
  940. #define TOOLBARCLASSNAME        TOOLBARCLASSNAMEA
  941. #endif
  942. #else
  943. #define TOOLBARCLASSNAME        "ToolbarWindow"
  944. #endif
  945. typedef struct _TBBUTTON {
  946.     int iBitmap;
  947.     int idCommand;
  948.     BYTE fsState;
  949.     BYTE fsStyle;
  950. #ifdef _WIN64
  951.     BYTE bReserved[6];          // padding for alignment
  952. #elif defined(_WIN32)
  953.     BYTE bReserved[2];          // padding for alignment
  954. #endif
  955.     DWORD_PTR dwData;
  956.     INT_PTR iString;
  957. } TBBUTTON, NEAR* PTBBUTTON, *LPTBBUTTON;
  958. typedef const TBBUTTON *LPCTBBUTTON;
  959. typedef struct _COLORMAP {
  960.     COLORREF from;
  961.     COLORREF to;
  962. } COLORMAP, *LPCOLORMAP;
  963. WINCOMMCTRLAPI HWND WINAPI CreateToolbarEx(HWND hwnd, DWORD ws, UINT wID, int nBitmaps,
  964.                         HINSTANCE hBMInst, UINT_PTR wBMID, LPCTBBUTTON lpButtons,
  965.                         int iNumButtons, int dxButton, int dyButton,
  966.                         int dxBitmap, int dyBitmap, UINT uStructSize);
  967. WINCOMMCTRLAPI HBITMAP WINAPI CreateMappedBitmap(HINSTANCE hInstance, INT_PTR idBitmap,
  968.                                   UINT wFlags, LPCOLORMAP lpColorMap,
  969.                                   int iNumMaps);
  970. #define CMB_MASKED              0x02
  971. #define TBSTATE_CHECKED         0x01
  972. #define TBSTATE_PRESSED         0x02
  973. #define TBSTATE_ENABLED         0x04
  974. #define TBSTATE_HIDDEN          0x08
  975. #define TBSTATE_INDETERMINATE   0x10
  976. #define TBSTATE_WRAP            0x20
  977. #if (_WIN32_IE >= 0x0300)
  978. #define TBSTATE_ELLIPSES        0x40
  979. #endif
  980. #if (_WIN32_IE >= 0x0400)
  981. #define TBSTATE_MARKED          0x80
  982. #endif
  983. #define TBSTYLE_BUTTON          0x0000  // obsolete; use BTNS_BUTTON instead
  984. #define TBSTYLE_SEP             0x0001  // obsolete; use BTNS_SEP instead
  985. #define TBSTYLE_CHECK           0x0002  // obsolete; use BTNS_CHECK instead
  986. #define TBSTYLE_GROUP           0x0004  // obsolete; use BTNS_GROUP instead
  987. #define TBSTYLE_CHECKGROUP      (TBSTYLE_GROUP | TBSTYLE_CHECK)     // obsolete; use BTNS_CHECKGROUP instead
  988. #if (_WIN32_IE >= 0x0300)
  989. #define TBSTYLE_DROPDOWN        0x0008  // obsolete; use BTNS_DROPDOWN instead
  990. #endif
  991. #if (_WIN32_IE >= 0x0400)
  992. #define TBSTYLE_AUTOSIZE        0x0010  // obsolete; use BTNS_AUTOSIZE instead
  993. #define TBSTYLE_NOPREFIX        0x0020  // obsolete; use BTNS_NOPREFIX instead
  994. #endif
  995. #define TBSTYLE_TOOLTIPS        0x0100
  996. #define TBSTYLE_WRAPABLE        0x0200
  997. #define TBSTYLE_ALTDRAG         0x0400
  998. #if (_WIN32_IE >= 0x0300)
  999. #define TBSTYLE_FLAT            0x0800
  1000. #define TBSTYLE_LIST            0x1000
  1001. #define TBSTYLE_CUSTOMERASE     0x2000
  1002. #endif
  1003. #if (_WIN32_IE >= 0x0400)
  1004. #define TBSTYLE_REGISTERDROP    0x4000
  1005. #define TBSTYLE_TRANSPARENT     0x8000
  1006. #define TBSTYLE_EX_DRAWDDARROWS 0x00000001
  1007. #endif
  1008. #if (_WIN32_IE >= 0x0500)
  1009. #define BTNS_BUTTON     TBSTYLE_BUTTON      // 0x0000
  1010. #define BTNS_SEP        TBSTYLE_SEP         // 0x0001
  1011. #define BTNS_CHECK      TBSTYLE_CHECK       // 0x0002
  1012. #define BTNS_GROUP      TBSTYLE_GROUP       // 0x0004
  1013. #define BTNS_CHECKGROUP TBSTYLE_CHECKGROUP  // (TBSTYLE_GROUP | TBSTYLE_CHECK)
  1014. #define BTNS_DROPDOWN   TBSTYLE_DROPDOWN    // 0x0008
  1015. #define BTNS_AUTOSIZE   TBSTYLE_AUTOSIZE    // 0x0010; automatically calculate the cx of the button
  1016. #define BTNS_NOPREFIX   TBSTYLE_NOPREFIX    // 0x0020; this button should not have accel prefix
  1017. #if (_WIN32_IE >= 0x0501)
  1018. #define BTNS_SHOWTEXT   0x0040              // ignored unless TBSTYLE_EX_MIXEDBUTTONS is set
  1019. #endif  // 0x0501
  1020. #define BTNS_WHOLEDROPDOWN  0x0080          // draw drop-down arrow, but without split arrow section
  1021. #endif
  1022. #if (_WIN32_IE >= 0x0501)
  1023. #define TBSTYLE_EX_MIXEDBUTTONS             0x00000008
  1024. #define TBSTYLE_EX_HIDECLIPPEDBUTTONS       0x00000010  // don't show partially obscured buttons
  1025. #endif  // 0x0501
  1026. #if (_WIN32_WINNT >= 0x501)
  1027. #define TBSTYLE_EX_DOUBLEBUFFER             0x00000080 // Double Buffer the toolbar
  1028. #endif
  1029. #if (_WIN32_IE >= 0x0400)
  1030. // Custom Draw Structure
  1031. typedef struct _NMTBCUSTOMDRAW {
  1032.     NMCUSTOMDRAW nmcd;
  1033.     HBRUSH hbrMonoDither;
  1034.     HBRUSH hbrLines;                // For drawing lines on buttons
  1035.     HPEN hpenLines;                 // For drawing lines on buttons
  1036.     COLORREF clrText;               // Color of text
  1037.     COLORREF clrMark;               // Color of text bk when marked. (only if TBSTATE_MARKED)
  1038.     COLORREF clrTextHighlight;      // Color of text when highlighted
  1039.     COLORREF clrBtnFace;            // Background of the button
  1040.     COLORREF clrBtnHighlight;       // 3D highlight
  1041.     COLORREF clrHighlightHotTrack;  // In conjunction with fHighlightHotTrack
  1042.                                     // will cause button to highlight like a menu
  1043.     RECT rcText;                    // Rect for text
  1044.     int nStringBkMode;
  1045.     int nHLStringBkMode;
  1046. #if (_WIN32_WINNT >= 0x501)
  1047.     int iListGap;
  1048. #endif
  1049. } NMTBCUSTOMDRAW, * LPNMTBCUSTOMDRAW;
  1050. // Toolbar custom draw return flags
  1051. #define TBCDRF_NOEDGES              0x00010000  // Don't draw button edges
  1052. #define TBCDRF_HILITEHOTTRACK       0x00020000  // Use color of the button bk when hottracked
  1053. #define TBCDRF_NOOFFSET             0x00040000  // Don't offset button if pressed
  1054. #define TBCDRF_NOMARK               0x00080000  // Don't draw default highlight of image/text for TBSTATE_MARKED
  1055. #define TBCDRF_NOETCHEDEFFECT       0x00100000  // Don't draw etched effect for disabled items
  1056. #endif
  1057. #if (_WIN32_IE >= 0x0500)
  1058. #define TBCDRF_BLENDICON            0x00200000  // Use ILD_BLEND50 on the icon image
  1059. #define TBCDRF_NOBACKGROUND         0x00400000  // Use ILD_BLEND50 on the icon image
  1060. #endif
  1061. #define TB_ENABLEBUTTON         (WM_USER + 1)
  1062. #define TB_CHECKBUTTON          (WM_USER + 2)
  1063. #define TB_PRESSBUTTON          (WM_USER + 3)
  1064. #define TB_HIDEBUTTON           (WM_USER + 4)
  1065. #define TB_INDETERMINATE        (WM_USER + 5)
  1066. #if (_WIN32_IE >= 0x0400)
  1067. #define TB_MARKBUTTON           (WM_USER + 6)
  1068. #endif
  1069. #define TB_ISBUTTONENABLED      (WM_USER + 9)
  1070. #define TB_ISBUTTONCHECKED      (WM_USER + 10)
  1071. #define TB_ISBUTTONPRESSED      (WM_USER + 11)
  1072. #define TB_ISBUTTONHIDDEN       (WM_USER + 12)
  1073. #define TB_ISBUTTONINDETERMINATE (WM_USER + 13)
  1074. #if (_WIN32_IE >= 0x0400)
  1075. #define TB_ISBUTTONHIGHLIGHTED  (WM_USER + 14)
  1076. #endif
  1077. #define TB_SETSTATE             (WM_USER + 17)
  1078. #define TB_GETSTATE             (WM_USER + 18)
  1079. #define TB_ADDBITMAP            (WM_USER + 19)
  1080. #ifdef _WIN32
  1081. typedef struct tagTBADDBITMAP {
  1082.         HINSTANCE       hInst;
  1083.         UINT_PTR        nID;
  1084. } TBADDBITMAP, *LPTBADDBITMAP;
  1085. #define HINST_COMMCTRL          ((HINSTANCE)-1)
  1086. #define IDB_STD_SMALL_COLOR     0
  1087. #define IDB_STD_LARGE_COLOR     1
  1088. #define IDB_VIEW_SMALL_COLOR    4
  1089. #define IDB_VIEW_LARGE_COLOR    5
  1090. #if (_WIN32_IE >= 0x0300)
  1091. #define IDB_HIST_SMALL_COLOR    8
  1092. #define IDB_HIST_LARGE_COLOR    9
  1093. #endif
  1094. // icon indexes for standard bitmap
  1095. #define STD_CUT                 0
  1096. #define STD_COPY                1
  1097. #define STD_PASTE               2
  1098. #define STD_UNDO                3
  1099. #define STD_REDOW               4
  1100. #define STD_DELETE              5
  1101. #define STD_FILENEW             6
  1102. #define STD_FILEOPEN            7
  1103. #define STD_FILESAVE            8
  1104. #define STD_PRINTPRE            9
  1105. #define STD_PROPERTIES          10
  1106. #define STD_HELP                11
  1107. #define STD_FIND                12
  1108. #define STD_REPLACE             13
  1109. #define STD_PRINT               14
  1110. // icon indexes for standard view bitmap
  1111. #define VIEW_LARGEICONS         0
  1112. #define VIEW_SMALLICONS         1
  1113. #define VIEW_LIST               2
  1114. #define VIEW_DETAILS            3
  1115. #define VIEW_SORTNAME           4
  1116. #define VIEW_SORTSIZE           5
  1117. #define VIEW_SORTDATE           6
  1118. #define VIEW_SORTTYPE           7
  1119. #define VIEW_PARENTFOLDER       8
  1120. #define VIEW_NETCONNECT         9
  1121. #define VIEW_NETDISCONNECT      10
  1122. #define VIEW_NEWFOLDER          11
  1123. #if (_WIN32_IE >= 0x0400)
  1124. #define VIEW_VIEWMENU           12
  1125. #endif
  1126. #if (_WIN32_IE >= 0x0300)
  1127. #define HIST_BACK               0
  1128. #define HIST_FORWARD            1
  1129. #define HIST_FAVORITES          2
  1130. #define HIST_ADDTOFAVORITES     3
  1131. #define HIST_VIEWTREE           4
  1132. #endif
  1133. #endif
  1134. #if (_WIN32_IE >= 0x0400)
  1135. #define TB_ADDBUTTONSA          (WM_USER + 20)
  1136. #define TB_INSERTBUTTONA        (WM_USER + 21)
  1137. #else
  1138. #define TB_ADDBUTTONS           (WM_USER + 20)
  1139. #define TB_INSERTBUTTON         (WM_USER + 21)
  1140. #endif
  1141. #define TB_DELETEBUTTON         (WM_USER + 22)
  1142. #define TB_GETBUTTON            (WM_USER + 23)
  1143. #define TB_BUTTONCOUNT          (WM_USER + 24)
  1144. #define TB_COMMANDTOINDEX       (WM_USER + 25)
  1145. #ifdef _WIN32
  1146. typedef struct tagTBSAVEPARAMSA {
  1147.     HKEY hkr;
  1148.     LPCSTR pszSubKey;
  1149.     LPCSTR pszValueName;
  1150. } TBSAVEPARAMSA, *LPTBSAVEPARAMSA;
  1151. typedef struct tagTBSAVEPARAMSW {
  1152.     HKEY hkr;
  1153.     LPCWSTR pszSubKey;
  1154.     LPCWSTR pszValueName;
  1155. } TBSAVEPARAMSW, *LPTBSAVEPARAMW;
  1156. #ifdef UNICODE
  1157. #define TBSAVEPARAMS            TBSAVEPARAMSW
  1158. #define LPTBSAVEPARAMS          LPTBSAVEPARAMSW
  1159. #else
  1160. #define TBSAVEPARAMS            TBSAVEPARAMSA
  1161. #define LPTBSAVEPARAMS          LPTBSAVEPARAMSA
  1162. #endif
  1163. #endif  // _WIN32
  1164. #define TB_SAVERESTOREA         (WM_USER + 26)
  1165. #define TB_SAVERESTOREW         (WM_USER + 76)
  1166. #define TB_CUSTOMIZE            (WM_USER + 27)
  1167. #define TB_ADDSTRINGA           (WM_USER + 28)
  1168. #define TB_ADDSTRINGW           (WM_USER + 77)
  1169. #define TB_GETITEMRECT          (WM_USER + 29)
  1170. #define TB_BUTTONSTRUCTSIZE     (WM_USER + 30)
  1171. #define TB_SETBUTTONSIZE        (WM_USER + 31)
  1172. #define TB_SETBITMAPSIZE        (WM_USER + 32)
  1173. #define TB_AUTOSIZE             (WM_USER + 33)
  1174. #define TB_GETTOOLTIPS          (WM_USER + 35)
  1175. #define TB_SETTOOLTIPS          (WM_USER + 36)
  1176. #define TB_SETPARENT            (WM_USER + 37)
  1177. #define TB_SETROWS              (WM_USER + 39)
  1178. #define TB_GETROWS              (WM_USER + 40)
  1179. #define TB_SETCMDID             (WM_USER + 42)
  1180. #define TB_CHANGEBITMAP         (WM_USER + 43)
  1181. #define TB_GETBITMAP            (WM_USER + 44)
  1182. #define TB_GETBUTTONTEXTA       (WM_USER + 45)
  1183. #define TB_GETBUTTONTEXTW       (WM_USER + 75)
  1184. #define TB_REPLACEBITMAP        (WM_USER + 46)
  1185. #if (_WIN32_IE >= 0x0300)
  1186. #define TB_SETINDENT            (WM_USER + 47)
  1187. #define TB_SETIMAGELIST         (WM_USER + 48)
  1188. #define TB_GETIMAGELIST         (WM_USER + 49)
  1189. #define TB_LOADIMAGES           (WM_USER + 50)
  1190. #define TB_GETRECT              (WM_USER + 51) // wParam is the Cmd instead of index
  1191. #define TB_SETHOTIMAGELIST      (WM_USER + 52)
  1192. #define TB_GETHOTIMAGELIST      (WM_USER + 53)
  1193. #define TB_SETDISABLEDIMAGELIST (WM_USER + 54)
  1194. #define TB_GETDISABLEDIMAGELIST (WM_USER + 55)
  1195. #define TB_SETSTYLE             (WM_USER + 56)
  1196. #define TB_GETSTYLE             (WM_USER + 57)
  1197. #define TB_GETBUTTONSIZE        (WM_USER + 58)
  1198. #define TB_SETBUTTONWIDTH       (WM_USER + 59)
  1199. #define TB_SETMAXTEXTROWS       (WM_USER + 60)
  1200. #define TB_GETTEXTROWS          (WM_USER + 61)
  1201. #endif      // _WIN32_IE >= 0x0300
  1202. #ifdef UNICODE
  1203. #define TB_GETBUTTONTEXT        TB_GETBUTTONTEXTW
  1204. #define TB_SAVERESTORE          TB_SAVERESTOREW
  1205. #define TB_ADDSTRING            TB_ADDSTRINGW
  1206. #else
  1207. #define TB_GETBUTTONTEXT        TB_GETBUTTONTEXTA
  1208. #define TB_SAVERESTORE          TB_SAVERESTOREA
  1209. #define TB_ADDSTRING            TB_ADDSTRINGA
  1210. #endif
  1211. #if (_WIN32_IE >= 0x0400)
  1212. #define TB_GETOBJECT            (WM_USER + 62)  // wParam == IID, lParam void **ppv
  1213. #define TB_GETHOTITEM           (WM_USER + 71)
  1214. #define TB_SETHOTITEM           (WM_USER + 72)  // wParam == iHotItem
  1215. #define TB_SETANCHORHIGHLIGHT   (WM_USER + 73)  // wParam == TRUE/FALSE
  1216. #define TB_GETANCHORHIGHLIGHT   (WM_USER + 74)
  1217. #define TB_MAPACCELERATORA      (WM_USER + 78)  // wParam == ch, lParam int * pidBtn
  1218. typedef struct {
  1219.     int   iButton;
  1220.     DWORD dwFlags;
  1221. } TBINSERTMARK, * LPTBINSERTMARK;
  1222. #define TBIMHT_AFTER      0x00000001 // TRUE = insert After iButton, otherwise before
  1223. #define TBIMHT_BACKGROUND 0x00000002 // TRUE iff missed buttons completely
  1224. #define TB_GETINSERTMARK        (WM_USER + 79)  // lParam == LPTBINSERTMARK
  1225. #define TB_SETINSERTMARK        (WM_USER + 80)  // lParam == LPTBINSERTMARK
  1226. #define TB_INSERTMARKHITTEST    (WM_USER + 81)  // wParam == LPPOINT lParam == LPTBINSERTMARK
  1227. #define TB_MOVEBUTTON           (WM_USER + 82)
  1228. #define TB_GETMAXSIZE           (WM_USER + 83)  // lParam == LPSIZE
  1229. #define TB_SETEXTENDEDSTYLE     (WM_USER + 84)  // For TBSTYLE_EX_*
  1230. #define TB_GETEXTENDEDSTYLE     (WM_USER + 85)  // For TBSTYLE_EX_*
  1231. #define TB_GETPADDING           (WM_USER + 86)
  1232. #define TB_SETPADDING           (WM_USER + 87)
  1233. #define TB_SETINSERTMARKCOLOR   (WM_USER + 88)
  1234. #define TB_GETINSERTMARKCOLOR   (WM_USER + 89)
  1235. #define TB_SETCOLORSCHEME       CCM_SETCOLORSCHEME  // lParam is color scheme
  1236. #define TB_GETCOLORSCHEME       CCM_GETCOLORSCHEME      // fills in COLORSCHEME pointed to by lParam
  1237. #define TB_SETUNICODEFORMAT     CCM_SETUNICODEFORMAT
  1238. #define TB_GETUNICODEFORMAT     CCM_GETUNICODEFORMAT
  1239. #define TB_MAPACCELERATORW      (WM_USER + 90)  // wParam == ch, lParam int * pidBtn
  1240. #ifdef UNICODE
  1241. #define TB_MAPACCELERATOR       TB_MAPACCELERATORW
  1242. #else
  1243. #define TB_MAPACCELERATOR       TB_MAPACCELERATORA
  1244. #endif
  1245. #endif  // _WIN32_IE >= 0x0400
  1246. typedef struct {
  1247.     HINSTANCE       hInstOld;
  1248.     UINT_PTR        nIDOld;
  1249.     HINSTANCE       hInstNew;
  1250.     UINT_PTR        nIDNew;
  1251.     int             nButtons;
  1252. } TBREPLACEBITMAP, *LPTBREPLACEBITMAP;
  1253. #ifdef _WIN32
  1254. #define TBBF_LARGE              0x0001
  1255. #define TB_GETBITMAPFLAGS       (WM_USER + 41)
  1256. #if (_WIN32_IE >= 0x0400)
  1257. #define TBIF_IMAGE              0x00000001
  1258. #define TBIF_TEXT               0x00000002
  1259. #define TBIF_STATE              0x00000004
  1260. #define TBIF_STYLE              0x00000008
  1261. #define TBIF_LPARAM             0x00000010
  1262. #define TBIF_COMMAND            0x00000020
  1263. #define TBIF_SIZE               0x00000040
  1264. #if (_WIN32_IE >= 0x0500)
  1265. #define TBIF_BYINDEX            0x80000000 // this specifies that the wparam in Get/SetButtonInfo is an index, not id
  1266. #endif
  1267. typedef struct {
  1268.     UINT cbSize;
  1269.     DWORD dwMask;
  1270.     int idCommand;
  1271.     int iImage;
  1272.     BYTE fsState;
  1273.     BYTE fsStyle;
  1274.     WORD cx;
  1275.     DWORD_PTR lParam;
  1276.     LPSTR pszText;
  1277.     int cchText;
  1278. } TBBUTTONINFOA, *LPTBBUTTONINFOA;
  1279. typedef struct {
  1280.     UINT cbSize;
  1281.     DWORD dwMask;
  1282.     int idCommand;
  1283.     int iImage;
  1284.     BYTE fsState;
  1285.     BYTE fsStyle;
  1286.     WORD cx;
  1287.     DWORD_PTR lParam;
  1288.     LPWSTR pszText;
  1289.     int cchText;
  1290. } TBBUTTONINFOW, *LPTBBUTTONINFOW;
  1291. #ifdef UNICODE
  1292. #define TBBUTTONINFO TBBUTTONINFOW
  1293. #define LPTBBUTTONINFO LPTBBUTTONINFOW
  1294. #else
  1295. #define TBBUTTONINFO TBBUTTONINFOA
  1296. #define LPTBBUTTONINFO LPTBBUTTONINFOA
  1297. #endif
  1298. // BUTTONINFO APIs do NOT support the string pool.
  1299. #define TB_GETBUTTONINFOW        (WM_USER + 63)
  1300. #define TB_SETBUTTONINFOW        (WM_USER + 64)
  1301. #define TB_GETBUTTONINFOA        (WM_USER + 65)
  1302. #define TB_SETBUTTONINFOA        (WM_USER + 66)
  1303. #ifdef UNICODE
  1304. #define TB_GETBUTTONINFO        TB_GETBUTTONINFOW
  1305. #define TB_SETBUTTONINFO        TB_SETBUTTONINFOW
  1306. #else
  1307. #define TB_GETBUTTONINFO        TB_GETBUTTONINFOA
  1308. #define TB_SETBUTTONINFO        TB_SETBUTTONINFOA
  1309. #endif
  1310. #define TB_INSERTBUTTONW        (WM_USER + 67)
  1311. #define TB_ADDBUTTONSW          (WM_USER + 68)
  1312. #define TB_HITTEST              (WM_USER + 69)
  1313. // New post Win95/NT4 for InsertButton and AddButton.  if iString member
  1314. // is a pointer to a string, it will be handled as a string like listview
  1315. // (although LPSTR_TEXTCALLBACK is not supported).
  1316. #ifdef UNICODE
  1317. #define TB_INSERTBUTTON         TB_INSERTBUTTONW
  1318. #define TB_ADDBUTTONS           TB_ADDBUTTONSW
  1319. #else
  1320. #define TB_INSERTBUTTON         TB_INSERTBUTTONA
  1321. #define TB_ADDBUTTONS           TB_ADDBUTTONSA
  1322. #endif
  1323. #define TB_SETDRAWTEXTFLAGS     (WM_USER + 70)  // wParam == mask lParam == bit values
  1324. #endif  // _WIN32_IE >= 0x0400
  1325. #if (_WIN32_IE >= 0x0500)
  1326. #define TB_GETSTRINGW           (WM_USER + 91)
  1327. #define TB_GETSTRINGA           (WM_USER + 92)
  1328. #ifdef UNICODE
  1329. #define TB_GETSTRING            TB_GETSTRINGW
  1330. #else
  1331. #define TB_GETSTRING            TB_GETSTRINGA
  1332. #endif
  1333. #endif  // _WIN32_IE >= 0x0500
  1334. #if (_WIN32_WINNT >= 0x501)
  1335. #define TBMF_PAD                0x00000001
  1336. #define TBMF_BARPAD             0x00000002
  1337. #define TBMF_BUTTONSPACING      0x00000004
  1338. typedef struct {
  1339.     UINT cbSize;
  1340.     DWORD dwMask;
  1341.     int cxPad;        // PAD
  1342.     int cyPad;
  1343.     int cxBarPad;     // BARPAD
  1344.     int cyBarPad;
  1345.     int cxButtonSpacing;   // BUTTONSPACING
  1346.     int cyButtonSpacing;
  1347. } TBMETRICS, * LPTBMETRICS;
  1348. #define TB_GETMETRICS           (WM_USER + 101)
  1349. #define TB_SETMETRICS           (WM_USER + 102)
  1350. #endif
  1351. #if (_WIN32_WINNT >= 0x501)
  1352. #define TB_SETWINDOWTHEME       CCM_SETWINDOWTHEME
  1353. #endif
  1354. #define TBN_GETBUTTONINFOA      (TBN_FIRST-0)
  1355. #define TBN_BEGINDRAG           (TBN_FIRST-1)
  1356. #define TBN_ENDDRAG             (TBN_FIRST-2)
  1357. #define TBN_BEGINADJUST         (TBN_FIRST-3)
  1358. #define TBN_ENDADJUST           (TBN_FIRST-4)
  1359. #define TBN_RESET               (TBN_FIRST-5)
  1360. #define TBN_QUERYINSERT         (TBN_FIRST-6)
  1361. #define TBN_QUERYDELETE         (TBN_FIRST-7)
  1362. #define TBN_TOOLBARCHANGE       (TBN_FIRST-8)
  1363. #define TBN_CUSTHELP            (TBN_FIRST-9)
  1364. #if (_WIN32_IE >= 0x0300)
  1365. #define TBN_DROPDOWN            (TBN_FIRST - 10)
  1366. #endif
  1367. #if (_WIN32_IE >= 0x0400)
  1368. #define TBN_GETOBJECT           (TBN_FIRST - 12)
  1369. // Structure for TBN_HOTITEMCHANGE notification
  1370. //
  1371. typedef struct tagNMTBHOTITEM
  1372. {
  1373.     NMHDR   hdr;
  1374.     int     idOld;
  1375.     int     idNew;
  1376.     DWORD   dwFlags;           // HICF_*
  1377. } NMTBHOTITEM, * LPNMTBHOTITEM;
  1378. // Hot item change flags
  1379. #define HICF_OTHER          0x00000000
  1380. #define HICF_MOUSE          0x00000001          // Triggered by mouse
  1381. #define HICF_ARROWKEYS      0x00000002          // Triggered by arrow keys
  1382. #define HICF_ACCELERATOR    0x00000004          // Triggered by accelerator
  1383. #define HICF_DUPACCEL       0x00000008          // This accelerator is not unique
  1384. #define HICF_ENTERING       0x00000010          // idOld is invalid
  1385. #define HICF_LEAVING        0x00000020          // idNew is invalid
  1386. #define HICF_RESELECT       0x00000040          // hot item reselected
  1387. #define HICF_LMOUSE         0x00000080          // left mouse button selected
  1388. #define HICF_TOGGLEDROPDOWN 0x00000100          // Toggle button's dropdown state
  1389. #define TBN_HOTITEMCHANGE       (TBN_FIRST - 13)
  1390. #define TBN_DRAGOUT             (TBN_FIRST - 14) // this is sent when the user clicks down on a button then drags off the button
  1391. #define TBN_DELETINGBUTTON      (TBN_FIRST - 15) // uses TBNOTIFY
  1392. #define TBN_GETDISPINFOA        (TBN_FIRST - 16) // This is sent when the  toolbar needs  some display information
  1393. #define TBN_GETDISPINFOW        (TBN_FIRST - 17) // This is sent when the  toolbar needs  some display information
  1394. #define TBN_GETINFOTIPA         (TBN_FIRST - 18)
  1395. #define TBN_GETINFOTIPW         (TBN_FIRST - 19)
  1396. #define TBN_GETBUTTONINFOW      (TBN_FIRST - 20)
  1397. #if (_WIN32_IE >= 0x0500)
  1398. #define TBN_RESTORE             (TBN_FIRST - 21)
  1399. #define TBN_SAVE                (TBN_FIRST - 22)
  1400. #define TBN_INITCUSTOMIZE       (TBN_FIRST - 23)
  1401. #define    TBNRF_HIDEHELP       0x00000001
  1402. #define    TBNRF_ENDCUSTOMIZE   0x00000002
  1403. #endif // (_WIN32_IE >= 0x0500)
  1404. #if (_WIN32_IE >= 0x0500)
  1405. typedef struct tagNMTBSAVE
  1406. {
  1407.     NMHDR hdr;
  1408.     DWORD* pData;
  1409.     DWORD* pCurrent;
  1410.     UINT cbData;
  1411.     int iItem;
  1412.     int cButtons;
  1413.     TBBUTTON tbButton;
  1414. } NMTBSAVE, *LPNMTBSAVE;
  1415. typedef struct tagNMTBRESTORE
  1416. {
  1417.     NMHDR hdr;
  1418.     DWORD* pData;
  1419.     DWORD* pCurrent;
  1420.     UINT cbData;
  1421.     int iItem;
  1422.     int cButtons;
  1423.     int cbBytesPerRecord;
  1424.     TBBUTTON tbButton;
  1425. } NMTBRESTORE, *LPNMTBRESTORE;
  1426. #endif // (_WIN32_IE >= 0x0500)
  1427. typedef struct tagNMTBGETINFOTIPA
  1428. {
  1429.     NMHDR hdr;
  1430.     LPSTR pszText;
  1431.     int cchTextMax;
  1432.     int iItem;
  1433.     LPARAM lParam;
  1434. } NMTBGETINFOTIPA, *LPNMTBGETINFOTIPA;
  1435. typedef struct tagNMTBGETINFOTIPW
  1436. {
  1437.     NMHDR hdr;
  1438.     LPWSTR pszText;
  1439.     int cchTextMax;
  1440.     int iItem;
  1441.     LPARAM lParam;
  1442. } NMTBGETINFOTIPW, *LPNMTBGETINFOTIPW;
  1443. #ifdef UNICODE
  1444. #define TBN_GETINFOTIP          TBN_GETINFOTIPW
  1445. #define NMTBGETINFOTIP          NMTBGETINFOTIPW
  1446. #define LPNMTBGETINFOTIP        LPNMTBGETINFOTIPW
  1447. #else
  1448. #define TBN_GETINFOTIP          TBN_GETINFOTIPA
  1449. #define NMTBGETINFOTIP          NMTBGETINFOTIPA
  1450. #define LPNMTBGETINFOTIP        LPNMTBGETINFOTIPA
  1451. #endif
  1452. #define TBNF_IMAGE              0x00000001
  1453. #define TBNF_TEXT               0x00000002
  1454. #define TBNF_DI_SETITEM         0x10000000
  1455. typedef struct {
  1456.     NMHDR  hdr;
  1457.     DWORD dwMask;     // [in] Specifies the values requested .[out] Client ask the data to be set for future use
  1458.     int idCommand;    // [in] id of button we're requesting info for
  1459.     DWORD_PTR lParam;  // [in] lParam of button
  1460.     int iImage;       // [out] image index
  1461.     LPSTR pszText;    // [out] new text for item
  1462.     int cchText;      // [in] size of buffer pointed to by pszText
  1463. } NMTBDISPINFOA, *LPNMTBDISPINFOA;
  1464. typedef struct {
  1465.     NMHDR hdr;
  1466.     DWORD dwMask;      //[in] Specifies the values requested .[out] Client ask the data to be set for future use
  1467.     int idCommand;    // [in] id of button we're requesting info for
  1468.     DWORD_PTR lParam;  // [in] lParam of button
  1469.     int iImage;       // [out] image index
  1470.     LPWSTR pszText;   // [out] new text for item
  1471.     int cchText;      // [in] size of buffer pointed to by pszText
  1472. } NMTBDISPINFOW, *LPNMTBDISPINFOW;
  1473. #ifdef UNICODE
  1474. #define TBN_GETDISPINFO       TBN_GETDISPINFOW
  1475. #define NMTBDISPINFO          NMTBDISPINFOW
  1476. #define LPNMTBDISPINFO        LPNMTBDISPINFOW
  1477. #else
  1478. #define TBN_GETDISPINFO       TBN_GETDISPINFOA
  1479. #define NMTBDISPINFO          NMTBDISPINFOA
  1480. #define LPNMTBDISPINFO        LPNMTBDISPINFOA
  1481. #endif
  1482. // Return codes for TBN_DROPDOWN
  1483. #define TBDDRET_DEFAULT         0
  1484. #define TBDDRET_NODEFAULT       1
  1485. #define TBDDRET_TREATPRESSED    2       // Treat as a standard press button
  1486. #endif
  1487. #ifdef UNICODE
  1488. #define TBN_GETBUTTONINFO       TBN_GETBUTTONINFOW
  1489. #else
  1490. #define TBN_GETBUTTONINFO       TBN_GETBUTTONINFOA
  1491. #endif
  1492. #if (_WIN32_IE >= 0x0300)
  1493. #define TBNOTIFYA NMTOOLBARA
  1494. #define TBNOTIFYW NMTOOLBARW
  1495. #define LPTBNOTIFYA LPNMTOOLBARA
  1496. #define LPTBNOTIFYW LPNMTOOLBARW
  1497. #else
  1498. #define tagNMTOOLBARA  tagTBNOTIFYA
  1499. #define NMTOOLBARA     TBNOTIFYA
  1500. #define LPNMTOOLBARA   LPTBNOTIFYA
  1501. #define tagNMTOOLBARW  tagTBNOTIFYW
  1502. #define NMTOOLBARW     TBNOTIFYW
  1503. #define LPNMTOOLBARW   LPTBNOTIFYW
  1504. #endif
  1505. #define TBNOTIFY       NMTOOLBAR
  1506. #define LPTBNOTIFY     LPNMTOOLBAR
  1507. #if (_WIN32_IE >= 0x0300)
  1508. typedef struct tagNMTOOLBARA {
  1509.     NMHDR   hdr;
  1510.     int     iItem;
  1511.     TBBUTTON tbButton;
  1512.     int     cchText;
  1513.     LPSTR   pszText;
  1514. #if (_WIN32_IE >= 0x500)
  1515.     RECT    rcButton;
  1516. #endif
  1517. } NMTOOLBARA, *LPNMTOOLBARA;
  1518. #endif
  1519. #if (_WIN32_IE >= 0x0300)
  1520. typedef struct tagNMTOOLBARW {
  1521.     NMHDR   hdr;
  1522.     int     iItem;
  1523.     TBBUTTON tbButton;
  1524.     int     cchText;
  1525.     LPWSTR   pszText;
  1526. #if (_WIN32_IE >= 0x500)
  1527.     RECT    rcButton;
  1528. #endif
  1529. } NMTOOLBARW, *LPNMTOOLBARW;
  1530. #endif
  1531. #ifdef UNICODE
  1532. #define NMTOOLBAR               NMTOOLBARW
  1533. #define LPNMTOOLBAR             LPNMTOOLBARW
  1534. #else
  1535. #define NMTOOLBAR               NMTOOLBARA
  1536. #define LPNMTOOLBAR             LPNMTOOLBARA
  1537. #endif
  1538. #endif
  1539. #endif      // NOTOOLBAR
  1540. #if (_WIN32_IE >= 0x0300)
  1541. //====== REBAR CONTROL ========================================================
  1542. #ifndef NOREBAR
  1543. #ifdef _WIN32
  1544. #define REBARCLASSNAMEW         L"ReBarWindow32"
  1545. #define REBARCLASSNAMEA         "ReBarWindow32"
  1546. #ifdef  UNICODE
  1547. #define REBARCLASSNAME          REBARCLASSNAMEW
  1548. #else
  1549. #define REBARCLASSNAME          REBARCLASSNAMEA
  1550. #endif
  1551. #else
  1552. #define REBARCLASSNAME          "ReBarWindow"
  1553. #endif
  1554. #define RBIM_IMAGELIST  0x00000001
  1555. // begin_r_commctrl
  1556. #if (_WIN32_IE >= 0x0400)
  1557. #define RBS_TOOLTIPS        0x0100
  1558. #define RBS_VARHEIGHT       0x0200
  1559. #define RBS_BANDBORDERS     0x0400
  1560. #define RBS_FIXEDORDER      0x0800
  1561. #define RBS_REGISTERDROP    0x1000
  1562. #define RBS_AUTOSIZE        0x2000
  1563. #define RBS_VERTICALGRIPPER 0x4000  // this always has the vertical gripper (default for horizontal mode)
  1564. #define RBS_DBLCLKTOGGLE    0x8000
  1565. #else
  1566. #define RBS_TOOLTIPS        0x00000100
  1567. #define RBS_VARHEIGHT       0x00000200
  1568. #define RBS_BANDBORDERS     0x00000400
  1569. #define RBS_FIXEDORDER      0x00000800
  1570. #endif      // _WIN32_IE >= 0x0400
  1571. // end_r_commctrl
  1572. typedef struct tagREBARINFO
  1573. {
  1574.     UINT        cbSize;
  1575.     UINT        fMask;
  1576. #ifndef NOIMAGEAPIS
  1577.     HIMAGELIST  himl;
  1578. #else
  1579.     HANDLE      himl;
  1580. #endif
  1581. }   REBARINFO, *LPREBARINFO;
  1582. #define RBBS_BREAK          0x00000001  // break to new line
  1583. #define RBBS_FIXEDSIZE      0x00000002  // band can't be sized
  1584. #define RBBS_CHILDEDGE      0x00000004  // edge around top & bottom of child window
  1585. #define RBBS_HIDDEN         0x00000008  // don't show
  1586. #define RBBS_NOVERT         0x00000010  // don't show when vertical
  1587. #define RBBS_FIXEDBMP       0x00000020  // bitmap doesn't move during band resize
  1588. #if (_WIN32_IE >= 0x0400)               //
  1589. #define RBBS_VARIABLEHEIGHT 0x00000040  // allow autosizing of this child vertically
  1590. #define RBBS_GRIPPERALWAYS  0x00000080  // always show the gripper
  1591. #define RBBS_NOGRIPPER      0x00000100  // never show the gripper
  1592. #if (_WIN32_IE >= 0x0500)               //
  1593. #define RBBS_USECHEVRON     0x00000200  // display drop-down button for this band if it's sized smaller than ideal width
  1594. #if (_WIN32_IE >= 0x0501)               //
  1595. #define RBBS_HIDETITLE      0x00000400  // keep band title hidden
  1596. #define RBBS_TOPALIGN       0x00000800  // keep band title hidden
  1597. #endif // 0x0501                        //
  1598. #endif // 0x0500                        //
  1599. #endif // 0x0400                        //
  1600. #define RBBIM_STYLE         0x00000001
  1601. #define RBBIM_COLORS        0x00000002
  1602. #define RBBIM_TEXT          0x00000004
  1603. #define RBBIM_IMAGE         0x00000008
  1604. #define RBBIM_CHILD         0x00000010
  1605. #define RBBIM_CHILDSIZE     0x00000020
  1606. #define RBBIM_SIZE          0x00000040
  1607. #define RBBIM_BACKGROUND    0x00000080
  1608. #define RBBIM_ID            0x00000100
  1609. #if (_WIN32_IE >= 0x0400)
  1610. #define RBBIM_IDEALSIZE     0x00000200
  1611. #define RBBIM_LPARAM        0x00000400
  1612. #define RBBIM_HEADERSIZE    0x00000800  // control the size of the header
  1613. #endif
  1614. typedef struct tagREBARBANDINFOA
  1615. {
  1616.     UINT        cbSize;
  1617.     UINT        fMask;
  1618.     UINT        fStyle;
  1619.     COLORREF    clrFore;
  1620.     COLORREF    clrBack;
  1621.     LPSTR       lpText;
  1622.     UINT        cch;
  1623.     int         iImage;
  1624.     HWND        hwndChild;
  1625.     UINT        cxMinChild;
  1626.     UINT        cyMinChild;
  1627.     UINT        cx;
  1628.     HBITMAP     hbmBack;
  1629.     UINT        wID;
  1630. #if (_WIN32_IE >= 0x0400)
  1631.     UINT        cyChild;
  1632.     UINT        cyMaxChild;
  1633.     UINT        cyIntegral;
  1634.     UINT        cxIdeal;
  1635.     LPARAM      lParam;
  1636.     UINT        cxHeader;
  1637. #endif
  1638. }   REBARBANDINFOA, *LPREBARBANDINFOA;
  1639. typedef REBARBANDINFOA CONST *LPCREBARBANDINFOA;
  1640. #define REBARBANDINFOA_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, wID)
  1641. #define REBARBANDINFOW_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, wID)
  1642. typedef struct tagREBARBANDINFOW
  1643. {
  1644.     UINT        cbSize;
  1645.     UINT        fMask;
  1646.     UINT        fStyle;
  1647.     COLORREF    clrFore;
  1648.     COLORREF    clrBack;
  1649.     LPWSTR      lpText;
  1650.     UINT        cch;
  1651.     int         iImage;
  1652.     HWND        hwndChild;
  1653.     UINT        cxMinChild;
  1654.     UINT        cyMinChild;
  1655.     UINT        cx;
  1656.     HBITMAP     hbmBack;
  1657.     UINT        wID;
  1658. #if (_WIN32_IE >= 0x0400)
  1659.     UINT        cyChild;
  1660.     UINT        cyMaxChild;
  1661.     UINT        cyIntegral;
  1662.     UINT        cxIdeal;
  1663.     LPARAM      lParam;
  1664.     UINT        cxHeader;
  1665. #endif
  1666. }   REBARBANDINFOW, *LPREBARBANDINFOW;
  1667. typedef REBARBANDINFOW CONST *LPCREBARBANDINFOW;
  1668. #ifdef UNICODE
  1669. #define REBARBANDINFO       REBARBANDINFOW
  1670. #define LPREBARBANDINFO     LPREBARBANDINFOW
  1671. #define LPCREBARBANDINFO    LPCREBARBANDINFOW
  1672. #define REBARBANDINFO_V3_SIZE REBARBANDINFOW_V3_SIZE
  1673. #else
  1674. #define REBARBANDINFO       REBARBANDINFOA
  1675. #define LPREBARBANDINFO     LPREBARBANDINFOA
  1676. #define LPCREBARBANDINFO    LPCREBARBANDINFOA
  1677. #define REBARBANDINFO_V3_SIZE REBARBANDINFOA_V3_SIZE
  1678. #endif
  1679. #define RB_INSERTBANDA  (WM_USER +  1)
  1680. #define RB_DELETEBAND   (WM_USER +  2)
  1681. #define RB_GETBARINFO   (WM_USER +  3)
  1682. #define RB_SETBARINFO   (WM_USER +  4)
  1683. #if (_WIN32_IE < 0x0400)
  1684. #define RB_GETBANDINFO  (WM_USER +  5)
  1685. #endif
  1686. #define RB_SETBANDINFOA (WM_USER +  6)
  1687. #define RB_SETPARENT    (WM_USER +  7)
  1688. #if (_WIN32_IE >= 0x0400)
  1689. #define RB_HITTEST      (WM_USER +  8)
  1690. #define RB_GETRECT      (WM_USER +  9)
  1691. #endif
  1692. #define RB_INSERTBANDW  (WM_USER +  10)
  1693. #define RB_SETBANDINFOW (WM_USER +  11)
  1694. #define RB_GETBANDCOUNT (WM_USER +  12)
  1695. #define RB_GETROWCOUNT  (WM_USER +  13)
  1696. #define RB_GETROWHEIGHT (WM_USER +  14)
  1697. #if (_WIN32_IE >= 0x0400)
  1698. #define RB_IDTOINDEX    (WM_USER +  16) // wParam == id
  1699. #define RB_GETTOOLTIPS  (WM_USER +  17)
  1700. #define RB_SETTOOLTIPS  (WM_USER +  18)
  1701. #define RB_SETBKCOLOR   (WM_USER +  19) // sets the default BK color
  1702. #define RB_GETBKCOLOR   (WM_USER +  20) // defaults to CLR_NONE
  1703. #define RB_SETTEXTCOLOR (WM_USER +  21)
  1704. #define RB_GETTEXTCOLOR (WM_USER +  22) // defaults to 0x00000000
  1705. #if (_WIN32_WINNT >= 0x0501)
  1706. #define RBSTR_CHANGERECT            0x0001   // flags for RB_SIZETORECT
  1707. #endif
  1708. #define RB_SIZETORECT   (WM_USER +  23) // resize the rebar/break bands and such to this rect (lparam)
  1709. #endif      // _WIN32_IE >= 0x0400
  1710. #define RB_SETCOLORSCHEME   CCM_SETCOLORSCHEME  // lParam is color scheme
  1711. #define RB_GETCOLORSCHEME   CCM_GETCOLORSCHEME  // fills in COLORSCHEME pointed to by lParam
  1712. #ifdef UNICODE
  1713. #define RB_INSERTBAND   RB_INSERTBANDW
  1714. #define RB_SETBANDINFO   RB_SETBANDINFOW
  1715. #else
  1716. #define RB_INSERTBAND   RB_INSERTBANDA
  1717. #define RB_SETBANDINFO   RB_SETBANDINFOA
  1718. #endif
  1719. #if (_WIN32_IE >= 0x0400)
  1720. // for manual drag control
  1721. // lparam == cursor pos
  1722.         // -1 means do it yourself.
  1723.         // -2 means use what you had saved before
  1724. #define RB_BEGINDRAG    (WM_USER + 24)
  1725. #define RB_ENDDRAG      (WM_USER + 25)
  1726. #define RB_DRAGMOVE     (WM_USER + 26)
  1727. #define RB_GETBARHEIGHT (WM_USER + 27)
  1728. #define RB_GETBANDINFOW (WM_USER + 28)
  1729. #define RB_GETBANDINFOA (WM_USER + 29)
  1730. #ifdef UNICODE
  1731. #define RB_GETBANDINFO   RB_GETBANDINFOW
  1732. #else
  1733. #define RB_GETBANDINFO   RB_GETBANDINFOA
  1734. #endif
  1735. #define RB_MINIMIZEBAND (WM_USER + 30)
  1736. #define RB_MAXIMIZEBAND (WM_USER + 31)
  1737. #define RB_GETDROPTARGET (CCM_GETDROPTARGET)
  1738. #define RB_GETBANDBORDERS (WM_USER + 34)  // returns in lparam = lprc the amount of edges added to band wparam
  1739. #define RB_SHOWBAND     (WM_USER + 35)      // show/hide band
  1740. #define RB_SETPALETTE   (WM_USER + 37)
  1741. #define RB_GETPALETTE   (WM_USER + 38)
  1742. #define RB_MOVEBAND     (WM_USER + 39)
  1743. #define RB_SETUNICODEFORMAT     CCM_SETUNICODEFORMAT
  1744. #define RB_GETUNICODEFORMAT     CCM_GETUNICODEFORMAT
  1745. #endif      // _WIN32_IE >= 0x0400
  1746. #if (_WIN32_WINNT >= 0x501)
  1747. #define RB_GETBANDMARGINS   (WM_USER + 40)
  1748. #define RB_SETWINDOWTHEME       CCM_SETWINDOWTHEME
  1749. #endif
  1750. #if (_WIN32_IE >= 0x0500)
  1751. #define RB_PUSHCHEVRON  (WM_USER + 43)
  1752. #endif      // _WIN32_IE >= 0x0500
  1753. #define RBN_HEIGHTCHANGE    (RBN_FIRST - 0)
  1754. #if (_WIN32_IE >= 0x0400)
  1755. #define RBN_GETOBJECT       (RBN_FIRST - 1)
  1756. #define RBN_LAYOUTCHANGED   (RBN_FIRST - 2)
  1757. #define RBN_AUTOSIZE        (RBN_FIRST - 3)
  1758. #define RBN_BEGINDRAG       (RBN_FIRST - 4)
  1759. #define RBN_ENDDRAG         (RBN_FIRST - 5)
  1760. #define RBN_DELETINGBAND    (RBN_FIRST - 6)     // Uses NMREBAR
  1761. #define RBN_DELETEDBAND     (RBN_FIRST - 7)     // Uses NMREBAR
  1762. #define RBN_CHILDSIZE       (RBN_FIRST - 8)
  1763. #if (_WIN32_IE >= 0x0500)
  1764. #define RBN_CHEVRONPUSHED   (RBN_FIRST - 10)
  1765. #endif      // _WIN32_IE >= 0x0500
  1766. #if (_WIN32_IE >= 0x0500)
  1767. #define RBN_MINMAX          (RBN_FIRST - 21)
  1768. #endif
  1769. #if (_WIN32_WINNT >= 0x0501)
  1770. #define RBN_AUTOBREAK       (RBN_FIRST - 22)
  1771. #endif
  1772. typedef struct tagNMREBARCHILDSIZE
  1773. {
  1774.     NMHDR hdr;
  1775.     UINT uBand;
  1776.     UINT wID;
  1777.     RECT rcChild;
  1778.     RECT rcBand;
  1779. } NMREBARCHILDSIZE, *LPNMREBARCHILDSIZE;
  1780. typedef struct tagNMREBAR
  1781. {
  1782.     NMHDR   hdr;
  1783.     DWORD   dwMask;           // RBNM_*
  1784.     UINT    uBand;
  1785.     UINT    fStyle;
  1786.     UINT    wID;
  1787.     LPARAM  lParam;
  1788. } NMREBAR, *LPNMREBAR;
  1789. // Mask flags for NMREBAR
  1790. #define RBNM_ID         0x00000001
  1791. #define RBNM_STYLE      0x00000002
  1792. #define RBNM_LPARAM     0x00000004
  1793. typedef struct tagNMRBAUTOSIZE
  1794. {
  1795.     NMHDR hdr;
  1796.     BOOL fChanged;
  1797.     RECT rcTarget;
  1798.     RECT rcActual;
  1799. } NMRBAUTOSIZE, *LPNMRBAUTOSIZE;
  1800. #if (_WIN32_IE >= 0x0500)
  1801. typedef struct tagNMREBARCHEVRON
  1802. {
  1803.     NMHDR hdr;
  1804.     UINT uBand;
  1805.     UINT wID;
  1806.     LPARAM lParam;
  1807.     RECT rc;
  1808.     LPARAM lParamNM;
  1809. } NMREBARCHEVRON, *LPNMREBARCHEVRON;
  1810. #endif
  1811. #if (_WIN32_WINNT >= 0x0501)
  1812. #define RBAB_AUTOSIZE   0x0001   // These are not flags and are all mutually exclusive
  1813. #define RBAB_ADDBAND    0x0002
  1814. typedef struct tagNMREBARAUTOBREAK
  1815. {
  1816.     NMHDR hdr;
  1817.     UINT uBand;
  1818.     UINT wID;
  1819.     LPARAM lParam;
  1820.     UINT uMsg;
  1821.     UINT fStyleCurrent;
  1822.     BOOL fAutoBreak;
  1823. } NMREBARAUTOBREAK, *LPNMREBARAUTOBREAK;
  1824. #endif
  1825. #define RBHT_NOWHERE    0x0001
  1826. #define RBHT_CAPTION    0x0002
  1827. #define RBHT_CLIENT     0x0003
  1828. #define RBHT_GRABBER    0x0004
  1829. #if (_WIN32_IE >= 0x0500)
  1830. #define RBHT_CHEVRON    0x0008
  1831. #endif
  1832. typedef struct _RB_HITTESTINFO
  1833. {
  1834.     POINT pt;
  1835.     UINT flags;
  1836.     int iBand;
  1837. } RBHITTESTINFO, *LPRBHITTESTINFO;
  1838. #endif      // _WIN32_IE >= 0x0400
  1839. #endif      // NOREBAR
  1840. #endif      // _WIN32_IE >= 0x0300
  1841. //====== TOOLTIPS CONTROL =====================================================
  1842. #ifndef NOTOOLTIPS
  1843. #ifdef _WIN32
  1844. #define TOOLTIPS_CLASSW         L"tooltips_class32"
  1845. #define TOOLTIPS_CLASSA         "tooltips_class32"
  1846. #ifdef UNICODE
  1847. #define TOOLTIPS_CLASS          TOOLTIPS_CLASSW
  1848. #else
  1849. #define TOOLTIPS_CLASS          TOOLTIPS_CLASSA
  1850. #endif
  1851. #else
  1852. #define TOOLTIPS_CLASS          "tooltips_class"
  1853. #endif
  1854. #if (_WIN32_IE >= 0x0300)
  1855. #define LPTOOLINFOA   LPTTTOOLINFOA
  1856. #define LPTOOLINFOW   LPTTTOOLINFOW
  1857. #define TOOLINFOA       TTTOOLINFOA
  1858. #define TOOLINFOW       TTTOOLINFOW
  1859. #else
  1860. #define   TTTOOLINFOA   TOOLINFOA
  1861. #define LPTTTOOLINFOA LPTOOLINFOA
  1862. #define   TTTOOLINFOW   TOOLINFOW
  1863. #define LPTTTOOLINFOW LPTOOLINFOW
  1864. #endif
  1865. #define LPTOOLINFO    LPTTTOOLINFO
  1866. #define TOOLINFO        TTTOOLINFO
  1867. #define TTTOOLINFOA_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpszText)
  1868. #define TTTOOLINFOW_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpszText)
  1869. #define TTTOOLINFOA_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lParam)
  1870. #define TTTOOLINFOW_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lParam)
  1871. #define TTTOOLINFOA_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpReserved)
  1872. #define TTTOOLINFOW_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpReserved)
  1873. typedef struct tagTOOLINFOA {
  1874.     UINT cbSize;
  1875.     UINT uFlags;
  1876.     HWND hwnd;
  1877.     UINT_PTR uId;
  1878.     RECT rect;
  1879.     HINSTANCE hinst;
  1880.     LPSTR lpszText;
  1881. #if (_WIN32_IE >= 0x0300)
  1882.     LPARAM lParam;
  1883. #endif
  1884. #if (_WIN32_WINNT >= 0x0501)
  1885.     void *lpReserved;
  1886. #endif
  1887. } TTTOOLINFOA, NEAR *PTOOLINFOA, *LPTTTOOLINFOA;
  1888. typedef struct tagTOOLINFOW {
  1889.     UINT cbSize;
  1890.     UINT uFlags;
  1891.     HWND hwnd;
  1892.     UINT_PTR uId;
  1893.     RECT rect;
  1894.     HINSTANCE hinst;
  1895.     LPWSTR lpszText;
  1896. #if (_WIN32_IE >= 0x0300)
  1897.     LPARAM lParam;
  1898. #endif
  1899. #if (_WIN32_WINNT >= 0x0501)
  1900.     void *lpReserved;
  1901. #endif
  1902. } TTTOOLINFOW, NEAR *PTOOLINFOW, *LPTTTOOLINFOW;
  1903. #ifdef UNICODE
  1904. #define TTTOOLINFO              TTTOOLINFOW
  1905. #define PTOOLINFO               PTOOLINFOW
  1906. #define LPTTTOOLINFO            LPTTTOOLINFOW
  1907. #define TTTOOLINFO_V1_SIZE TTTOOLINFOW_V1_SIZE
  1908. #else
  1909. #define PTOOLINFO               PTOOLINFOA
  1910. #define TTTOOLINFO              TTTOOLINFOA
  1911. #define LPTTTOOLINFO            LPTTTOOLINFOA
  1912. #define TTTOOLINFO_V1_SIZE TTTOOLINFOA_V1_SIZE
  1913. #endif
  1914. // begin_r_commctrl
  1915. #define TTS_ALWAYSTIP           0x01
  1916. #define TTS_NOPREFIX            0x02
  1917. #if (_WIN32_IE >= 0x0500)
  1918. #define TTS_NOANIMATE           0x10
  1919. #define TTS_NOFADE              0x20
  1920. #define TTS_BALLOON             0x40
  1921. #define TTS_CLOSE               0x80
  1922. #endif
  1923. // end_r_commctrl
  1924. #define TTF_IDISHWND            0x0001
  1925. // Use this to center around trackpoint in trackmode
  1926. // -OR- to center around tool in normal mode.
  1927. // Use TTF_ABSOLUTE to place the tip exactly at the track coords when
  1928. // in tracking mode.  TTF_ABSOLUTE can be used in conjunction with TTF_CENTERTIP
  1929. // to center the tip absolutely about the track point.
  1930. #define TTF_CENTERTIP           0x0002
  1931. #define TTF_RTLREADING          0x0004
  1932. #define TTF_SUBCLASS            0x0010
  1933. #if (_WIN32_IE >= 0x0300)
  1934. #define TTF_TRACK               0x0020
  1935. #define TTF_ABSOLUTE            0x0080
  1936. #define TTF_TRANSPARENT         0x0100
  1937. #if (_WIN32_IE >= 0x0501)
  1938. #define TTF_PARSELINKS          0x1000
  1939. #endif // _WIN32_IE >= 0x0501
  1940. #define TTF_DI_SETITEM          0x8000       // valid only on the TTN_NEEDTEXT callback
  1941. #endif      // _WIN32_IE >= 0x0300
  1942. #define TTDT_AUTOMATIC          0
  1943. #define TTDT_RESHOW             1
  1944. #define TTDT_AUTOPOP            2
  1945. #define TTDT_INITIAL            3
  1946. // ToolTip Icons (Set with TTM_SETTITLE)
  1947. #define TTI_NONE                0
  1948. #define TTI_INFO                1
  1949. #define TTI_WARNING             2
  1950. #define TTI_ERROR               3
  1951. // Tool Tip Messages
  1952. #define TTM_ACTIVATE            (WM_USER + 1)
  1953. #define TTM_SETDELAYTIME        (WM_USER + 3)
  1954. #define TTM_ADDTOOLA            (WM_USER + 4)
  1955. #define TTM_ADDTOOLW            (WM_USER + 50)
  1956. #define TTM_DELTOOLA            (WM_USER + 5)
  1957. #define TTM_DELTOOLW            (WM_USER + 51)
  1958. #define TTM_NEWTOOLRECTA        (WM_USER + 6)
  1959. #define TTM_NEWTOOLRECTW        (WM_USER + 52)
  1960. #define TTM_RELAYEVENT          (WM_USER + 7)
  1961. #define TTM_GETTOOLINFOA        (WM_USER + 8)
  1962. #define TTM_GETTOOLINFOW        (WM_USER + 53)
  1963. #define TTM_SETTOOLINFOA        (WM_USER + 9)
  1964. #define TTM_SETTOOLINFOW        (WM_USER + 54)
  1965. #define TTM_HITTESTA            (WM_USER +10)
  1966. #define TTM_HITTESTW            (WM_USER +55)
  1967. #define TTM_GETTEXTA            (WM_USER +11)
  1968. #define TTM_GETTEXTW            (WM_USER +56)
  1969. #define TTM_UPDATETIPTEXTA      (WM_USER +12)
  1970. #define TTM_UPDATETIPTEXTW      (WM_USER +57)
  1971. #define TTM_GETTOOLCOUNT        (WM_USER +13)
  1972. #define TTM_ENUMTOOLSA          (WM_USER +14)
  1973. #define TTM_ENUMTOOLSW          (WM_USER +58)
  1974. #define TTM_GETCURRENTTOOLA     (WM_USER + 15)
  1975. #define TTM_GETCURRENTTOOLW     (WM_USER + 59)
  1976. #define TTM_WINDOWFROMPOINT     (WM_USER + 16)
  1977. #if (_WIN32_IE >= 0x0300)
  1978. #define TTM_TRACKACTIVATE       (WM_USER + 17)  // wParam = TRUE/FALSE start end  lparam = LPTOOLINFO
  1979. #define TTM_TRACKPOSITION       (WM_USER + 18)  // lParam = dwPos
  1980. #define TTM_SETTIPBKCOLOR       (WM_USER + 19)
  1981. #define TTM_SETTIPTEXTCOLOR     (WM_USER + 20)
  1982. #define TTM_GETDELAYTIME        (WM_USER + 21)
  1983. #define TTM_GETTIPBKCOLOR       (WM_USER + 22)
  1984. #define TTM_GETTIPTEXTCOLOR     (WM_USER + 23)
  1985. #define TTM_SETMAXTIPWIDTH      (WM_USER + 24)
  1986. #define TTM_GETMAXTIPWIDTH      (WM_USER + 25)
  1987. #define TTM_SETMARGIN           (WM_USER + 26)  // lParam = lprc
  1988. #define TTM_GETMARGIN           (WM_USER + 27)  // lParam = lprc
  1989. #define TTM_POP                 (WM_USER + 28)
  1990. #endif
  1991. #if (_WIN32_IE >= 0x0400)
  1992. #define TTM_UPDATE              (WM_USER + 29)
  1993. #endif
  1994. #if (_WIN32_IE >= 0x0500)
  1995. #define TTM_GETBUBBLESIZE       (WM_USER + 30)
  1996. #define TTM_ADJUSTRECT          (WM_USER + 31)
  1997. #define TTM_SETTITLEA           (WM_USER + 32)  // wParam = TTI_*, lParam = char* szTitle
  1998. #define TTM_SETTITLEW           (WM_USER + 33)  // wParam = TTI_*, lParam = wchar* szTitle
  1999. #endif
  2000. #if (_WIN32_WINNT >= 0x0501)
  2001. #define TTM_POPUP               (WM_USER + 34)
  2002. #define TTM_GETTITLE            (WM_USER + 35) // wParam = 0, lParam = TTGETTITLE*
  2003. typedef struct _TTGETTITLE
  2004. {
  2005.     DWORD dwSize;
  2006.     UINT uTitleBitmap;
  2007.     UINT cch;
  2008.     WCHAR* pszTitle;
  2009. } TTGETTITLE, *PTTGETTITLE;
  2010. #endif
  2011. #ifdef UNICODE
  2012. #define TTM_ADDTOOL             TTM_ADDTOOLW
  2013. #define TTM_DELTOOL             TTM_DELTOOLW
  2014. #define TTM_NEWTOOLRECT         TTM_NEWTOOLRECTW
  2015. #define TTM_GETTOOLINFO         TTM_GETTOOLINFOW
  2016. #define TTM_SETTOOLINFO         TTM_SETTOOLINFOW
  2017. #define TTM_HITTEST             TTM_HITTESTW
  2018. #define TTM_GETTEXT             TTM_GETTEXTW
  2019. #define TTM_UPDATETIPTEXT       TTM_UPDATETIPTEXTW
  2020. #define TTM_ENUMTOOLS           TTM_ENUMTOOLSW
  2021. #define TTM_GETCURRENTTOOL      TTM_GETCURRENTTOOLW
  2022. #if (_WIN32_IE >= 0x0500)
  2023. #define TTM_SETTITLE            TTM_SETTITLEW
  2024. #endif
  2025. #else
  2026. #define TTM_ADDTOOL             TTM_ADDTOOLA
  2027. #define TTM_DELTOOL             TTM_DELTOOLA
  2028. #define TTM_NEWTOOLRECT         TTM_NEWTOOLRECTA
  2029. #define TTM_GETTOOLINFO         TTM_GETTOOLINFOA
  2030. #define TTM_SETTOOLINFO         TTM_SETTOOLINFOA
  2031. #define TTM_HITTEST             TTM_HITTESTA
  2032. #define TTM_GETTEXT             TTM_GETTEXTA
  2033. #define TTM_UPDATETIPTEXT       TTM_UPDATETIPTEXTA
  2034. #define TTM_ENUMTOOLS           TTM_ENUMTOOLSA
  2035. #define TTM_GETCURRENTTOOL      TTM_GETCURRENTTOOLA
  2036. #if (_WIN32_IE >= 0x0500)
  2037. #define TTM_SETTITLE            TTM_SETTITLEA
  2038. #endif
  2039. #endif
  2040. #if (_WIN32_WINNT >= 0x501)
  2041. #define TTM_SETWINDOWTHEME      CCM_SETWINDOWTHEME
  2042. #endif
  2043. #if (_WIN32_IE >= 0x0300)
  2044. #define LPHITTESTINFOW    LPTTHITTESTINFOW
  2045. #define LPHITTESTINFOA    LPTTHITTESTINFOA
  2046. #else
  2047. #define LPTTHITTESTINFOA  LPHITTESTINFOA
  2048. #define LPTTHITTESTINFOW  LPHITTESTINFOW
  2049. #endif
  2050. #define LPHITTESTINFO     LPTTHITTESTINFO
  2051. typedef struct _TT_HITTESTINFOA {
  2052.     HWND hwnd;
  2053.     POINT pt;
  2054.     TTTOOLINFOA ti;
  2055. } TTHITTESTINFOA, *LPTTHITTESTINFOA;
  2056. typedef struct _TT_HITTESTINFOW {
  2057.     HWND hwnd;
  2058.     POINT pt;
  2059.     TTTOOLINFOW ti;
  2060. } TTHITTESTINFOW, *LPTTHITTESTINFOW;
  2061. #ifdef UNICODE
  2062. #define TTHITTESTINFO           TTHITTESTINFOW
  2063. #define LPTTHITTESTINFO         LPTTHITTESTINFOW
  2064. #else
  2065. #define TTHITTESTINFO           TTHITTESTINFOA
  2066. #define LPTTHITTESTINFO         LPTTHITTESTINFOA
  2067. #endif
  2068. #define TTN_GETDISPINFOA        (TTN_FIRST - 0)
  2069. #define TTN_GETDISPINFOW        (TTN_FIRST - 10)
  2070. #define TTN_SHOW                (TTN_FIRST - 1)
  2071. #define TTN_POP                 (TTN_FIRST - 2)
  2072. #define TTN_LINKCLICK           (TTN_FIRST - 3)
  2073. #ifdef UNICODE
  2074. #define TTN_GETDISPINFO         TTN_GETDISPINFOW
  2075. #else
  2076. #define TTN_GETDISPINFO         TTN_GETDISPINFOA
  2077. #endif
  2078. #define TTN_NEEDTEXT            TTN_GETDISPINFO
  2079. #define TTN_NEEDTEXTA           TTN_GETDISPINFOA
  2080. #define TTN_NEEDTEXTW           TTN_GETDISPINFOW
  2081. #if (_WIN32_IE >= 0x0300)
  2082. #define TOOLTIPTEXTW NMTTDISPINFOW
  2083. #define TOOLTIPTEXTA NMTTDISPINFOA
  2084. #define LPTOOLTIPTEXTA LPNMTTDISPINFOA
  2085. #define LPTOOLTIPTEXTW LPNMTTDISPINFOW
  2086. #else
  2087. #define tagNMTTDISPINFOA  tagTOOLTIPTEXTA
  2088. #define NMTTDISPINFOA     TOOLTIPTEXTA
  2089. #define LPNMTTDISPINFOA   LPTOOLTIPTEXTA
  2090. #define tagNMTTDISPINFOW  tagTOOLTIPTEXTW
  2091. #define NMTTDISPINFOW     TOOLTIPTEXTW
  2092. #define LPNMTTDISPINFOW   LPTOOLTIPTEXTW
  2093. #endif
  2094. #define TOOLTIPTEXT    NMTTDISPINFO
  2095. #define LPTOOLTIPTEXT  LPNMTTDISPINFO
  2096. #define NMTTDISPINFOA_V1_SIZE CCSIZEOF_STRUCT(NMTTDISPINFOA, uFlags)
  2097. #define NMTTDISPINFOW_V1_SIZE CCSIZEOF_STRUCT(NMTTDISPINFOW, uFlags)
  2098. typedef struct tagNMTTDISPINFOA {
  2099.     NMHDR hdr;
  2100.     LPSTR lpszText;
  2101.     char szText[80];
  2102.     HINSTANCE hinst;
  2103.     UINT uFlags;
  2104. #if (_WIN32_IE >= 0x0300)
  2105.     LPARAM lParam;
  2106. #endif
  2107. } NMTTDISPINFOA, *LPNMTTDISPINFOA;
  2108. typedef struct tagNMTTDISPINFOW {
  2109.     NMHDR hdr;
  2110.     LPWSTR lpszText;
  2111.     WCHAR szText[80];
  2112.     HINSTANCE hinst;
  2113.     UINT uFlags;
  2114. #if (_WIN32_IE >= 0x0300)
  2115.     LPARAM lParam;
  2116. #endif
  2117. } NMTTDISPINFOW, *LPNMTTDISPINFOW;
  2118. #ifdef UNICODE
  2119. #define NMTTDISPINFO            NMTTDISPINFOW
  2120. #define LPNMTTDISPINFO          LPNMTTDISPINFOW
  2121. #define NMTTDISPINFO_V1_SIZE NMTTDISPINFOW_V1_SIZE
  2122. #else
  2123. #define NMTTDISPINFO            NMTTDISPINFOA
  2124. #define LPNMTTDISPINFO          LPNMTTDISPINFOA
  2125. #define NMTTDISPINFO_V1_SIZE NMTTDISPINFOA_V1_SIZE
  2126. #endif
  2127. #endif      // NOTOOLTIPS
  2128. //====== STATUS BAR CONTROL ===================================================
  2129. #ifndef NOSTATUSBAR
  2130. // begin_r_commctrl
  2131. #define SBARS_SIZEGRIP          0x0100
  2132. #if (_WIN32_IE >= 0x0500)
  2133. #define SBARS_TOOLTIPS          0x0800
  2134. #endif
  2135. #if (_WIN32_IE >= 0x0400)
  2136. // this is a status bar flag, preference to SBARS_TOOLTIPS
  2137. #define SBT_TOOLTIPS            0x0800
  2138. #endif
  2139. // end_r_commctrl
  2140. WINCOMMCTRLAPI void WINAPI DrawStatusTextA(HDC hDC, LPRECT lprc, LPCSTR pszText, UINT uFlags);
  2141. WINCOMMCTRLAPI void WINAPI DrawStatusTextW(HDC hDC, LPRECT lprc, LPCWSTR pszText, UINT uFlags);
  2142. WINCOMMCTRLAPI HWND WINAPI CreateStatusWindowA(LONG style, LPCSTR lpszText, HWND hwndParent, UINT wID);
  2143. WINCOMMCTRLAPI HWND WINAPI CreateStatusWindowW(LONG style, LPCWSTR lpszText, HWND hwndParent, UINT wID);
  2144. #ifdef UNICODE
  2145. #define CreateStatusWindow      CreateStatusWindowW
  2146. #define DrawStatusText          DrawStatusTextW
  2147. #else
  2148. #define CreateStatusWindow      CreateStatusWindowA
  2149. #define DrawStatusText          DrawStatusTextA
  2150. #endif
  2151. #ifdef _WIN32
  2152. #define STATUSCLASSNAMEW        L"msctls_statusbar32"
  2153. #define STATUSCLASSNAMEA        "msctls_statusbar32"
  2154. #ifdef UNICODE
  2155. #define STATUSCLASSNAME         STATUSCLASSNAMEW
  2156. #else
  2157. #define STATUSCLASSNAME         STATUSCLASSNAMEA
  2158. #endif
  2159. #else
  2160. #define STATUSCLASSNAME         "msctls_statusbar"
  2161. #endif
  2162. #define SB_SETTEXTA             (WM_USER+1)
  2163. #define SB_SETTEXTW             (WM_USER+11)
  2164. #define SB_GETTEXTA             (WM_USER+2)
  2165. #define SB_GETTEXTW             (WM_USER+13)
  2166. #define SB_GETTEXTLENGTHA       (WM_USER+3)
  2167. #define SB_GETTEXTLENGTHW       (WM_USER+12)
  2168. #ifdef UNICODE
  2169. #define SB_GETTEXT              SB_GETTEXTW
  2170. #define SB_SETTEXT              SB_SETTEXTW
  2171. #define SB_GETTEXTLENGTH        SB_GETTEXTLENGTHW
  2172. #if (_WIN32_IE >= 0x0400)
  2173. #define SB_SETTIPTEXT           SB_SETTIPTEXTW
  2174. #define SB_GETTIPTEXT           SB_GETTIPTEXTW
  2175. #endif
  2176. #else
  2177. #define SB_GETTEXT              SB_GETTEXTA
  2178. #define SB_SETTEXT              SB_SETTEXTA
  2179. #define SB_GETTEXTLENGTH        SB_GETTEXTLENGTHA
  2180. #if (_WIN32_IE >= 0x0400)
  2181. #define SB_SETTIPTEXT           SB_SETTIPTEXTA
  2182. #define SB_GETTIPTEXT           SB_GETTIPTEXTA
  2183. #endif
  2184. #endif
  2185. #define SB_SETPARTS             (WM_USER+4)
  2186. #define SB_GETPARTS             (WM_USER+6)
  2187. #define SB_GETBORDERS           (WM_USER+7)
  2188. #define SB_SETMINHEIGHT         (WM_USER+8)
  2189. #define SB_SIMPLE               (WM_USER+9)
  2190. #define SB_GETRECT              (WM_USER+10)
  2191. #if (_WIN32_IE >= 0x0300)
  2192. #define SB_ISSIMPLE             (WM_USER+14)
  2193. #endif
  2194. #if (_WIN32_IE >= 0x0400)
  2195. #define SB_SETICON              (WM_USER+15)
  2196. #define SB_SETTIPTEXTA          (WM_USER+16)
  2197. #define SB_SETTIPTEXTW          (WM_USER+17)
  2198. #define SB_GETTIPTEXTA          (WM_USER+18)
  2199. #define SB_GETTIPTEXTW          (WM_USER+19)
  2200. #define SB_GETICON              (WM_USER+20)
  2201. #define SB_SETUNICODEFORMAT     CCM_SETUNICODEFORMAT
  2202. #define SB_GETUNICODEFORMAT     CCM_GETUNICODEFORMAT
  2203. #endif
  2204. #define SBT_OWNERDRAW            0x1000
  2205. #define SBT_NOBORDERS            0x0100
  2206. #define SBT_POPOUT               0x0200
  2207. #define SBT_RTLREADING           0x0400
  2208. #if (_WIN32_IE >= 0x0500)
  2209. #define SBT_NOTABPARSING         0x0800
  2210. #endif
  2211. #define SB_SETBKCOLOR           CCM_SETBKCOLOR      // lParam = bkColor
  2212. /// status bar notifications
  2213. #if (_WIN32_IE >= 0x0400)
  2214. #define SBN_SIMPLEMODECHANGE    (SBN_FIRST - 0)
  2215. #endif
  2216. #if (_WIN32_IE >= 0x0500)
  2217. // refers to the data saved for simple mode
  2218. #define SB_SIMPLEID  0x00ff
  2219. #endif
  2220. #endif      // NOSTATUSBAR
  2221. //====== MENU HELP ============================================================
  2222. #ifndef NOMENUHELP
  2223. WINCOMMCTRLAPI void WINAPI MenuHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, HMENU hMainMenu, HINSTANCE hInst, HWND hwndStatus, UINT *lpwIDs);
  2224. WINCOMMCTRLAPI BOOL WINAPI ShowHideMenuCtl(HWND hWnd, UINT_PTR uFlags, LPINT lpInfo);
  2225. WINCOMMCTRLAPI void WINAPI GetEffectiveClientRect(HWND hWnd, LPRECT lprc, LPINT lpInfo);
  2226. #define MINSYSCOMMAND   SC_SIZE
  2227. #endif
  2228. //====== TRACKBAR CONTROL =====================================================
  2229. #ifndef NOTRACKBAR
  2230. #ifdef _WIN32
  2231. #define TRACKBAR_CLASSA         "msctls_trackbar32"
  2232. #define TRACKBAR_CLASSW         L"msctls_trackbar32"
  2233. #ifdef UNICODE
  2234. #define  TRACKBAR_CLASS         TRACKBAR_CLASSW
  2235. #else
  2236. #define  TRACKBAR_CLASS         TRACKBAR_CLASSA
  2237. #endif
  2238. #else
  2239. #define TRACKBAR_CLASS          "msctls_trackbar"
  2240. #endif
  2241. // begin_r_commctrl
  2242. #define TBS_AUTOTICKS           0x0001
  2243. #define TBS_VERT                0x0002
  2244. #define TBS_HORZ                0x0000
  2245. #define TBS_TOP                 0x0004
  2246. #define TBS_BOTTOM              0x0000
  2247. #define TBS_LEFT                0x0004
  2248. #define TBS_RIGHT               0x0000
  2249. #define TBS_BOTH                0x0008
  2250. #define TBS_NOTICKS             0x0010
  2251. #define TBS_ENABLESELRANGE      0x0020
  2252. #define TBS_FIXEDLENGTH         0x0040
  2253. #define TBS_NOTHUMB             0x0080
  2254. #if (_WIN32_IE >= 0x0300)
  2255. #define TBS_TOOLTIPS            0x0100
  2256. #endif
  2257. #if (_WIN32_IE >= 0x0500)
  2258. #define TBS_REVERSED            0x0200  // Accessibility hint: the smaller number (usually the min value) means "high" and the larger number (usually the max value) means "low"
  2259. #endif
  2260. #if (_WIN32_IE >= 0x0501)
  2261. #define TBS_DOWNISLEFT          0x0400  // Down=Left and Up=Right (default is Down=Right and Up=Left)
  2262. #endif
  2263. // end_r_commctrl
  2264. #define TBM_GETPOS              (WM_USER)
  2265. #define TBM_GETRANGEMIN         (WM_USER+1)
  2266. #define TBM_GETRANGEMAX         (WM_USER+2)
  2267. #define TBM_GETTIC              (WM_USER+3)
  2268. #define TBM_SETTIC              (WM_USER+4)
  2269. #define TBM_SETPOS              (WM_USER+5)
  2270. #define TBM_SETRANGE            (WM_USER+6)
  2271. #define TBM_SETRANGEMIN         (WM_USER+7)
  2272. #define TBM_SETRANGEMAX         (WM_USER+8)
  2273. #define TBM_CLEARTICS           (WM_USER+9)
  2274. #define TBM_SETSEL              (WM_USER+10)
  2275. #define TBM_SETSELSTART         (WM_USER+11)
  2276. #define TBM_SETSELEND           (WM_USER+12)
  2277. #define TBM_GETPTICS            (WM_USER+14)
  2278. #define TBM_GETTICPOS           (WM_USER+15)
  2279. #define TBM_GETNUMTICS          (WM_USER+16)
  2280. #define TBM_GETSELSTART         (WM_USER+17)
  2281. #define TBM_GETSELEND           (WM_USER+18)
  2282. #define TBM_CLEARSEL            (WM_USER+19)
  2283. #define TBM_SETTICFREQ          (WM_USER+20)
  2284. #define TBM_SETPAGESIZE         (WM_USER+21)
  2285. #define TBM_GETPAGESIZE         (WM_USER+22)
  2286. #define TBM_SETLINESIZE         (WM_USER+23)
  2287. #define TBM_GETLINESIZE         (WM_USER+24)
  2288. #define TBM_GETTHUMBRECT        (WM_USER+25)
  2289. #define TBM_GETCHANNELRECT      (WM_USER+26)
  2290. #define TBM_SETTHUMBLENGTH      (WM_USER+27)
  2291. #define TBM_GETTHUMBLENGTH      (WM_USER+28)
  2292. #if (_WIN32_IE >= 0x0300)
  2293. #define TBM_SETTOOLTIPS         (WM_USER+29)
  2294. #define TBM_GETTOOLTIPS         (WM_USER+30)
  2295. #define TBM_SETTIPSIDE          (WM_USER+31)
  2296. // TrackBar Tip Side flags
  2297. #define TBTS_TOP                0
  2298. #define TBTS_LEFT               1
  2299. #define TBTS_BOTTOM             2
  2300. #define TBTS_RIGHT              3
  2301. #define TBM_SETBUDDY            (WM_USER+32) // wparam = BOOL fLeft; (or right)
  2302. #define TBM_GETBUDDY            (WM_USER+33) // wparam = BOOL fLeft; (or right)
  2303. #endif
  2304. #if (_WIN32_IE >= 0x0400)
  2305. #define TBM_SETUNICODEFORMAT    CCM_SETUNICODEFORMAT
  2306. #define TBM_GETUNICODEFORMAT    CCM_GETUNICODEFORMAT
  2307. #endif
  2308. #define TB_LINEUP               0
  2309. #define TB_LINEDOWN             1
  2310. #define TB_PAGEUP               2
  2311. #define TB_PAGEDOWN             3
  2312. #define TB_THUMBPOSITION        4
  2313. #define TB_THUMBTRACK           5
  2314. #define TB_TOP                  6
  2315. #define TB_BOTTOM               7
  2316. #define TB_ENDTRACK             8
  2317. #if (_WIN32_IE >= 0x0300)
  2318. // custom draw item specs
  2319. #define TBCD_TICS    0x0001
  2320. #define TBCD_THUMB   0x0002
  2321. #define TBCD_CHANNEL 0x0003
  2322. #endif
  2323. #endif // trackbar
  2324. //====== DRAG LIST CONTROL ====================================================
  2325. #ifndef NODRAGLIST
  2326. typedef struct tagDRAGLISTINFO {
  2327.     UINT uNotification;
  2328.     HWND hWnd;
  2329.     POINT ptCursor;
  2330. } DRAGLISTINFO, *LPDRAGLISTINFO;
  2331. #define DL_BEGINDRAG            (WM_USER+133)
  2332. #define DL_DRAGGING             (WM_USER+134)
  2333. #define DL_DROPPED              (WM_USER+135)
  2334. #define DL_CANCELDRAG           (WM_USER+136)
  2335. #define DL_CURSORSET            0
  2336. #define DL_STOPCURSOR           1
  2337. #define DL_COPYCURSOR           2
  2338. #define DL_MOVECURSOR           3
  2339. #define DRAGLISTMSGSTRING       TEXT("commctrl_DragListMsg")
  2340. WINCOMMCTRLAPI BOOL WINAPI MakeDragList(HWND hLB);
  2341. WINCOMMCTRLAPI void WINAPI DrawInsert(HWND handParent, HWND hLB, int nItem);
  2342. WINCOMMCTRLAPI int WINAPI LBItemFromPt(HWND hLB, POINT pt, BOOL bAutoScroll);
  2343. #endif
  2344. //====== UPDOWN CONTROL =======================================================
  2345. #ifndef NOUPDOWN
  2346. #ifdef _WIN32
  2347. #define UPDOWN_CLASSA           "msctls_updown32"
  2348. #define UPDOWN_CLASSW           L"msctls_updown32"
  2349. #ifdef UNICODE
  2350. #define  UPDOWN_CLASS           UPDOWN_CLASSW
  2351. #else
  2352. #define  UPDOWN_CLASS           UPDOWN_CLASSA
  2353. #endif
  2354. #else
  2355. #define UPDOWN_CLASS            "msctls_updown"
  2356. #endif
  2357. typedef struct _UDACCEL {
  2358.     UINT nSec;
  2359.     UINT nInc;
  2360. } UDACCEL, *LPUDACCEL;
  2361. #define UD_MAXVAL               0x7fff
  2362. #define UD_MINVAL               (-UD_MAXVAL)
  2363. // begin_r_commctrl
  2364. #define UDS_WRAP                0x0001
  2365. #define UDS_SETBUDDYINT         0x0002
  2366. #define UDS_ALIGNRIGHT          0x0004
  2367. #define UDS_ALIGNLEFT           0x0008
  2368. #define UDS_AUTOBUDDY           0x0010
  2369. #define UDS_ARROWKEYS           0x0020
  2370. #define UDS_HORZ                0x0040
  2371. #define UDS_NOTHOUSANDS         0x0080
  2372. #if (_WIN32_IE >= 0x0300)
  2373. #define UDS_HOTTRACK            0x0100
  2374. #endif
  2375. // end_r_commctrl
  2376. #define UDM_SETRANGE            (WM_USER+101)
  2377. #define UDM_GETRANGE            (WM_USER+102)
  2378. #define UDM_SETPOS              (WM_USER+103)
  2379. #define UDM_GETPOS              (WM_USER+104)
  2380. #define UDM_SETBUDDY            (WM_USER+105)
  2381. #define UDM_GETBUDDY            (WM_USER+106)
  2382. #define UDM_SETACCEL            (WM_USER+107)
  2383. #define UDM_GETACCEL            (WM_USER+108)
  2384. #define UDM_SETBASE             (WM_USER+109)
  2385. #define UDM_GETBASE             (WM_USER+110)
  2386. #if (_WIN32_IE >= 0x0400)
  2387. #define UDM_SETRANGE32          (WM_USER+111)
  2388. #define UDM_GETRANGE32          (WM_USER+112) // wParam & lParam are LPINT
  2389. #define UDM_SETUNICODEFORMAT    CCM_SETUNICODEFORMAT
  2390. #define UDM_GETUNICODEFORMAT    CCM_GETUNICODEFORMAT
  2391. #endif
  2392. #if (_WIN32_IE >= 0x0500)
  2393. #define UDM_SETPOS32            (WM_USER+113)
  2394. #define UDM_GETPOS32            (WM_USER+114)
  2395. #endif
  2396. WINCOMMCTRLAPI HWND WINAPI CreateUpDownControl(DWORD dwStyle, int x, int y, int cx, int cy,
  2397.                                 HWND hParent, int nID, HINSTANCE hInst,
  2398.                                 HWND hBuddy,
  2399.                                 int nUpper, int nLower, int nPos);
  2400. #if (_WIN32_IE >= 0x0300)
  2401. #define NM_UPDOWN      NMUPDOWN
  2402. #define LPNM_UPDOWN  LPNMUPDOWN
  2403. #else
  2404. #define NMUPDOWN      NM_UPDOWN
  2405. #define LPNMUPDOWN  LPNM_UPDOWN
  2406. #endif
  2407. typedef struct _NM_UPDOWN
  2408. {
  2409.     NMHDR hdr;
  2410.     int iPos;
  2411.     int iDelta;
  2412. } NMUPDOWN, *LPNMUPDOWN;
  2413. #define UDN_DELTAPOS            (UDN_FIRST - 1)
  2414. #endif  // NOUPDOWN
  2415. //====== PROGRESS CONTROL =====================================================
  2416. #ifndef NOPROGRESS
  2417. #ifdef _WIN32
  2418. #define PROGRESS_CLASSA         "msctls_progress32"
  2419. #define PROGRESS_CLASSW         L"msctls_progress32"
  2420. #ifdef UNICODE
  2421. #define  PROGRESS_CLASS         PROGRESS_CLASSW
  2422. #else
  2423. #define  PROGRESS_CLASS         PROGRESS_CLASSA
  2424. #endif
  2425. #else
  2426. #define PROGRESS_CLASS          "msctls_progress"
  2427. #endif
  2428. // begin_r_commctrl
  2429. #if (_WIN32_IE >= 0x0300)
  2430. #define PBS_SMOOTH              0x01
  2431. #define PBS_VERTICAL            0x04
  2432. #endif
  2433. // end_r_commctrl
  2434. #define PBM_SETRANGE            (WM_USER+1)
  2435. #define PBM_SETPOS              (WM_USER+2)
  2436. #define PBM_DELTAPOS            (WM_USER+3)
  2437. #define PBM_SETSTEP             (WM_USER+4)
  2438. #define PBM_STEPIT              (WM_USER+5)
  2439. #if (_WIN32_IE >= 0x0300)
  2440. #define PBM_SETRANGE32          (WM_USER+6)  // lParam = high, wParam = low
  2441. typedef struct
  2442. {
  2443.    int iLow;
  2444.    int iHigh;
  2445. } PBRANGE, *PPBRANGE;
  2446. #define PBM_GETRANGE            (WM_USER+7)  // wParam = return (TRUE ? low : high). lParam = PPBRANGE or NULL
  2447. #define PBM_GETPOS              (WM_USER+8)
  2448. #if (_WIN32_IE >= 0x0400)
  2449. #define PBM_SETBARCOLOR         (WM_USER+9)             // lParam = bar color
  2450. #endif      // _WIN32_IE >= 0x0400
  2451. #define PBM_SETBKCOLOR          CCM_SETBKCOLOR  // lParam = bkColor
  2452. #endif      // _WIN32_IE >= 0x0300
  2453. #endif  // NOPROGRESS
  2454. //====== HOTKEY CONTROL =======================================================
  2455. #ifndef NOHOTKEY
  2456. #define HOTKEYF_SHIFT           0x01
  2457. #define HOTKEYF_CONTROL         0x02
  2458. #define HOTKEYF_ALT             0x04
  2459. #ifdef _MAC
  2460. #define HOTKEYF_EXT             0x80
  2461. #else
  2462. #define HOTKEYF_EXT             0x08
  2463. #endif
  2464. #define HKCOMB_NONE             0x0001
  2465. #define HKCOMB_S                0x0002
  2466. #define HKCOMB_C                0x0004
  2467. #define HKCOMB_A                0x0008
  2468. #define HKCOMB_SC               0x0010
  2469. #define HKCOMB_SA               0x0020
  2470. #define HKCOMB_CA               0x0040
  2471. #define HKCOMB_SCA              0x0080
  2472. #define HKM_SETHOTKEY           (WM_USER+1)
  2473. #define HKM_GETHOTKEY           (WM_USER+2)
  2474. #define HKM_SETRULES            (WM_USER+3)
  2475. #ifdef _WIN32
  2476. #define HOTKEY_CLASSA           "msctls_hotkey32"
  2477. #define HOTKEY_CLASSW           L"msctls_hotkey32"
  2478. #ifdef UNICODE
  2479. #define HOTKEY_CLASS            HOTKEY_CLASSW
  2480. #else
  2481. #define HOTKEY_CLASS            HOTKEY_CLASSA
  2482. #endif
  2483. #else
  2484. #define HOTKEY_CLASS            "msctls_hotkey"
  2485. #endif
  2486. #endif  // NOHOTKEY
  2487. // begin_r_commctrl
  2488. //====== COMMON CONTROL STYLES ================================================
  2489. #define CCS_TOP                 0x00000001L
  2490. #define CCS_NOMOVEY             0x00000002L
  2491. #define CCS_BOTTOM              0x00000003L
  2492. #define CCS_NORESIZE            0x00000004L
  2493. #define CCS_NOPARENTALIGN       0x00000008L
  2494. #define CCS_ADJUSTABLE          0x00000020L
  2495. #define CCS_NODIVIDER           0x00000040L
  2496. #if (_WIN32_IE >= 0x0300)
  2497. #define CCS_VERT                0x00000080L
  2498. #define CCS_LEFT                (CCS_VERT | CCS_TOP)
  2499. #define CCS_RIGHT               (CCS_VERT | CCS_BOTTOM)
  2500. #define CCS_NOMOVEX             (CCS_VERT | CCS_NOMOVEY)
  2501. #endif
  2502. // end_r_commctrl
  2503. //====== LISTVIEW CONTROL =====================================================
  2504. #ifndef NOLISTVIEW
  2505. #ifdef _WIN32
  2506. #define WC_LISTVIEWA            "SysListView32"
  2507. #define WC_LISTVIEWW            L"SysListView32"
  2508. #ifdef UNICODE
  2509. #define WC_LISTVIEW             WC_LISTVIEWW
  2510. #else
  2511. #define WC_LISTVIEW             WC_LISTVIEWA
  2512. #endif
  2513. #else
  2514. #define WC_LISTVIEW             "SysListView"
  2515. #endif
  2516. // begin_r_commctrl
  2517. #define LVS_ICON                0x0000
  2518. #define LVS_REPORT              0x0001
  2519. #define LVS_SMALLICON           0x0002
  2520. #define LVS_LIST                0x0003
  2521. #define LVS_TYPEMASK            0x0003
  2522. #define LVS_SINGLESEL           0x0004
  2523. #define LVS_SHOWSELALWAYS       0x0008
  2524. #define LVS_SORTASCENDING       0x0010
  2525. #define LVS_SORTDESCENDING      0x0020
  2526. #define LVS_SHAREIMAGELISTS     0x0040
  2527. #define LVS_NOLABELWRAP         0x0080
  2528. #define LVS_AUTOARRANGE         0x0100
  2529. #define LVS_EDITLABELS          0x0200
  2530. #if (_WIN32_IE >= 0x0300)
  2531. #define LVS_OWNERDATA           0x1000
  2532. #endif
  2533. #define LVS_NOSCROLL            0x2000
  2534. #define LVS_TYPESTYLEMASK       0xfc00
  2535. #define LVS_ALIGNTOP            0x0000
  2536. #define LVS_ALIGNLEFT           0x0800
  2537. #define LVS_ALIGNMASK           0x0c00
  2538. #define LVS_OWNERDRAWFIXED      0x0400
  2539. #define LVS_NOCOLUMNHEADER      0x4000
  2540. #define LVS_NOSORTHEADER        0x8000
  2541. // end_r_commctrl
  2542. #if (_WIN32_IE >= 0x0400)
  2543. #define LVM_SETUNICODEFORMAT     CCM_SETUNICODEFORMAT
  2544. #define ListView_SetUnicodeFormat(hwnd, fUnicode)  
  2545.     (BOOL)SNDMSG((hwnd), LVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
  2546. #define LVM_GETUNICODEFORMAT     CCM_GETUNICODEFORMAT
  2547. #define ListView_GetUnicodeFormat(hwnd)  
  2548.     (BOOL)SNDMSG((hwnd), LVM_GETUNICODEFORMAT, 0, 0)
  2549. #endif
  2550. #define LVM_GETBKCOLOR          (LVM_FIRST + 0)
  2551. #define ListView_GetBkColor(hwnd)  
  2552.     (COLORREF)SNDMSG((hwnd), LVM_GETBKCOLOR, 0, 0L)
  2553. #define LVM_SETBKCOLOR          (LVM_FIRST + 1)
  2554. #define ListView_SetBkColor(hwnd, clrBk) 
  2555.     (BOOL)SNDMSG((hwnd), LVM_SETBKCOLOR, 0, (LPARAM)(COLORREF)(clrBk))
  2556. #define LVM_GETIMAGELIST        (LVM_FIRST + 2)
  2557. #define ListView_GetImageList(hwnd, iImageList) 
  2558.     (HIMAGELIST)SNDMSG((hwnd), LVM_GETIMAGELIST, (WPARAM)(INT)(iImageList), 0L)
  2559. #define LVSIL_NORMAL            0
  2560. #define LVSIL_SMALL             1
  2561. #define LVSIL_STATE             2
  2562. #define LVM_SETIMAGELIST        (LVM_FIRST + 3)
  2563. #define ListView_SetImageList(hwnd, himl, iImageList) 
  2564.     (HIMAGELIST)SNDMSG((hwnd), LVM_SETIMAGELIST, (WPARAM)(iImageList), (LPARAM)(HIMAGELIST)(himl))
  2565. #define LVM_GETITEMCOUNT        (LVM_FIRST + 4)
  2566. #define ListView_GetItemCount(hwnd) 
  2567.     (int)SNDMSG((hwnd), LVM_GETITEMCOUNT, 0, 0L)
  2568. #define LVIF_TEXT               0x0001
  2569. #define LVIF_IMAGE              0x0002
  2570. #define LVIF_PARAM              0x0004
  2571. #define LVIF_STATE              0x0008
  2572. #if (_WIN32_IE >= 0x0300)
  2573. #define LVIF_INDENT             0x0010
  2574. #define LVIF_NORECOMPUTE        0x0800
  2575. #endif
  2576. #if (_WIN32_WINNT >= 0x501)
  2577. #define LVIF_GROUPID            0x0100
  2578. #define LVIF_COLUMNS            0x0200
  2579. #endif
  2580. #define LVIS_FOCUSED            0x0001
  2581. #define LVIS_SELECTED           0x0002
  2582. #define LVIS_CUT                0x0004
  2583. #define LVIS_DROPHILITED        0x0008
  2584. #define LVIS_GLOW               0x0010
  2585. #define LVIS_ACTIVATING         0x0020
  2586. #define LVIS_OVERLAYMASK        0x0F00
  2587. #define LVIS_STATEIMAGEMASK     0xF000
  2588. #define INDEXTOSTATEIMAGEMASK(i) ((i) << 12)
  2589. #if (_WIN32_IE >= 0x0300)
  2590. #define I_INDENTCALLBACK        (-1)
  2591. #define LV_ITEMA LVITEMA
  2592. #define LV_ITEMW LVITEMW
  2593. #else
  2594. #define tagLVITEMA    _LV_ITEMA
  2595. #define LVITEMA       LV_ITEMA
  2596. #define tagLVITEMW    _LV_ITEMW
  2597. #define LVITEMW       LV_ITEMW
  2598. #endif
  2599. #if (_WIN32_WINNT >= 0x501)
  2600. #define I_GROUPIDCALLBACK   (-1)
  2601. #define I_GROUPIDNONE       (-2)
  2602. #endif
  2603. #define LV_ITEM LVITEM
  2604. #define LVITEMA_V1_SIZE CCSIZEOF_STRUCT(LVITEMA, lParam)
  2605. #define LVITEMW_V1_SIZE CCSIZEOF_STRUCT(LVITEMW, lParam)
  2606. typedef struct tagLVITEMA
  2607. {
  2608.     UINT mask;
  2609.     int iItem;
  2610.     int iSubItem;
  2611.     UINT state;
  2612.     UINT stateMask;
  2613.     LPSTR pszText;
  2614.     int cchTextMax;
  2615.     int iImage;
  2616.     LPARAM lParam;
  2617. #if (_WIN32_IE >= 0x0300)
  2618.     int iIndent;
  2619. #endif
  2620. #if (_WIN32_WINNT >= 0x501)
  2621.     int iGroupId;
  2622.     UINT cColumns; // tile view columns
  2623.     PUINT puColumns;
  2624. #endif
  2625. } LVITEMA, *LPLVITEMA;
  2626. typedef struct tagLVITEMW
  2627. {
  2628.     UINT mask;
  2629.     int iItem;
  2630.     int iSubItem;
  2631.     UINT state;
  2632.     UINT stateMask;
  2633.     LPWSTR pszText;
  2634.     int cchTextMax;
  2635.     int iImage;
  2636.     LPARAM lParam;
  2637. #if (_WIN32_IE >= 0x0300)
  2638.     int iIndent;
  2639. #endif
  2640. #if (_WIN32_WINNT >= 0x501)
  2641.     int iGroupId;
  2642.     UINT cColumns; // tile view columns
  2643.     PUINT puColumns;
  2644. #endif
  2645. } LVITEMW, *LPLVITEMW;
  2646. #ifdef UNICODE
  2647. #define LVITEM    LVITEMW
  2648. #define LPLVITEM  LPLVITEMW
  2649. #define LVITEM_V1_SIZE LVITEMW_V1_SIZE
  2650. #else
  2651. #define LVITEM    LVITEMA
  2652. #define LPLVITEM  LPLVITEMA
  2653. #define LVITEM_V1_SIZE LVITEMA_V1_SIZE
  2654. #endif
  2655. #define LPSTR_TEXTCALLBACKW     ((LPWSTR)-1L)
  2656. #define LPSTR_TEXTCALLBACKA     ((LPSTR)-1L)
  2657. #ifdef UNICODE
  2658. #define LPSTR_TEXTCALLBACK      LPSTR_TEXTCALLBACKW
  2659. #else
  2660. #define LPSTR_TEXTCALLBACK      LPSTR_TEXTCALLBACKA
  2661. #endif
  2662. #define I_IMAGECALLBACK         (-1)
  2663. #if (_WIN32_IE >= 0x0501)
  2664. #define I_IMAGENONE             (-2)
  2665. #endif  // 0x0501
  2666. #if (_WIN32_WINNT >= 0x501)
  2667. // For tileview
  2668. #define I_COLUMNSCALLBACK       ((UINT)-1)
  2669. #endif
  2670. #define LVM_GETITEMA            (LVM_FIRST + 5)
  2671. #define LVM_GETITEMW            (LVM_FIRST + 75)
  2672. #ifdef UNICODE
  2673. #define LVM_GETITEM             LVM_GETITEMW
  2674. #else
  2675. #define LVM_GETITEM             LVM_GETITEMA
  2676. #endif
  2677. #define ListView_GetItem(hwnd, pitem) 
  2678.     (BOOL)SNDMSG((hwnd), LVM_GETITEM, 0, (LPARAM)(LV_ITEM *)(pitem))
  2679. #define LVM_SETITEMA            (LVM_FIRST + 6)
  2680. #define LVM_SETITEMW            (LVM_FIRST + 76)
  2681. #ifdef UNICODE
  2682. #define LVM_SETITEM             LVM_SETITEMW
  2683. #else
  2684. #define LVM_SETITEM             LVM_SETITEMA
  2685. #endif
  2686. #define ListView_SetItem(hwnd, pitem) 
  2687.     (BOOL)SNDMSG((hwnd), LVM_SETITEM, 0, (LPARAM)(const LV_ITEM *)(pitem))
  2688. #define LVM_INSERTITEMA         (LVM_FIRST + 7)
  2689. #define LVM_INSERTITEMW         (LVM_FIRST + 77)
  2690. #ifdef UNICODE
  2691. #define LVM_INSERTITEM          LVM_INSERTITEMW
  2692. #else
  2693. #define LVM_INSERTITEM          LVM_INSERTITEMA
  2694. #endif
  2695. #define ListView_InsertItem(hwnd, pitem)   
  2696.     (int)SNDMSG((hwnd), LVM_INSERTITEM, 0, (LPARAM)(const LV_ITEM *)(pitem))
  2697. #define LVM_DELETEITEM          (LVM_FIRST + 8)
  2698. #define ListView_DeleteItem(hwnd, i) 
  2699.     (BOOL)SNDMSG((hwnd), LVM_DELETEITEM, (WPARAM)(int)(i), 0L)
  2700. #define LVM_DELETEALLITEMS      (LVM_FIRST + 9)
  2701. #define ListView_DeleteAllItems(hwnd) 
  2702.     (BOOL)SNDMSG((hwnd), LVM_DELETEALLITEMS, 0, 0L)
  2703. #define LVM_GETCALLBACKMASK     (LVM_FIRST + 10)
  2704. #define ListView_GetCallbackMask(hwnd) 
  2705.     (BOOL)SNDMSG((hwnd), LVM_GETCALLBACKMASK, 0, 0)
  2706. #define LVM_SETCALLBACKMASK     (LVM_FIRST + 11)
  2707. #define ListView_SetCallbackMask(hwnd, mask) 
  2708.     (BOOL)SNDMSG((hwnd), LVM_SETCALLBACKMASK, (WPARAM)(UINT)(mask), 0)
  2709. #define LVNI_ALL                0x0000
  2710. #define LVNI_FOCUSED            0x0001
  2711. #define LVNI_SELECTED           0x0002
  2712. #define LVNI_CUT                0x0004
  2713. #define LVNI_DROPHILITED        0x0008
  2714. #define LVNI_ABOVE              0x0100
  2715. #define LVNI_BELOW              0x0200
  2716. #define LVNI_TOLEFT             0x0400
  2717. #define LVNI_TORIGHT            0x0800