commctrl.h

Package [view]: shell.rar
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 121k
Category: Windows Kernel
Development Platform: Visual C++
  1. /*****************************************************************************
  2. *                                                                             *
  3. * commctrl.h - - Interface for the Windows Common Controls       *
  4. *                                                                             *
  5. * Version 1.0       *
  6. *                                                                             *
  7. * Copyright (c) 1991-1995, Microsoft Corp. All rights reserved.       *
  8. *                                                                             *
  9. *****************************************************************************/
  10. /*REVIEW: this stuff needs Windows style in many places; find all REVIEWs. */
  11. #ifndef _INC_COMMCTRL
  12. #define _INC_COMMCTRL
  13. #ifndef NOUSER
  14. //
  15. // Define API decoration for direct importing of DLL references.
  16. //
  17. #ifndef WINCOMMCTRLAPI
  18. #if !defined(_COMCTL32_) && defined(_WIN32)
  19. #define WINCOMMCTRLAPI DECLSPEC_IMPORT
  20. #else
  21. #define WINCOMMCTRLAPI
  22. #endif
  23. #endif // WINCOMMCTRLAPI
  24. //
  25. // For compilers that don't support nameless unions
  26. //
  27. #ifndef DUMMYUNIONNAME
  28. #ifdef NONAMELESSUNION
  29. #define DUMMYUNIONNAME  u
  30. #define DUMMYUNIONNAME2  u2
  31. #define DUMMYUNIONNAME3  u3
  32. #else
  33. #define DUMMYUNIONNAME
  34. #define DUMMYUNIONNAME2
  35. #define DUMMYUNIONNAME3
  36. #endif
  37. #endif // DUMMYUNIONNAME
  38. #ifdef _WIN32
  39. #include <pshpack1.h>
  40. #endif
  41. #ifdef __cplusplus
  42. extern "C" {
  43. #endif
  44. /* Users of this header may define any number of these constants to avoid
  45.  * the definitions of each functional group.
  46.  *    NOTOOLBAR    Customizable bitmap-button toolbar control.
  47.  *    NOUPDOWN     Up and Down arrow increment/decrement control.
  48.  *    NOSTATUSBAR  Status bar and header bar controls.
  49.  *    NOMENUHELP   APIs to help manage menus, especially with a status bar.
  50.  *    NOTRACKBAR   Customizable column-width tracking control.
  51.  *    NOBTNLIST    A control which is a list of bitmap buttons. ;Internal
  52.  *    NODRAGLIST   APIs to make a listbox source and sink drag&drop actions.
  53.  *    NOPROGRESS   Progress gas gauge.
  54.  *    NOHOTKEY     HotKey control
  55.  */
  56. /*/////////////////////////////////////////////////////////////////////////*/
  57. /* InitCommonControls:
  58.  * Any application requiring the use of any common control should call this
  59.  * API upon application startup.  There is no required shutdown.
  60.  */
  61. WINCOMMCTRLAPI void WINAPI InitCommonControls();
  62. // Define Ownerdraw type for Header controls BUGBUG: should be in windows.h?
  63. #define ODT_HEADER      100
  64. #define ODT_TAB         101
  65. #define ODT_LISTVIEW    102
  66. //====== Ranges for control message IDs
  67. // (making each control's messages unique makes validation and
  68. // debugging easier).
  69. //
  70. #define LVM_FIRST       0x1000      // ListView messages
  71. #define TV_FIRST        0x1100      // TreeView messages
  72. #define HDM_FIRST       0x1200      // Header messages
  73. WINCOMMCTRLAPI LRESULT WINAPI SendNotify(HWND hwndTo, HWND hwndFrom, int code, NMHDR FAR* pnmhdr); /* ;Internal */
  74. #define HANDLE_WM_NOTIFY(hwnd, wParam, lParam, fn) 
  75.     (fn)((hwnd), (int)(wParam), (NMHDR FAR*)(lParam))
  76. #define FORWARD_WM_NOTIFY(hwnd, idFrom, pnmhdr, fn) 
  77.     (LRESULT)(fn)((hwnd), WM_NOTIFY, (WPARAM)(int)(idFrom), (LPARAM)(NMHDR FAR*)(pnmhdr))
  78. // Generic WM_NOTIFY notification codes
  79. #define NM_OUTOFMEMORY          (NM_FIRST-1)
  80. #define NM_CLICK                (NM_FIRST-2)
  81. #define NM_DBLCLK               (NM_FIRST-3)
  82. #define NM_RETURN               (NM_FIRST-4)
  83. #define NM_RCLICK               (NM_FIRST-5)
  84. #define NM_RDBLCLK              (NM_FIRST-6)
  85. #define NM_SETFOCUS             (NM_FIRST-7)
  86. #define NM_KILLFOCUS            (NM_FIRST-8)
  87. #define NM_STARTWAIT            (NM_FIRST-9)     // ;Internal
  88. #define NM_ENDWAIT              (NM_FIRST-10)    // ;Internal
  89. #define NM_BTNCLK               (NM_FIRST-11)   // ;Internal
  90. // WM_NOTIFY codes (NMHDR.code values)
  91. // these are not required to be in seperate ranges but that makes
  92. // validation and debugging easier
  93. #define NM_FIRST        (0U-  0U) // generic to all controls
  94. #define NM_LAST         (0U- 99U)
  95. #define LVN_FIRST       (0U-100U) // listview
  96. #define LVN_LAST        (0U-199U)
  97. #define HDN_FIRST       (0U-300U) // header
  98. #define HDN_LAST        (0U-399U)
  99. #define TVN_FIRST       (0U-400U) // treeview
  100. #define TVN_LAST        (0U-499U)
  101. #define TTN_FIRST (0U-520U) // tooltips
  102. #define TTN_LAST (0U-549U)
  103. #define TCN_FIRST       (0U-550U) // tab control
  104. #define TCN_LAST        (0U-580U)
  105. // Shell reserved       (0U-580U) -  (0U-589U)
  106. #define CDN_FIRST (0U-601U) // common dialog (new)
  107. #define CDN_LAST (0U-699U)
  108. #define TBN_FIRST       (0U-700U) // toolbar
  109. #define TBN_LAST        (0U-720U)
  110. #define UDN_FIRST       (0U-721) // updown
  111. #define UDN_LAST        (0U-740) // updown
  112. // Message Filter Proc codes - These are defined above MSGF_USER
  113. #define MSGF_COMMCTRL_BEGINDRAG     0x4200
  114. #define MSGF_COMMCTRL_SIZEHEADER    0x4201     
  115. #define MSGF_COMMCTRL_DRAGSELECT    0x4202
  116. #define MSGF_COMMCTRL_TOOLBARCUST   0x4203
  117. //====== IMAGE APIS ==================================================
  118. #define CLR_NONE    0xFFFFFFFFL
  119. #define CLR_DEFAULT 0xFF000000L
  120. struct _IMAGELIST;
  121. typedef struct _IMAGELIST NEAR* HIMAGELIST;
  122. #define ILC_MASK        0x0001      // ImageList has a mask
  123. #define ILC_COLOR       0           // use default
  124. #define ILC_COLORMASK   0x00FE      // ;Internal
  125. #define ILC_COLORDDB    0x00FE      // use device dependent bitmap
  126. #define ILC_COLOR4      0x0004      // use 4bpp DIBSection
  127. #define ILC_COLOR8      0x0008      // use 8bpp DIBSection
  128. #define ILC_COLOR16     0x0010      // use 16bpp DIBSection
  129. #define ILC_COLOR24     0x0018      // use 24bpp DIBSection
  130. #define ILC_COLOR32     0x0020      // use 32bpp DIBSection
  131. #define ILC_SHARED      0x0100      // this is a shareable image list                               /* ;Internal */
  132. #define ILC_LARGESMALL  0x0200      // contains both large and small images (not implenented)       /* ;Internal */
  133. #define ILC_UNIQUE      0x0400      // makes sure no dup. image exists in list (not implenented)    /* ;Internal */
  134. #define ILC_PALETTE     0x0800      // use palette with image list (not implenented)                /* ;Internal */
  135. WINCOMMCTRLAPI HIMAGELIST  WINAPI ImageList_Create(int cx, int cy, UINT flags, int cInitial, int cGrow);
  136. WINCOMMCTRLAPI BOOL        WINAPI ImageList_Destroy(HIMAGELIST himl);
  137. WINCOMMCTRLAPI int         WINAPI ImageList_GetImageCount(HIMAGELIST himl);
  138. WINCOMMCTRLAPI int         WINAPI ImageList_Add(HIMAGELIST himl, HBITMAP hbmImage, HBITMAP hbmMask);
  139. WINCOMMCTRLAPI int         WINAPI ImageList_ReplaceIcon(HIMAGELIST himl, int i, HICON hicon);
  140. WINCOMMCTRLAPI COLORREF    WINAPI ImageList_SetBkColor(HIMAGELIST himl, COLORREF clrBk);
  141. WINCOMMCTRLAPI COLORREF    WINAPI ImageList_GetBkColor(HIMAGELIST himl);
  142. WINCOMMCTRLAPI BOOL        WINAPI ImageList_SetOverlayImage(HIMAGELIST himl, int iImage, int iOverlay);
  143. #define     ImageList_AddIcon(himl, hicon) ImageList_ReplaceIcon(himl, -1, hicon)
  144. #define ILD_NORMAL      0x0000          // use current bkcolor
  145. #define ILD_TRANSPARENT 0x0001          // force transparent icon style (override bk color)
  146. #define ILD_MASK        0x0010          // draw the mask
  147. #define ILD_IMAGE       0x0020          // draw the image
  148. #define ILD_BLENDMASK   0x000E          // ;Internal
  149. #define ILD_BLEND25     0x0002          // blend 25%
  150. #define ILD_BLEND50     0x0004          // blend 50%
  151. #define ILD_BLEND75     0x0008          // blend 75% (not implemented!) // ;Internal
  152. #define ILD_OVERLAYMASK 0x0F00 // use these as indexes into special items
  153. #define INDEXTOOVERLAYMASK(i) ((i) << 8)    //
  154. #define OVERLAYMASKTOINDEX(i) ((((i) >> 8) & (ILD_OVERLAYMASK >> 8))-1) // ;Internal
  155. // old flags we still keep around       /* ;Internal */
  156. #define ILD_SELECTED    ILD_BLEND50     // draw as selected
  157. #define ILD_FOCUS       ILD_BLEND25     // draw as focused (selection)
  158. #define ILD_BLEND       ILD_BLEND50     // blend 50%
  159. #define CLR_HILIGHT     CLR_DEFAULT     // draw using default color
  160. WINCOMMCTRLAPI BOOL WINAPI ImageList_Draw(HIMAGELIST himl, int i, HDC hdcDst, int x, int y, UINT fStyle);
  161. // BUGBUG remove these! /* ;Internal */
  162. WINCOMMCTRLAPI BOOL        WINAPI ImageList_GetIconSize(HIMAGELIST himl, int FAR *cx, int FAR *cy);                                           /* ;Internal */
  163. WINCOMMCTRLAPI BOOL        WINAPI ImageList_GetImageRect(HIMAGELIST himl, int i, RECT FAR* prcImage);                                         /* ;Internal */
  164. 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); /* ;Internal */
  165. WINCOMMCTRLAPI BOOL        WINAPI ImageList_Remove(HIMAGELIST himl, int i);                                                                   /* ;Internal */
  166. #ifdef _WIN32
  167. WINCOMMCTRLAPI BOOL        WINAPI ImageList_Replace(HIMAGELIST himl, int i, HBITMAP hbmImage, HBITMAP hbmMask);
  168. WINCOMMCTRLAPI int         WINAPI ImageList_AddMasked(HIMAGELIST himl, HBITMAP hbmImage, COLORREF crMask);
  169. 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);
  170. WINCOMMCTRLAPI BOOL        WINAPI ImageList_Remove(HIMAGELIST himl, int i);
  171. WINCOMMCTRLAPI HICON       WINAPI ImageList_GetIcon(HIMAGELIST himl, int i, UINT flags);
  172. WINCOMMCTRLAPI HIMAGELIST  WINAPI ImageList_LoadImage(HINSTANCE hi, LPCSTR lpbmp, int cx, int cGrow, COLORREF crMask, UINT uType, UINT uFlags);
  173. WINCOMMCTRLAPI BOOL WINAPI ImageList_BeginDrag(HIMAGELIST himlTrack, int iTrack, int dxHotspot, int dyHotspot);
  174. WINCOMMCTRLAPI void WINAPI ImageList_EndDrag();
  175. WINCOMMCTRLAPI BOOL WINAPI ImageList_DragEnter(HWND hwndLock, int x, int y);
  176. WINCOMMCTRLAPI BOOL WINAPI ImageList_DragLeave(HWND hwndLock);
  177. WINCOMMCTRLAPI BOOL WINAPI ImageList_DragMove(int x, int y);
  178. WINCOMMCTRLAPI BOOL WINAPI ImageList_SetDragCursorImage(HIMAGELIST himlDrag, int iDrag, int dxHotspot, int dyHotspot);
  179. WINCOMMCTRLAPI BOOL WINAPI ImageList_DragShowNolock(BOOL fShow);
  180. WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_GetDragImage(POINT FAR* ppt,POINT FAR* pptHotspot);
  181. #define     ImageList_RemoveAll(himl) ImageList_Remove(himl, -1)
  182. #define     ImageList_ExtractIcon(hi, himl, i) ImageList_GetIcon(himl, i, 0)
  183. #define     ImageList_LoadBitmap(hi, lpbmp, cx, cGrow, crMask) ImageList_LoadImage(hi, lpbmp, cx, cGrow, crMask, IMAGE_BITMAP, 0)
  184. #ifdef __IStream_INTERFACE_DEFINED__
  185. WINCOMMCTRLAPI HIMAGELIST  WINAPI ImageList_Read(LPSTREAM pstm);
  186. WINCOMMCTRLAPI BOOL        WINAPI ImageList_Write(HIMAGELIST himl, LPSTREAM pstm);
  187. #endif
  188. typedef struct _IMAGEINFO
  189. {
  190.     HBITMAP hbmImage;
  191.     HBITMAP hbmMask;
  192.     int     Unused1;
  193.     int     Unused2;
  194.     RECT    rcImage;
  195. } IMAGEINFO;
  196. WINCOMMCTRLAPI BOOL        WINAPI ImageList_GetIconSize(HIMAGELIST himl, int FAR *cx, int FAR *cy);
  197. WINCOMMCTRLAPI BOOL        WINAPI ImageList_SetIconSize(HIMAGELIST himl, int cx, int cy);
  198. WINCOMMCTRLAPI BOOL        WINAPI ImageList_GetImageInfo(HIMAGELIST himl, int i, IMAGEINFO FAR* pImageInfo);
  199. WINCOMMCTRLAPI HIMAGELIST  WINAPI ImageList_Merge(HIMAGELIST himl1, int i1, HIMAGELIST himl2, int i2, int dx, int dy);
  200. #endif // _WIN32
  201. //================ HEADER APIS =============================================
  202. //
  203. // Class name: SysHeader (WC_HEADER)
  204. //
  205. // The SysHeader control provides for column and row headers much like those
  206. // found in MSMail and Excel.  Header items appear as text on a gray
  207. // background. Items can behave as pushbuttons, in which case they have a
  208. // raised face.
  209. //
  210. // SysHeaders support changing width or height of items using the mouse.
  211. // These controls do not support a keyboard interface, so they do not accept
  212. // the input focus.
  213. //
  214. // There are notifications that allow applications to determine when an item
  215. // has been clicked or double clicked, width change has occured, drag tracking
  216. // is occuring, etc.
  217. //
  218. //////////////////////////////////////////////////////////////////////////////
  219. #ifdef _WIN32
  220. #define WC_HEADER       "SysHeader32"
  221. #else
  222. #define WC_HEADER       "SysHeader"
  223. #endif
  224. // Header control styles
  225. #define HDS_HORZ            0x00000000  // Horizontal header
  226. #define HDS_VERT            0x00000001  // ;Internal BUGBUG: not implemente
  227. #define HDS_BUTTONS         0x00000002  // Items act as buttons
  228. #define HDS_DIVIDERTRACK    0x00000004  // ;Internal (on by default) width tracking
  229. #define HDS_HIDDEN      0x00000008  // don't show the headers (use as info storage), actually goes to 0 height
  230. // The HD_ITEM structure describes a header item.
  231. // The first field contains a combination of HDI_* flags
  232. // indicating which fields contain valid data.
  233. //
  234. typedef struct _HD_ITEM
  235. {
  236.     UINT    mask;
  237.     int     cxy;            // width (HDS_HORZ) or height (HDS_VERT)
  238.     LPSTR   pszText;
  239.     HBITMAP hbm;            // Bitmap to use (implies HDF_BITMAP)
  240.     int     cchTextMax;     // Valid only for GetItem: contains size of buffer
  241.     int     fmt;            // HDF_* value
  242.     LPARAM  lParam;
  243. } HD_ITEM;
  244. // HD_ITEM mask flags
  245. #define HDI_WIDTH       0x0001
  246. #define HDI_HEIGHT      HDI_WIDTH
  247. #define HDI_TEXT        0x0002
  248. #define HDI_FORMAT      0x0004
  249. #define HDI_LPARAM      0x0008
  250. #define HDI_BITMAP      0x0010
  251. #define HDI_ALL         0x001f  /* ;Internal */
  252. // HD_ITEM fmt field values
  253. // First justification values
  254. #define HDF_LEFT        0
  255. #define HDF_RIGHT       1
  256. #define HDF_CENTER      2
  257. #define HDF_JUSTIFYMASK 0x0003
  258. //
  259. // MidEast languages only
  260. #define HDF_RTLREADING  4
  261. // Now other formating options
  262. #define HDF_OWNERDRAW   0x8000
  263. #define HDF_STRING      0x4000
  264. #define HDF_BITMAP      0x2000
  265. // Returns number of items in header.
  266. //
  267. // int Header_GetItemCount(HWND hwndHD);
  268. //
  269. #define HDM_GETITEMCOUNT    (HDM_FIRST + 0)
  270. #define Header_GetItemCount(hwndHD) 
  271.     (int)SendMessage((hwndHD), HDM_GETITEMCOUNT, 0, 0L)
  272. // Insert header item at specified index.  Item is inserted at end if
  273. // i is greater than or equal to the number of items in the header.
  274. // Returns the index of the inserted item.
  275. //
  276. // int Header_InsertItem(HWND hwndHD, int i, const HD_ITEM FAR* pitem);
  277. //
  278. #define HDM_INSERTITEM      (HDM_FIRST + 1)
  279. #define Header_InsertItem(hwndHD, i, phdi) 
  280.     (int)SendMessage((hwndHD), HDM_INSERTITEM, (WPARAM)(int)(i), (LPARAM)(const HD_ITEM FAR*)(phdi))
  281. // Delete a header item at the specified index.
  282. //
  283. // BOOL Header_DeleteItem(HWND hwndHD, int i);
  284. //
  285. #define HDM_DELETEITEM      (HDM_FIRST + 2)
  286. #define Header_DeleteItem(hwndHD, i) 
  287.     (BOOL)SendMessage((hwndHD), HDM_DELETEITEM, (WPARAM)(int)(i), 0L)
  288. // Get header item at index i.  The mask field of the pointed-to
  289. // HD_ITEM structure indicates which fields will be set by this
  290. // function; other fields are not changed.
  291. //
  292. // The cchTextMax field of *pitem contains the maximum
  293. // length of the returned string.
  294. //
  295. // BOOL Header_GetItem(HWND hwndHD, int i, HD_ITEM FAR* phdi);
  296. //
  297. #define HDM_GETITEM         (HDM_FIRST + 3)
  298. #define Header_GetItem(hwndHD, i, phdi) 
  299.     (BOOL)SendMessage((hwndHD), HDM_GETITEM, (WPARAM)(int)(i), (LPARAM)(HD_ITEM FAR*)(phdi))
  300. // Set header item at index i.  The mask field of the pointed-to
  301. // HD_ITEM structure indicates which header item attributes will
  302. // be changed by this call; other fields of *pitem that do not
  303. // correspond to pitem->mask are ignored.
  304. //
  305. // The cchTextMax of *pitem is ignored.
  306. //
  307. // BOOL Header_SetItem(HWND hwndHD, int i, const HD_ITEM FAR* phdi);
  308. //
  309. #define HDM_SETITEM         (HDM_FIRST + 4)
  310. #define Header_SetItem(hwndHD, i, phdi) 
  311.     (BOOL)SendMessage((hwndHD), HDM_SETITEM, (WPARAM)(int)(i), (LPARAM)(const HD_ITEM FAR*)(phdi))
  312. // Calculate size and position of header within a rectangle.
  313. // Results are returned in a WINDOWPOS structure you supply,
  314. // and the layout rectangle is adjusted to exclude the leftover area.
  315. //
  316. typedef struct _HD_LAYOUT
  317. {
  318.     RECT FAR* prc;
  319.     WINDOWPOS FAR* pwpos;
  320. } HD_LAYOUT;
  321. // BOOL Header_Layout(HWND hwndHD, HD_LAYOUT FAR* playout);
  322. //
  323. #define HDM_LAYOUT          (HDM_FIRST + 5)
  324. #define Header_Layout(hwndHD, playout) 
  325.     (BOOL)SendMessage((hwndHD), HDM_LAYOUT, 0, (LPARAM)(HD_LAYOUT FAR*)(playout))
  326. #define HHT_NOWHERE         0x0001
  327. #define HHT_ONHEADER        0x0002
  328. #define HHT_ONDIVIDER       0x0004
  329. #define HHT_ONDIVOPEN       0x0008
  330. #define HHT_ABOVE           0x0100
  331. #define HHT_BELOW           0x0200
  332. #define HHT_TORIGHT         0x0400
  333. #define HHT_TOLEFT          0x0800
  334. typedef struct _HD_HITTESTINFO
  335. {
  336.     POINT pt;     // in: client coords
  337.     UINT flags;     // out: HHT_ flags
  338.     int iItem;     // out: item
  339. } HD_HITTESTINFO;
  340. #define HDM_HITTEST          (HDM_FIRST + 6)
  341. // Header Notifications
  342. //
  343. // All header notifications are via the WM_NOTIFY message.
  344. // lParam of WM_NOTIFY points to a HD_NOTIFY structure for
  345. // all of the following notifications.
  346. // *pitem contains item being changed.  pitem->mask indicates
  347. // which fields are valid (others have indeterminate state)
  348. //
  349. #define HDN_ITEMCHANGING    (HDN_FIRST-0)
  350. #define HDN_ITEMCHANGED     (HDN_FIRST-1)
  351. // Item has been clicked or doubleclicked (HDS_BUTTONS only)
  352. // iButton contains button id: 0=left, 1=right, 2=middle.
  353. //
  354. #define HDN_ITEMCLICK       (HDN_FIRST-2)
  355. #define HDN_ITEMDBLCLICK    (HDN_FIRST-3)
  356. // Divider area has been clicked or doubleclicked (HDS_DIVIDERTRACK only)
  357. // iButton contains button id: 0=left, 1=right, 2=middle.
  358. //
  359. #define HDN_DIVIDERDBLCLICK (HDN_FIRST-5)
  360. // Begin/end divider tracking (HDS_DIVIDERTRACK only)
  361. // Return TRUE from HDN_BEGINTRACK notification to prevent tracking.
  362. //
  363. #define HDN_BEGINTRACK      (HDN_FIRST-6)
  364. #define HDN_ENDTRACK        (HDN_FIRST-7)
  365. // HDN_DRAG: cxy field contains new height/width, which may be < 0.
  366. // Changing this value will affect the tracked height/width (allowing
  367. // for gridding, pinning, etc).
  368. //
  369. // Return TRUE to cancel tracking.
  370. //
  371. #define HDN_TRACK           (HDN_FIRST-8)
  372. typedef struct _HD_NOTIFY
  373. {
  374.     NMHDR   hdr;
  375.     int     iItem;
  376.     int     iButton;        // *CLICK notifications: 0=left, 1=right, 2=middle
  377.     HD_ITEM FAR* pitem;     // May be NULL
  378. } HD_NOTIFY;
  379. #ifndef NOTOOLBAR
  380. #ifdef _WIN32
  381. #define TOOLBARCLASSNAME "ToolbarWindow32"
  382. #else
  383. #define TOOLBARCLASSNAME "ToolbarWindow"
  384. #endif
  385. typedef struct _TBBUTTON {
  386. /* ;Internal REVIEW: index, command, flag words, resource ids should be UINT */
  387.     int iBitmap; /* index into bitmap of this button's picture */
  388.     int idCommand; /* WM_COMMAND menu ID that this button sends */
  389.     BYTE fsState; /* button's state */
  390.     BYTE fsStyle; /* button's style */
  391. #ifdef _WIN32
  392.     BYTE bReserved[2];  /* Realign to DWORD */
  393. #endif
  394.     DWORD dwData; /* app defined data */
  395.     int iString; /* index into string list */
  396. } TBBUTTON, NEAR* PTBBUTTON, FAR* LPTBBUTTON;
  397. typedef const TBBUTTON FAR* LPCTBBUTTON;
  398. /* ;Internal REVIEW: is this internal? if not, call it TBCOLORMAP, prefix tbc */
  399. typedef struct _COLORMAP {
  400.     COLORREF from;
  401.     COLORREF to;
  402. } COLORMAP, FAR* LPCOLORMAP;
  403. WINCOMMCTRLAPI HWND WINAPI CreateToolbarEx(HWND hwnd, DWORD ws, UINT wID, int nBitmaps,
  404. HINSTANCE hBMInst, UINT wBMID, LPCTBBUTTON lpButtons,
  405. int iNumButtons, int dxButton, int dyButton,
  406. int dxBitmap, int dyBitmap, UINT uStructSize);
  407. WINCOMMCTRLAPI HBITMAP WINAPI CreateMappedBitmap(HINSTANCE hInstance, int idBitmap,
  408.                                   UINT wFlags, LPCOLORMAP lpColorMap,
  409.   int iNumMaps);
  410. #define CMB_DISCARDABLE 0x01 /* ;Internal BUGBUG: remove this */
  411. #define CMB_MASKED 0x02 /* create image/mask pair in bitmap */
  412. /*REVIEW: TBSTATE_* should be TBF_* (for Flags) */
  413. #define TBSTATE_CHECKED 0x01 /* radio button is checked */
  414. #define TBSTATE_PRESSED 0x02 /* button is being depressed (any style) */
  415. #define TBSTATE_ENABLED 0x04 /* button is enabled */
  416. #define TBSTATE_HIDDEN 0x08 /* button is hidden */
  417. #define TBSTATE_INDETERMINATE 0x10 /* button is indeterminate */
  418. #define TBSTATE_WRAP 0x20 /* there is a line break after this button */
  419.                                         /*  (needs to be endabled, too) */
  420. #define TBSTYLE_BUTTON 0x00 /* this entry is button */
  421. #define TBSTYLE_SEP 0x01 /* this entry is a separator */
  422. #define TBSTYLE_CHECK 0x02 /* this is a check button (it stays down) */
  423. #define TBSTYLE_GROUP 0x04 /* this is a check button (it stays down) */
  424. #define TBSTYLE_CHECKGROUP (TBSTYLE_GROUP | TBSTYLE_CHECK) /* this group is a member of a group radio group */
  425. /* TOOLBAR window styles (not button, not trackbar) */
  426. #define TBSTYLE_TOOLTIPS 0x0100    /* make/use a tooltips control */
  427. #define TBSTYLE_WRAPABLE 0x0200    /* wrappable */
  428. #define TBSTYLE_ALTDRAG  0x0400   /* use ALT for drag/drop customize instead of SHIFT */
  429. #define TB_ENABLEBUTTON (WM_USER + 1)
  430. #define TB_CHECKBUTTON (WM_USER + 2)
  431. #define TB_PRESSBUTTON (WM_USER + 3)
  432. #define TB_HIDEBUTTON (WM_USER + 4)
  433. #define TB_INDETERMINATE (WM_USER + 5)
  434. /* ;Internal Messages up to WM_USER+8 are reserved until we define more state bits */
  435. #define TB_ISBUTTONENABLED (WM_USER + 9)
  436. #define TB_ISBUTTONCHECKED (WM_USER + 10)
  437. #define TB_ISBUTTONPRESSED (WM_USER + 11)
  438. #define TB_ISBUTTONHIDDEN (WM_USER + 12)
  439. #define TB_ISBUTTONINDETERMINATE    (WM_USER + 13)
  440. /* ;Internal Messages up to WM_USER+16 are reserved until we define more state bits */
  441. #define TB_SETSTATE             (WM_USER + 17)
  442. #define TB_GETSTATE             (WM_USER + 18)
  443. #define TB_ADDBITMAP (WM_USER + 19)
  444. #ifdef _WIN32
  445. typedef struct {
  446. HINSTANCE hInst; // module handle or NULL, or HINST_COMMCTRL
  447. UINT nID; // if hInst == NULL, HBITMAP, else ID
  448. } TBADDBITMAP, *LPTBADDBITMAP;
  449. #define HINST_COMMCTRL ((HINSTANCE)-1)
  450. #define IDB_STD_SMALL_COLOR 0
  451. #define IDB_STD_LARGE_COLOR 1
  452. #define IDB_STD_SMALL_MONO 2 /* ;Internal not supported yet */
  453. #define IDB_STD_LARGE_MONO 3 /* ;Internal not supported yet */
  454. #define IDB_VIEW_SMALL_COLOR 4
  455. #define IDB_VIEW_LARGE_COLOR 5
  456. #define IDB_VIEW_SMALL_MONO 6 /* ;Internal not supported yet */
  457. #define IDB_VIEW_LARGE_MONO 7 /* ;Internal not supported yet */
  458. // icon indexes for standard bitmap
  459. #define STD_CUT 0
  460. #define STD_COPY 1
  461. #define STD_PASTE 2
  462. #define STD_UNDO 3
  463. #define STD_REDOW 4
  464. #define STD_DELETE 5
  465. #define STD_FILENEW 6
  466. #define STD_FILEOPEN 7
  467. #define STD_FILESAVE 8
  468. #define STD_PRINTPRE 9
  469. #define STD_PROPERTIES 10
  470. #define STD_HELP 11
  471. #define STD_FIND 12
  472. #define STD_REPLACE 13
  473. #define STD_PRINT 14
  474. // icon indexes for standard view bitmap
  475. #define VIEW_LARGEICONS 0
  476. #define VIEW_SMALLICONS 1
  477. #define VIEW_LIST 2
  478. #define VIEW_DETAILS 3
  479. #define VIEW_SORTNAME 4
  480. #define VIEW_SORTSIZE 5
  481. #define VIEW_SORTDATE 6
  482. #define VIEW_SORTTYPE 7
  483. #define VIEW_PARENTFOLDER 8
  484. #define VIEW_NETCONNECT 9
  485. #define VIEW_NETDISCONNECT 10
  486. #define VIEW_NEWFOLDER  11
  487. #endif
  488. #define TB_ADDBUTTONS (WM_USER + 20)
  489. #define TB_INSERTBUTTON (WM_USER + 21)
  490. #define TB_DELETEBUTTON (WM_USER + 22)
  491. #define TB_GETBUTTON (WM_USER + 23)
  492. #define TB_BUTTONCOUNT (WM_USER + 24)
  493. #define TB_COMMANDTOINDEX (WM_USER + 25)
  494. #ifdef _WIN32
  495. typedef struct {
  496.     HKEY hkr;
  497.     LPCSTR pszSubKey;
  498.     LPCSTR pszValueName;
  499. } TBSAVEPARAMS;
  500. // wParam: BOOL (TRUE -> save state, FALSE -> restore
  501. // lParam: pointer to TBSAVERESTOREPARAMS
  502. #endif
  503. #define TB_SAVERESTORE (WM_USER + 26)
  504. #define TB_CUSTOMIZE            (WM_USER + 27)
  505. #define TB_ADDSTRING (WM_USER + 28)
  506. #define TB_GETITEMRECT (WM_USER + 29)
  507. #define TB_BUTTONSTRUCTSIZE (WM_USER + 30)
  508. #define TB_SETBUTTONSIZE (WM_USER + 31)
  509. #define TB_SETBITMAPSIZE (WM_USER + 32)
  510. #define TB_AUTOSIZE (WM_USER + 33)
  511. #define TB_SETBUTTONTYPE (WM_USER + 34)                          /* ;Internal */
  512. #define TB_GETTOOLTIPS (WM_USER + 35)
  513. #define TB_SETTOOLTIPS (WM_USER + 36)
  514. #define TB_SETPARENT (WM_USER + 37)
  515. #ifdef _WIN32 /* ;Internal */
  516. #define TB_ADDBITMAP32 (WM_USER + 38) /* ;Internal */
  517. #endif /* ;Internal */
  518. #define TB_SETROWS (WM_USER + 39)
  519. #define TB_GETROWS (WM_USER + 40)
  520. #define TB_SETCMDID (WM_USER + 42)
  521. #define TB_CHANGEBITMAP (WM_USER + 43)
  522. #define TB_GETBITMAP (WM_USER + 44)
  523. #define TB_GETBUTTONTEXT        (WM_USER + 45)
  524. #define TB_REPLACEBITMAP        (WM_USER + 46)
  525. typedef struct {
  526. HINSTANCE hInstOld;
  527. UINT nIDOld;
  528. HINSTANCE hInstNew;
  529. UINT nIDNew;
  530.         int             nButtons;
  531. } TBREPLACEBITMAP, *LPTBREPLACEBITMAP;
  532. #ifdef _WIN32
  533. #define TBBF_LARGE 0x0001
  534. #define TBBF_MONO 0x0002 /* ;Internal not supported yet */
  535. // returns TBBF_ flags
  536. #define TB_GETBITMAPFLAGS (WM_USER + 41)
  537. #define TBN_GETBUTTONINFO (TBN_FIRST-0)
  538. #define TBN_BEGINDRAG (TBN_FIRST-1)
  539. #define TBN_ENDDRAG (TBN_FIRST-2)
  540. #define TBN_BEGINADJUST (TBN_FIRST-3)
  541. #define TBN_ENDADJUST (TBN_FIRST-4)
  542. #define TBN_RESET (TBN_FIRST-5)
  543. #define TBN_QUERYINSERT (TBN_FIRST-6)
  544. #define TBN_QUERYDELETE (TBN_FIRST-7)
  545. #define TBN_TOOLBARCHANGE (TBN_FIRST-8)
  546. #define TBN_CUSTHELP (TBN_FIRST-9)
  547. typedef struct {
  548.     NMHDR   hdr;
  549.     int     iItem;
  550.     TBBUTTON tbButton;
  551.     int     cchText;
  552.     LPSTR   pszText;
  553. } TBNOTIFY, FAR *LPTBNOTIFY;
  554. #else /* ;Internal */
  555. // for compatibility with the old 16 bit WM_COMMAND hacks /* ;Internal */
  556. typedef struct _ADJUSTINFO { /* ;Internal */
  557.     TBBUTTON tbButton; /* ;Internal */
  558.     char szDescription[1];         /* ;Internal */
  559. } ADJUSTINFO, NEAR* PADJUSTINFO, FAR* LPADJUSTINFO; /* ;Internal */
  560. #define TBN_BEGINDRAG 0x0201 /* ;Internal */
  561. #define TBN_ENDDRAG 0x0203 /* ;Internal */
  562. #define TBN_BEGINADJUST 0x0204 /* ;Internal */
  563. #define TBN_ADJUSTINFO 0x0205 /* ;Internal */
  564. #define TBN_ENDADJUST 0x0206 /* ;Internal */
  565. #define TBN_RESET 0x0207 /* ;Internal */
  566. #define TBN_QUERYINSERT 0x0208 /* ;Internal */
  567. #define TBN_QUERYDELETE 0x0209 /* ;Internal */
  568. #define TBN_TOOLBARCHANGE 0x020a /* ;Internal */
  569. #define TBN_CUSTHELP 0x020b /* ;Internal */
  570. /* ;Internal */
  571. #endif
  572. #endif /* NOTOOLBAR */
  573. /*//////////////////////////////////////////////////////////////////////*/
  574. #ifndef NOTOOLTIPS
  575. #ifdef _WIN32
  576. #define TOOLTIPS_CLASS "tooltips_class32"
  577. #else
  578. #define TOOLTIPS_CLASS "tooltips_class"
  579. #endif
  580. typedef struct {
  581.     UINT cbSize;
  582.     UINT uFlags;
  583.     HWND hwnd;
  584.     UINT uId;
  585.     RECT rect;
  586.     HINSTANCE hinst;
  587.     LPSTR lpszText;
  588. } TOOLINFO, NEAR *PTOOLINFO, FAR *LPTOOLINFO;
  589. #define TTS_ALWAYSTIP           0x01            // check over inactive windows as well
  590. #define TTS_NOPREFIX            0x02
  591. #define TTF_IDISHWND            0x01
  592. #define TTF_WIDISHWND    0x01            // ;Internal
  593. #define TTF_CENTERTIP           0x02            // center the tip under the rect/hwnd
  594. #define TTF_RTLREADING  0x04 // MidEast languages only
  595. #define TTF_STRIPACCELS  0x08 // ;Internal (this is implicit now)
  596. #define TTF_SUBCLASS            0x10
  597. #define TTM_ACTIVATE (WM_USER + 1)   // wparam = BOOL (true or false  = activate or deactivate)
  598. #define TTM_SETDELAYTIME (WM_USER + 3)
  599. #define TTDT_AUTOMATIC          0
  600. #define TTDT_RESHOW             1
  601. #define TTDT_AUTOPOP            2
  602. #define TTDT_INITIAL            3
  603. #define TTM_ADDTOOL (WM_USER + 4)
  604. #define TTM_DELTOOL (WM_USER + 5)
  605. #define TTM_NEWTOOLRECT (WM_USER + 6)
  606. #define TTM_RELAYEVENT (WM_USER + 7)
  607. // lParam has TOOLINFO with hwnd and wid.  this gets filled in
  608. #define TTM_GETTOOLINFO     (WM_USER + 8)
  609. // lParam has TOOLINFO
  610. #define TTM_SETTOOLINFO     (WM_USER + 9)
  611. // returns true or false for found, not found.
  612. // fills in LPHITTESTINFO->ti
  613. #define TTM_HITTEST             (WM_USER +10)
  614. #define TTM_GETTEXT             (WM_USER +11)
  615. #define TTM_UPDATETIPTEXT       (WM_USER +12)
  616. #define TTM_GETTOOLCOUNT        (WM_USER +13)
  617. #define TTM_ENUMTOOLS           (WM_USER +14)
  618. #define TTM_GETCURRENTTOOL      (WM_USER + 15)
  619. #define TTM_WINDOWFROMPOINT     (WM_USER + 16)
  620. typedef struct _TT_HITTESTINFO {
  621.     HWND hwnd;
  622.     POINT pt;
  623.     TOOLINFO ti;
  624. } TTHITTESTINFO, FAR * LPHITTESTINFO;
  625. // WM_NOTIFY message sent to parent window to get tooltip text
  626. // if LPSTR_TEXTCALLBACK is set on any tips
  627. #define TTN_NEEDTEXT (TTN_FIRST - 0)
  628. #define TTN_SHOW        (TTN_FIRST - 1)
  629. #define TTN_POP         (TTN_FIRST - 2)
  630. // WM_NOTIFY structure sent if TTF_QUERYFORTIP is set
  631. // the host can
  632. // 1) fill in the szText,
  633. // 2) point lpszText to their own text
  634. // 3) put a resource id number in lpszText
  635. //      and point hinst to the hinstance to load from
  636. typedef struct {
  637.     NMHDR hdr;
  638.     LPSTR lpszText;
  639.     char szText[80];
  640.     HINSTANCE hinst;
  641.     UINT uFlags;
  642. } TOOLTIPTEXT, FAR *LPTOOLTIPTEXT;
  643. #endif //NOTOOLTIPS
  644. /*/////////////////////////////////////////////////////////////////////////*/
  645. #ifndef NOSTATUSBAR
  646. /*REVIEW: Here exists the only known documentation for status bars. */
  647. // SBS_* styles need to not overlap with CCS_* values
  648. // want a size gripper on a status bar.  this only applies if the
  649. // DrawFrameControl function is available.
  650. #define SBARS_SIZEGRIP 0x0100
  651. /* DrawStatusText:
  652.  * This is used if the app wants to draw status in its client rect,
  653.  * instead of just creating a window.  Note that this same function is
  654.  * used internally in the status bar window's WM_PAINT message.
  655.  * hDC is the DC to draw to.  The font that is selected into hDC will
  656.  * be used.  The RECT lprc is the only portion of hDC that will be drawn
  657.  * to: the outer edge of lprc will have the highlights (the area outside
  658.  * of the highlights will not be drawn in the BUTTONFACE color: the app
  659.  * must handle that).  The area inside the highlights will be erased
  660.  * properly when drawing the text.
  661.  */
  662. WINCOMMCTRLAPI void WINAPI DrawStatusText(HDC hDC, LPRECT lprc, LPCSTR szText, UINT uFlags);
  663. WINCOMMCTRLAPI HWND WINAPI CreateStatusWindow(LONG style, LPCSTR lpszText, HWND hwndParent, UINT wID);
  664. #ifdef _WIN32
  665. #define STATUSCLASSNAME "msctls_statusbar32"
  666. #else
  667. #define STATUSCLASSNAME "msctls_statusbar"
  668. #endif
  669. #define SB_SETTEXT (WM_USER+1)
  670. #define SB_GETTEXT (WM_USER+2)
  671. #define SB_GETTEXTLENGTH (WM_USER+3)
  672. /* Just like WM_?ETTEXT*, with wParam specifying the pane that is referenced
  673.  * (at most 255).
  674.  * Note that you can use the WM_* versions to reference the 0th pane (this
  675.  * is useful if you want to treat a "default" status bar like a static text
  676.  * control).
  677.  * For SETTEXT, wParam is the pane or'ed with SBT_* style bits (defined below).
  678.  * If the text is "normal" (not OWNERDRAW), then a single pane may have left,
  679.  * center, and right justified text by separating the parts with a single tab,
  680.  * plus if lParam is NULL, then the pane has no text.  The pane will be
  681.  * invalidated, but not draw until the next PAINT message.
  682.  * For GETTEXT and GETTEXTLENGTH, the LOWORD of the return will be the length,
  683.  * and the HIWORD will be the SBT_* style bits.
  684.  */
  685. #define SB_SETPARTS (WM_USER+4)
  686. /* wParam is the number of panes, and lParam points to an array of points
  687.  * specifying the right hand side of each pane.  A right hand side of -1 means
  688.  * it goes all the way to the right side of the control minus the X border
  689.  */
  690. #define SB_SETBORDERS (WM_USER+5) /* ;Internal */
  691. #define SB_GETPARTS (WM_USER+6)
  692. /* lParam is a pointer to an array of integers that will get filled in with
  693.  * the right hand side of each pane and wParam is the size (in integers)
  694.  * of the lParam array (so we do not go off the end of it).
  695.  * Returns the number of panes.
  696.  */
  697. #define SB_GETBORDERS (WM_USER+7)
  698. /* lParam is a pointer to an array of 3 integers that will get filled in with
  699.  * the X border, the Y border, and the between pane border.
  700.  */
  701. #define SB_SETMINHEIGHT (WM_USER+8)
  702. /* wParam is the minimum height of the status bar "drawing" area.  This is
  703.  * the area inside the highlights.  This is most useful if a pane is used
  704.  * for an OWNERDRAW item, and is ignored if the SBS_NORESIZE flag is set.
  705.  * Note that WM_SIZE (wParam=0, lParam=0L) must be sent to the control for
  706.  * any size changes to take effect.
  707.  */
  708. #define SB_SIMPLE (WM_USER+9)
  709. /* wParam specifies whether to set (non-zero) or unset (zero) the "simple"
  710.  * mode of the status bar.  In simple mode, only one pane is displayed, and
  711.  * its text is set with LOWORD(wParam)==255 in the SETTEXT message.
  712.  * OWNERDRAW is not allowed, but other styles are.
  713.  * The pane gets invalidated, but not painted until the next PAINT message,
  714.  * so you can set new text without flicker (I hope).
  715.  * This can be used with the WM_INITMENU and WM_MENUSELECT messages to
  716.  * implement help text when scrolling through a menu.
  717.  */
  718. #define SB_GETRECT              (WM_USER + 10)
  719. // wParam is the nth part
  720. // lparam is lprc
  721. // returns true if found a rect for wParam
  722. #ifndef _WIN32 /* ;Internal */
  723. #ifdef WANT_SUCKY_HEADER /* ;Internal */
  724.                                                                                 /* ;Internal */
  725. WINCOMMCTRLAPI HWND WINAPI CreateHeaderWindow(LONG style, LPCSTR lpszText, HWND hwndParent, UINT wID); /* ;Internal */
  726. /* ;Internal */
  727. #define HEADERCLASSNAME "msctls_headerbar" /* ;Internal */
  728. /* ;Internal */
  729. #define HB_SAVERESTORE (WM_USER+256) /* ;Internal */
  730. /* This gets a header bar to read or write its state to or from an ini file.   */ /* ;Internal */
  731. /* wParam is 0 for reading, non-zero for writing.  lParam is a pointer to      */ /* ;Internal */
  732. /* an array of two LPSTR's: the section and file respectively.        */ /* ;Internal */
  733. /* Note that the correct number of partitions must be set before calling this. */ /* ;Internal */
  734. #define HB_ADJUST (WM_USER+257) /* ;Internal */
  735. /* This puts the header bar into "adjust" mode, for changing column widths     */ /* ;Internal */
  736. /* with the keyboard.        */ /* ;Internal */
  737. #define HB_SETWIDTHS SB_SETPARTS /* ;Internal */
  738. /* Set the widths of the header columns.  Note that "springy" columns only     */ /* ;Internal */
  739. /* have a minumum width, and negative width are assumed to be hidden columns.  */ /* ;Internal */
  740. /* This works just like SB_SETPARTS.        */ /* ;Internal */
  741. #define HB_GETWIDTHS SB_GETPARTS /* ;Internal */
  742. /* Get the widths of the header columns.  Note that "springy" columns only     */ /* ;Internal */
  743. /* have a minumum width.  This works just like SB_GETPARTS.        */ /* ;Internal */
  744. #define HB_GETPARTS (WM_USER+258)         /* ;Internal */
  745. /* Get a list of the right-hand sides of the columns, for use when drawing the */ /* ;Internal */
  746. /* actual columns for which this is a header.        */ /* ;Internal */
  747. /* lParam is a pointer to an array of integers that will get filled in with    */ /* ;Internal */
  748. /* the right hand side of each pane and wParam is the size (in integers)       */ /* ;Internal */
  749. /* of the lParam array (so we do not go off the end of it).        */ /* ;Internal */
  750. /* Returns the number of panes.        */ /* ;Internal */
  751. #define HB_SHOWTOGGLE (WM_USER+259)         /* ;Internal */
  752. /* Toggle the hidden state of a column.  wParam is the 0-based index of the    */ /* ;Internal */
  753. /* column to toggle.        */ /* ;Internal */
  754. /* ;Internal */
  755. #define HBN_BEGINDRAG 0x0101 /* ;Internal */
  756. #define HBN_DRAGGING 0x0102 /* ;Internal */
  757. #define HBN_ENDDRAG 0x0103 /* ;Internal */
  758. #define HBN_BEGINADJUST 0x0111 /* ;Internal */
  759. #define HBN_ENDADJUST 0x0112 /* ;Internal */
  760. /* ;Internal */
  761. #endif /* ;Internal */
  762. #endif // _WIN32 /* ;Internal */
  763. #define SBT_OWNERDRAW 0x1000
  764. /* The lParam of the SB_SETTEXT message will be returned in the DRAWITEMSTRUCT
  765.  * of the WM_DRAWITEM message.  Note that the fields CtlType, itemAction, and
  766.  * itemState of the DRAWITEMSTRUCT are undefined for a status bar.
  767.  * The return value for GETTEXT will be the itemData.
  768.  */
  769. #define SBT_NOBORDERS 0x0100
  770. /* No borders will be drawn for the pane.
  771.  */
  772. #define SBT_POPOUT 0x0200
  773. /* The text pops out instead of in
  774.  */
  775. //
  776. // MidEast languages only
  777. #define SBT_RTLREADING  0x400
  778. #endif /* NOSTATUSBAR */
  779. /*/////////////////////////////////////////////////////////////////////////*/
  780. #ifndef NOMENUHELP
  781. WINCOMMCTRLAPI void WINAPI MenuHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, HMENU hMainMenu, HINSTANCE hInst, HWND hwndStatus, UINT FAR *lpwIDs);
  782. WINCOMMCTRLAPI BOOL WINAPI ShowHideMenuCtl(HWND hWnd, UINT uFlags, LPINT lpInfo);
  783. WINCOMMCTRLAPI void WINAPI GetEffectiveClientRect(HWND hWnd, LPRECT lprc, LPINT lpInfo);
  784. /*REVIEW: is this internal? */
  785. #define MINSYSCOMMAND SC_SIZE
  786. #endif /* NOMENUHELP */
  787. /*/////////////////////////////////////////////////////////////////////////*/ /* ;Internal */
  788. /* ;Internal */
  789. #ifndef NOBTNLIST /* ;Internal */
  790. /* ;Internal */
  791. /*REVIEW: should be BUTTONLIST_CLASS */ /* ;Internal */
  792. #define BUTTONLISTBOX           "ButtonListBox" /* ;Internal */
  793. /* ;Internal */
  794. /* Button List Box Styles */ /* ;Internal */
  795. #define BLS_NUMBUTTONS      0x00FF /* ;Internal */
  796. #define BLS_VERTICAL        0x0100 /* ;Internal */
  797. #define BLS_NOSCROLL        0x0200 /* ;Internal */
  798. /* ;Internal */
  799. /* Button List Box Messages */ /* ;Internal */
  800. #define BL_ADDBUTTON        (WM_USER+1) /* ;Internal */
  801. #define BL_DELETEBUTTON     (WM_USER+2) /* ;Internal */
  802. #define BL_GETCARETINDEX    (WM_USER+3) /* ;Internal */
  803. #define BL_GETCOUNT         (WM_USER+4) /* ;Internal */
  804. #define BL_GETCURSEL        (WM_USER+5) /* ;Internal */
  805. #define BL_GETITEMDATA      (WM_USER+6) /* ;Internal */
  806. #define BL_GETITEMRECT      (WM_USER+7) /* ;Internal */
  807. #define BL_GETTEXT          (WM_USER+8) /* ;Internal */
  808. #define BL_GETTEXTLEN       (WM_USER+9) /* ;Internal */
  809. #define BL_GETTOPINDEX      (WM_USER+10) /* ;Internal */
  810. #define BL_INSERTBUTTON     (WM_USER+11) /* ;Internal */
  811. #define BL_RESETCONTENT     (WM_USER+12) /* ;Internal */
  812. #define BL_SETCARETINDEX    (WM_USER+13) /* ;Internal */
  813. #define BL_SETCURSEL        (WM_USER+14) /* ;Internal */
  814. #define BL_SETITEMDATA      (WM_USER+15) /* ;Internal */
  815. #define BL_SETTOPINDEX      (WM_USER+16) /* ;Internal */
  816. #define BL_MSGMAX           (WM_USER+17) /* ;Internal */ /* ;Internal */
  817. /* ;Internal */
  818. /* Button listbox notification codes send in WM_COMMAND */ /* ;Internal */
  819. #define BLN_ERRSPACE        (-2) /* ;Internal */
  820. #define BLN_SELCHANGE       1 /* ;Internal */
  821. #define BLN_CLICKED         2 /* ;Internal */
  822. #define BLN_SELCANCEL       3 /* ;Internal */
  823. #define BLN_SETFOCUS        4 /* ;Internal */
  824. #define BLN_KILLFOCUS       5 /* ;Internal */
  825. /* ;Internal */
  826. /* Message return values */ /* ;Internal */
  827. #define BL_OKAY             0 /* ;Internal */
  828. #define BL_ERR              (-1) /* ;Internal */
  829. #define BL_ERRSPACE         (-2) /* ;Internal */
  830. /* ;Internal */
  831. /* Create structure for    */ /* ;Internal */
  832. /* BL_ADDBUTTON and    */ /* ;Internal */
  833. /* BL_INSERTBUTTON    */ /* ;Internal */
  834. /*   lpCLB = (LPCREATELISTBUTTON)lParam    */ /* ;Internal */
  835. typedef struct { /* ;Internal */
  836.     UINT        cbSize;     /* size of structure */ /* ;Internal */
  837.     DWORD       dwItemData; /* user defined item data */ /* ;Internal */
  838.                             /* for LB_GETITEMDATA and LB_SETITEMDATA */ /* ;Internal */
  839.     HBITMAP     hBitmap;    /* button bitmap */ /* ;Internal */
  840.     LPCSTR      lpszText;   /* button text */ /* ;Internal */
  841. /* ;Internal */
  842. } CREATELISTBUTTON, FAR* LPCREATELISTBUTTON; /* ;Internal */
  843. /* ;Internal */
  844. #endif /* NOBTNLIST */ /* ;Internal */
  845. /*/////////////////////////////////////////////////////////////////////////*/
  846. // slider control
  847. #ifndef NOTRACKBAR
  848. /*
  849.     This control keeps its ranges in LONGs.  but for
  850.     convienence and symetry with scrollbars
  851.     WORD parameters are are used for some messages.
  852.     if you need a range in LONGs don't use any messages
  853.     that pack values into loword/hiword pairs
  854.     The trackbar messages:
  855.     message         wParam  lParam  return
  856.     TBM_GETPOS      ------  ------  Current logical position of trackbar.
  857.     TBM_GETRANGEMIN ------  ------  Current logical minimum position allowed.
  858.     TBM_GETRANGEMAX ------  ------  Current logical maximum position allowed.
  859.     TBM_SETTIC
  860.     TBM_SETPOS
  861.     TBM_SETRANGEMIN
  862.     TBM_SETRANGEMAX
  863. */
  864. #ifdef _WIN32
  865. #define TRACKBAR_CLASS          "msctls_trackbar32"
  866. #else
  867. #define TRACKBAR_CLASS          "msctls_trackbar"
  868. #endif
  869. /* Trackbar styles */
  870. /* add ticks automatically on TBM_SETRANGE message */
  871. #define TBS_AUTOTICKS           0x0001
  872. #define TBS_VERT                0x0002  /* vertical trackbar */
  873. #define TBS_HORZ                0x0000  /* default */
  874. #define TBS_TOP 0x0004  /* Ticks on top */
  875. #define TBS_BOTTOM 0x0000  /* Ticks on bottom  (default) */
  876. #define TBS_LEFT 0x0004  /* Ticks on left */
  877. #define TBS_RIGHT 0x0000  /* Ticks on right (default) */
  878. #define TBS_BOTH 0x0008  /* Ticks on both side */
  879. #define TBS_NOTICKS 0x0010
  880. #define TBS_ENABLESELRANGE 0x0020
  881. #define TBS_FIXEDLENGTH         0x0040  /* specifies that the thumb will be of fixed size */
  882. #define TBS_NOTHUMB             0x0080
  883. /* Trackbar messages */
  884. /* returns current position (LONG) */
  885. #define TBM_GETPOS              (WM_USER)
  886. /* set the min of the range to LPARAM */
  887. #define TBM_GETRANGEMIN         (WM_USER+1)
  888. /* set the max of the range to LPARAM */
  889. #define TBM_GETRANGEMAX         (WM_USER+2)
  890. /* wParam is index of tick to get (ticks are in the range of min - max) */
  891. #define TBM_GETTIC              (WM_USER+3)
  892. /* wParam is index of tick to set */
  893. #define TBM_SETTIC              (WM_USER+4)
  894. /* set the position to the value of lParam (wParam is the redraw flag) */
  895. #define TBM_SETPOS              (WM_USER+5)
  896. /* LOWORD(lParam) = min, HIWORD(lParam) = max, wParam == fRepaint */
  897. #define TBM_SETRANGE            (WM_USER+6)
  898. /* lParam is range min (use this to keep LONG precision on range) */
  899. #define TBM_SETRANGEMIN         (WM_USER+7)
  900. /* lParam is range max (use this to keep LONG precision on range) */
  901. #define TBM_SETRANGEMAX         (WM_USER+8)
  902. /* remove the ticks */
  903. #define TBM_CLEARTICS           (WM_USER+9)
  904. /* select a range LOWORD(lParam) min, HIWORD(lParam) max */
  905. #define TBM_SETSEL              (WM_USER+10)
  906. /* set selection rang (LONG form) */
  907. #define TBM_SETSELSTART         (WM_USER+11)
  908. #define TBM_SETSELEND           (WM_USER+12)
  909. /* return a pointer to the list of tics (DWORDS) */
  910. #define TBM_GETPTICS            (WM_USER+14)
  911. /* get the pixel position of a given tick */
  912. #define TBM_GETTICPOS           (WM_USER+15)
  913. /* get the number of tics */
  914. #define TBM_GETNUMTICS          (WM_USER+16)
  915. /* get the selection range */
  916. #define TBM_GETSELSTART         (WM_USER+17)
  917. #define TBM_GETSELEND           (WM_USER+18)
  918. /* clear the selection */
  919. #define TBM_CLEARSEL           (WM_USER+19)
  920. /* set tic frequency */
  921. #define TBM_SETTICFREQ (WM_USER+20)
  922. /* Set/get the page size */
  923. #define TBM_SETPAGESIZE         (WM_USER+21)  // lParam = lPageSize .  Returns old pagesize
  924. #define TBM_GETPAGESIZE         (WM_USER+22)
  925. /* Set/get the line size */
  926. #define TBM_SETLINESIZE         (WM_USER+23)
  927. #define TBM_GETLINESIZE         (WM_USER+24)
  928. /* Get the thumb's and channel's rect size */
  929. #define TBM_GETTHUMBRECT        (WM_USER+25) // lParam = lprc  .  for return value
  930. #define TBM_GETCHANNELRECT      (WM_USER+26) // lParam = lprc  .  for return value
  931. #define TBM_SETTHUMBLENGTH       (WM_USER+27) // wParam = UINT size
  932. #define TBM_GETTHUMBLENGTH       (WM_USER+28)
  933. /*REVIEW: these match the SB_ (scroll bar messages); define them that way? */
  934. #define TB_LINEUP 0
  935. #define TB_LINEDOWN 1
  936. #define TB_PAGEUP 2
  937. #define TB_PAGEDOWN 3
  938. #define TB_THUMBPOSITION 4
  939. #define TB_THUMBTRACK 5
  940. #define TB_TOP 6
  941. #define TB_BOTTOM 7
  942. #define TB_ENDTRACK             8
  943. #endif
  944. /*/////////////////////////////////////////////////////////////////////////*/
  945. #ifndef NODRAGLIST
  946. typedef struct {
  947.     UINT uNotification;
  948.     HWND hWnd;
  949.     POINT ptCursor;
  950. } DRAGLISTINFO, FAR *LPDRAGLISTINFO;
  951. #define DL_BEGINDRAG    (WM_USER+133)
  952. #define DL_DRAGGING     (WM_USER+134)
  953. #define DL_DROPPED      (WM_USER+135)
  954. #define DL_CANCELDRAG   (WM_USER+136)
  955. #define DL_CURSORSET 0
  956. #define DL_STOPCURSOR 1
  957. #define DL_COPYCURSOR 2
  958. #define DL_MOVECURSOR 3
  959. #define DRAGLISTMSGSTRING "commctrl_DragListMsg"
  960. WINCOMMCTRLAPI BOOL WINAPI MakeDragList(HWND hLB);
  961. WINCOMMCTRLAPI void WINAPI DrawInsert(HWND handParent, HWND hLB, int nItem);
  962. // BUGBUG -- there's a message to do this now -- just macro-ize this one   ;Internal
  963. WINCOMMCTRLAPI int WINAPI LBItemFromPt(HWND hLB, POINT pt, BOOL bAutoScroll);
  964. #endif /* NODRAGLIST */
  965. /*/////////////////////////////////////////////////////////////////////////*/
  966. // spinner control
  967. #ifndef NOUPDOWN
  968. /*
  969. // OVERVIEW:
  970. //
  971. // The UpDown control is a simple pair of buttons which increment or
  972. // decrement an integer value.  The operation is similar to a vertical
  973. // scrollbar; except that the control only has line-up and line-down
  974. // functionality, and changes the current position automatically.
  975. //
  976. // The control also can be linked with a companion control, usually an
  977. // "edit" control, to simplify dialog-box management.  This companion is
  978. // termed a "buddy" in this documentation.  Any sibling HWND may be
  979. // assigned as the control's buddy, or the control may be allowed to
  980. // choose one automatically.  Once chosen, the UpDown can size itself to
  981. // match the buddy's right or left border, and/or automatically set the
  982. // text of the buddy control to make the current position visible.
  983. //
  984. // ADDITIONAL NOTES:
  985. //
  986. // The "upper" and "lower" limits must not cover a range larger than 32,767
  987. // positions.  It is acceptable to have the range inverted, i.e., to have
  988. // (lower > upper).  The upper button always moves the current position
  989. // towards the "upper" number, and the lower button always moves towards the
  990. // "lower" number.  If the range is zero (lower == upper), or the control
  991. // is disabled (EnableWindow(hCtrl, FALSE)), the control draws grayed
  992. // arrows in both buttons.  The UDS_WRAP style makes the range cyclic; that
  993. // is, the numbers will wrap once one end of the range is reached.
  994. //
  995. // The buddy window must have the same parent as the UpDown control.
  996. //
  997. // If either of the UDS_ALIGN* styles are used, the updown control will
  998. // locate itself on the "inside" of the buddy by resizing the buddy
  999. // accordingly.  so the original size of the buddy will now emcompass
  1000. // both a slightly smaller buddy and the updown control.
  1001. //
  1002. // If the buddy window resizes, and the UDS_ALIGN* styles are used, it
  1003. // is necessary to send the UDM_SETBUDDY message to re-anchor the UpDown
  1004. // control on the appropriate border of the buddy window.
  1005. //
  1006. // The UDS_AUTOBUDDY style uses GetWindow(hCtrl, GW_HWNDPREV) to pick
  1007. // the best buddy window.  In the case of a DIALOG resource, this will
  1008. // choose the previous control listed in the resource script.  If the
  1009. // windows will change in Z-order, sending UDM_SETBUDDY with a NULL handle
  1010. // will pick a new buddy; otherwise the original auto-buddy choice is
  1011. // maintained.
  1012. //
  1013. // The UDS_SETBUDDYINT style uses its own SetDlgItemInt-style
  1014. // functionality to set the caption text of the buddy.  All WIN.INI [Intl]
  1015. // values are honored by this routine.
  1016. //
  1017. // The UDS_ARROWKEYS style will subclass the buddy window, in order to steal
  1018. // the VK_UP and VK_DOWN arrow key messages.
  1019. //
  1020. // The UDS_HORZ sytle will draw the two buttons side by side with
  1021. // left and right arrows instead of up and down arrows.  It will also
  1022. // send the WM_HSCROLL message instead
  1023. //
  1024. */
  1025. #ifdef _WIN32
  1026. #define UPDOWN_CLASS "msctls_updown32"
  1027. #else
  1028. #define UPDOWN_CLASS "msctls_updown"
  1029. #endif
  1030. /* Structures */
  1031. typedef struct _UDACCEL {
  1032.     UINT nSec;
  1033.     UINT nInc;
  1034. } UDACCEL, FAR *LPUDACCEL;
  1035. #define UD_MAXVAL 0x7fff
  1036. #define UD_MINVAL (-UD_MAXVAL)
  1037. /* STYLE BITS */
  1038. #define UDS_WRAP 0x0001
  1039. #define UDS_SETBUDDYINT 0x0002
  1040. #define UDS_ALIGNRIGHT 0x0004
  1041. #define UDS_ALIGNLEFT 0x0008
  1042. #define UDS_AUTOBUDDY 0x0010
  1043. #define UDS_ARROWKEYS 0x0020
  1044. #define UDS_HORZ                0x0040
  1045. #define UDS_NOTHOUSANDS 0x0080
  1046. /* MESSAGES */
  1047. #define UDM_SETRANGE (WM_USER+101)
  1048. /* wParam: not used, 0
  1049. // lParam: short LOWORD, new upper; short HIWORD, new lower limit
  1050. // return: not used
  1051. */
  1052. #define UDM_GETRANGE (WM_USER+102)
  1053. /* wParam: not used, 0
  1054. // lParam: not used, 0
  1055. // return: short LOWORD, upper; short HIWORD, lower limit
  1056. */
  1057. #define UDM_SETPOS (WM_USER+103)
  1058. /* wParam: not used, 0
  1059. // lParam: short LOWORD, new pos; HIWORD not used, 0
  1060. // return: short LOWORD, old pos; HIWORD not used
  1061. */
  1062. #define UDM_GETPOS (WM_USER+104)
  1063. /* wParam: not used, 0
  1064. // lParam: not used, 0
  1065. // return: short LOWORD, current pos; HIWORD not used
  1066. */
  1067. #define UDM_SETBUDDY (WM_USER+105)
  1068. /* wParam: HWND, new buddy
  1069. // lParam: not used, 0
  1070. // return: HWND LOWORD, old buddy; HIWORD not used
  1071. */
  1072. #define UDM_GETBUDDY (WM_USER+106)
  1073. /* wParam: not used, 0
  1074. // lParam: not used, 0
  1075. // return: HWND LOWORD, current buddy; HIWORD not used
  1076. */
  1077. #define UDM_SETACCEL (WM_USER+107)
  1078. /* wParam: UINT, number of acceleration steps
  1079. // lParam: LPUDACCEL, pointer to array of UDACCEL elements
  1080. //         Elements should be sorted in increasing nSec order.
  1081. // return: BOOL LOWORD, nonzero if successful; HIWORD not used
  1082. */
  1083. #define UDM_GETACCEL (WM_USER+108)
  1084. /* wParam: UINT, number of elements in the UDACCEL array
  1085. // lParam: LPUDACCEL, pointer to UDACCEL buffer to receive array
  1086. // return: UINT LOWORD, number of elements returned in buffer
  1087. */
  1088. #define UDM_SETBASE (WM_USER+109)
  1089. /* wParam: UINT, new radix base (10 for decimal, 16 for hex, etc.)
  1090. // lParam: not used, 0
  1091. // return: not used
  1092. */
  1093. #define UDM_GETBASE (WM_USER+110)
  1094. /* wParam: not used, 0
  1095. // lParam: not used, 0
  1096. // return: UINT LOWORD, current radix base; HIWORD not used
  1097. */
  1098. /* NOTIFICATIONS */
  1099. /* WM_VSCROLL
  1100. // Note that unlike a scrollbar, the position is automatically changed by
  1101. // the control, and the LOWORD(lParam) is always the new position.  Only
  1102. // SB_THUMBTRACK and SB_THUMBPOSITION scroll codes are sent in the wParam.
  1103. */
  1104. /* HELPER APIs */
  1105. WINCOMMCTRLAPI HWND WINAPI CreateUpDownControl(DWORD dwStyle, int x, int y, int cx, int cy,
  1106.                                 HWND hParent, int nID, HINSTANCE hInst,
  1107.                                 HWND hBuddy,
  1108. int nUpper, int nLower, int nPos);
  1109. /* Does the CreateWindow call followed by setting the various
  1110. // state information:
  1111. // hBuddy The companion control (usually an "edit").
  1112. // nUpper The range limit corresponding to the upper button.
  1113. // nLower The range limit corresponding to the lower button.
  1114. // nPos The initial position.
  1115. // Returns the handle to the control or NULL on failure.
  1116. */
  1117. typedef struct _NM_UPDOWN
  1118. {
  1119.     NMHDR hdr;
  1120.     int iPos;
  1121.     int iDelta;
  1122. } NM_UPDOWN, FAR *LPNM_UPDOWN;
  1123. // this will be received Before the WM_VSCROLL notification.
  1124. // this gives the parent a chance to bail (return non 0) or change the delta
  1125. #define UDN_DELTAPOS (UDN_FIRST - 1)
  1126. #endif /* NOUPDOWN */
  1127. /*/////////////////////////////////////////////////////////////////////////*/
  1128. // progress indicator
  1129. #ifndef NOPROGRESS
  1130. #ifdef _WIN32
  1131. #define PROGRESS_CLASS "msctls_progress32"
  1132. #else
  1133. #define PROGRESS_CLASS "msctls_progress"
  1134. #endif
  1135. /*
  1136. // OVERVIEW:
  1137. //
  1138. // The progress bar control is a "gas gauge" that can be used to show the
  1139. // progress of a lengthy operation.
  1140. //
  1141. // The application sets the range and current position (similar to a
  1142. // scrollbar) and has the ability to advance the current position in
  1143. // a variety of ways.
  1144. //
  1145. // When PBM_STEPIT is used to advance the current position, the gauge
  1146. // will wrap when it reaches the end and start again at the start.
  1147. // The position is clamped at either end in other cases.
  1148. //
  1149. */
  1150. /*/////////////////////////////////////////////////////////////////////////*/
  1151. /* STYLE BITS */
  1152. #define PBS_SHOWPERCENT 0x01 // ;Internal
  1153. #define PBS_SHOWPOS 0x02 // ;Internal
  1154. /* MESSAGES */
  1155. #define PBM_SETRANGE         (WM_USER+1)
  1156. /* wParam: not used, 0
  1157. // lParam: int LOWORD, bottom of range; int HIWORD top of range
  1158. // return: int LOWORD, previous bottom; int HIWORD old top
  1159. */
  1160. #define PBM_SETPOS           (WM_USER+2)
  1161. /* wParam: int new position
  1162. // lParam: not used, 0
  1163. // return: int LOWORD, previous position; HIWORD not used
  1164. */
  1165. #define PBM_DELTAPOS         (WM_USER+3)
  1166. /* wParam: int amount to advance current position
  1167. // lParam: not used, 0
  1168. // return: int LOWORD, previous position; HIWORD not used
  1169. */
  1170. #define PBM_SETSTEP          (WM_USER+4)
  1171. /* wParam: int new step
  1172. // lParam: not used, 0
  1173. // return: int LOWORD, previous step; HIWORD not used
  1174. */
  1175. #define PBM_STEPIT      (WM_USER+5)
  1176.         /* advance current position by current step
  1177. // wParam: not used 0
  1178. // lParam: not used, 0
  1179. // return: int LOWORD, previous position; HIWORD not used
  1180. */
  1181. #endif /* NOPROGRESS */
  1182. #ifndef NOHOTKEY
  1183. /*
  1184. // OVERVIEW:        k
  1185. //
  1186. // The hotkey control is designed as an edit control for hotkey
  1187. // entry.  the application supplies a set of control/alt/shift
  1188. // combinations that are considered invalid and a default combination
  1189. // to be used OR'd with an invalid combination.
  1190. //
  1191. // Hotkey values are returned as a pair of bytes, one for the
  1192. // virtual key code of the key and the other specifying the
  1193. // modifier combinations used with the key.
  1194. //
  1195. */
  1196. // possible modifiers
  1197. #define HOTKEYF_SHIFT 0x01
  1198. #define HOTKEYF_CONTROL 0x02
  1199. #define HOTKEYF_ALT 0x04
  1200. #define HOTKEYF_EXT 0x08 // keyboard extended bit
  1201. // possible modifier combinations (for defining invalid combos)
  1202. #define HKCOMB_NONE 0x0001 // no modifiers
  1203. #define HKCOMB_S 0x0002 // only shift
  1204. #define HKCOMB_C 0x0004 // only control
  1205. #define HKCOMB_A 0x0008 // only alt
  1206. #define HKCOMB_SC 0x0010 // shift+control
  1207. #define HKCOMB_SA 0x0020 // shift+alt
  1208. #define HKCOMB_CA 0x0040 // control+alt
  1209. #define HKCOMB_SCA 0x0080 // shift+control+alt
  1210. // wHotkey: WORD lobyte, virtual key code
  1211. //     WORD hibyte, modifers (combination of HOTKEYF_).
  1212. #define HKM_SETHOTKEY         (WM_USER+1)
  1213. /* wParam: wHotkey;
  1214. // lParam: not used, 0
  1215. // return: not used
  1216. */
  1217. #define HKM_GETHOTKEY         (WM_USER+2)
  1218. /* wParam: not used, 0
  1219. // lParam: not used, 0
  1220. // return: wHotkey;
  1221. */
  1222. #define HKM_SETRULES         (WM_USER+3)
  1223. /* wParam: UINT, invalid modifier combinations (using HKCOMB_*)
  1224. // lParam: UINT loword, default modifier combination (using HOTKEYF_*)
  1225. //         hiword not used
  1226. // return: not used
  1227. */
  1228. #ifdef _WIN32
  1229. #define HOTKEY_CLASS "msctls_hotkey32"
  1230. #else
  1231. #define HOTKEY_CLASS "msctls_hotkey"
  1232. #endif
  1233. #endif /* NOHOTKEY */
  1234. /*/////////////////////////////////////////////////////////////////////////*/
  1235. /* Note that the following flags are checked every time the window gets a
  1236.  * WM_SIZE message, so the style of the window can be changed "on-the-fly".
  1237.  * If NORESIZE is set, then the app is responsible for all control placement
  1238.  * and sizing.  If NOPARENTALIGN is set, then the app is responsible for
  1239.  * placement.  If neither is set, the app just needs to send a WM_SIZE
  1240.  * message for the window to be positioned and sized correctly whenever the
  1241.  * parent window size changes.
  1242.  * Note that for STATUS bars, CCS_BOTTOM is the default, for HEADER bars,
  1243.  * CCS_NOMOVEY is the default, and for TOOL bars, CCS_TOP is the default.
  1244.  */
  1245. #define CCS_TOP 0x00000001L
  1246. /* This flag means the status bar should be "top" aligned.  If the
  1247.  * NOPARENTALIGN flag is set, then the control keeps the same top, left, and
  1248.  * width measurements, but the height is adjusted to the default, otherwise
  1249.  * the status bar is positioned at the top of the parent window such that
  1250.  * its client area is as wide as the parent window and its client origin is
  1251.  * the same as its parent.
  1252.  * Similarly, if this flag is not set, the control is bottom-aligned, either
  1253.  * with its original rect or its parent rect, depending on the NOPARENTALIGN
  1254.  * flag.
  1255.  */
  1256. #define CCS_NOMOVEY 0x00000002L
  1257. /* This flag means the control may be resized and moved horizontally (if the
  1258.  * CCS_NORESIZE flag is not set), but it will not move vertically when a
  1259.  * WM_SIZE message comes through.
  1260.  */
  1261. #define CCS_BOTTOM 0x00000003L
  1262. /* Same as CCS_TOP, only on the bottom.
  1263.  */
  1264. #define CCS_NORESIZE 0x00000004L
  1265. /* This flag means that the size given when creating or resizing is exact,
  1266.  * and the control should not resize itself to the default height or width
  1267.  */
  1268. #define CCS_NOPARENTALIGN 0x00000008L
  1269. /* This flag means that the control should not "snap" to the top or bottom
  1270.  * or the parent window, but should keep the same placement it was given
  1271.  */
  1272. #define CCS_NOHILITE 0x00000010L                        // ;Internal
  1273. /* Don't draw the one pixel highlight at the top of the control */ // ;Internal
  1274. #define CCS_ADJUSTABLE 0x00000020L
  1275. /* This allows a toolbar (header bar?) to be configured by the user.
  1276.  */
  1277. #define CCS_NODIVIDER 0x00000040L
  1278. /* Don't draw the 2 pixel highlight at top of control (toolbar)
  1279.  */
  1280. /*/////////////////////////////////////////////////////////////////////////*/
  1281. //================ LISTVIEW APIS ===========================================
  1282. //
  1283. // Class name: SysListView (WC_LISTVIEW)
  1284. //
  1285. // The SysListView control provides for a group of items which are displayed
  1286. // as a name and/or an associated icon and associated sub-items, in one of
  1287. // several organizations, depending on current style settings:
  1288. //  * The Icon Format (LVS_ICON)
  1289. //      The control arranges standard-sized icons on an invisible grid
  1290. //      with their text caption below the icon. The user can drag icons to
  1291. //      rearrange them freely, even overlapping each other.
  1292. //  * The Small Icon Format (LVS_SMALLICON)
  1293. //      The control arranges half-sized icons on an invisible columnar grid
  1294. //      like a multi-column owner-draw listbox, with the caption of each
  1295. //      item to the icon's right.  The user can still rearrange items
  1296. //      freely to taste.  Converting from LVS_ICON to LVS_SMALLICON and back
  1297. //      will attempt to preserve approximate relative positions of
  1298. //      repositioned items.
  1299. //  * The List Format (LVS_LIST)
  1300. //      The control enforces a multi-column list of small-icon items with
  1301. //      each item's caption to the right.  No free rearranging is possible.
  1302. //  * The Report Format (LVS_REPORT)
  1303. //      The control enforces a single-column list of small-icon items with
  1304. //      each item's caption to the right, and further columns used for item-
  1305. //      specific sub-item text.  The columns are capped with a SysHeader
  1306. //      bar (unless specified) which allows the user to change the relative
  1307. //      widths of each sub-item column.
  1308. //
  1309. // The icons and small-icons presented may be assigned as indices into
  1310. // an ImageList of the appropriate size.  These ImageLists (either custom
  1311. // lists or copies of the system lists) are assigned to the control by the
  1312. // owner at initialization time or at any later time.
  1313. //
  1314. // Text and icon values may be "late-bound," or assigned by a callback
  1315. // routine as required by the control.  For example, if it would be slow to
  1316. // compute the correct icon or caption for an item, the item can be assigned
  1317. // special values which indicate that they should be computed only as the
  1318. // items become visible (say, for a long list of items being scrolled into
  1319. // view).
  1320. //
  1321. // Each item has a state, which can be (nearly) any combination of the
  1322. // following attributes, mostly managed automatically by the control:
  1323. //  * Selected (LVIS_SELECTED)
  1324. //      The item appears selected.  The appearance of selected items
  1325. //      depends on whether the control has the focus, and the selection
  1326. //      system colors.
  1327. //  * Focused (LVIS_FOCUSED)
  1328. //      One item at a time may be focused.  The item is surrounded with a
  1329. //      standard focus-rectangle.
  1330. //  * Marked (LVIS_CUT)
  1331. //      REVIEW: Call this "Checked"?
  1332. //  * Disabled (LVIS_DISABLED)
  1333. //      The item is drawn with the standard disabled style and coloring.
  1334. //  * Drop-Highlighted (LVIS_DROPHILITED)
  1335. //      The item appears marked when the user drags an object over it, if
  1336. //      it can accept the object as a drop-target.
  1337. //
  1338. // There are notifications that allow applications to determine when an item
  1339. // has been clicked or double clicked, caption text changes have occured,
  1340. // drag tracking is occuring, widths of columns have changed, etc.
  1341. //
  1342. //////////////////////////////////////////////////////////////////////////////
  1343. #ifdef _WIN32
  1344. #define WC_LISTVIEW         "SysListView32"
  1345. #else
  1346. #define WC_LISTVIEW         "SysListView"
  1347. #endif
  1348. // ListView styles
  1349. //
  1350. // view type styles (we only have 16 bits to use here)
  1351. #define LVS_ICON            0x0000
  1352. #define LVS_REPORT          0x0001
  1353. #define LVS_SMALLICON       0x0002
  1354. #define LVS_LIST            0x0003
  1355. #define LVS_TYPEMASK        0x0003
  1356. // shared styles
  1357. #define LVS_SINGLESEL       0x0004
  1358. #define LVS_SHOWSELALWAYS   0x0008
  1359. #define LVS_SORTASCENDING   0x0010
  1360. #define LVS_SORTDESCENDING  0x0020
  1361. #define LVS_SHAREIMAGELISTS 0x0040
  1362. #define LVS_NOLABELWRAP     0x0080
  1363. #define LVS_AUTOARRANGE     0x0100
  1364. #define LVS_EDITLABELS      0x0200
  1365. #define LVS_NOITEMDATA      0x1000 // /* ;Internal */
  1366. #define LVS_NOSCROLL        0x2000
  1367. /// the fields below are reserved for style specific settings.
  1368. #define LVS_TYPESTYLEMASK   0xfc00     // the mask for all these styles
  1369. // Large icon.
  1370. #define LVS_ALIGNTOP        0x0000
  1371. #define LVS_ALIGNBOTTOM     0x0400     /* ;Internal */
  1372. #define LVS_ALIGNLEFT       0x0800
  1373. #define LVS_ALIGNRIGHT      0x0c00     /* ;Internal */
  1374. #define LVS_ALIGNMASK       0x0c00
  1375. // Report view.
  1376. #define LVS_OWNERDRAWFIXED  0x0400
  1377. #define LVS_NOCOLUMNHEADER  0x4000
  1378. #define LVS_NOSORTHEADER    0x8000
  1379. // COLORREF ListView_GetBkColor(HWND hwnd);
  1380. #define LVM_GETBKCOLOR      (LVM_FIRST + 0)
  1381. #define ListView_GetBkColor(hwnd)  
  1382.     (COLORREF)SendMessage((hwnd), LVM_GETBKCOLOR, 0, 0L)
  1383. // BOOL ListView_SetBkColor(HWND hwnd, COLORREF clrBk);
  1384. #define LVM_SETBKCOLOR      (LVM_FIRST + 1)
  1385. #define ListView_SetBkColor(hwnd, clrBk) 
  1386.     (BOOL)SendMessage((hwnd), LVM_SETBKCOLOR, 0, (LPARAM)(COLORREF)(clrBk))
  1387. // HIMAGELIST ListView_GetImageList(HWND hwnd, int iImageList);
  1388. #define LVM_GETIMAGELIST    (LVM_FIRST + 2)
  1389. #define ListView_GetImageList(hwnd, iImageList) 
  1390.     (HIMAGELIST)SendMessage((hwnd), LVM_GETIMAGELIST, (WPARAM)(INT)(iImageList), 0L)
  1391. #define LVSIL_NORMAL 0
  1392. #define LVSIL_SMALL 1
  1393. #define LVSIL_STATE 2
  1394. // HIMAGELIST ListView_SetImageList(HWND hwnd, HIMAGELIST himl, int iImageList);
  1395. #define LVM_SETIMAGELIST    (LVM_FIRST + 3)
  1396. #define ListView_SetImageList(hwnd, himl, iImageList) 
  1397.     (HIMAGELIST)(UINT)SendMessage((hwnd), LVM_SETIMAGELIST, (WPARAM)(iImageList), (LPARAM)(UINT)(HIMAGELIST)(himl))
  1398. // int ListView_GetItemCount(HWND hwnd);
  1399. #define LVM_GETITEMCOUNT    (LVM_FIRST + 4)
  1400. #define ListView_GetItemCount(hwnd) 
  1401.     (int)SendMessage((hwnd), LVM_GETITEMCOUNT, 0, 0L)
  1402. // ListView Item structure
  1403. #define LVIF_TEXT           0x0001  // LV_ITEM.mask flags (indicate valid fields in LV_ITEM)
  1404. #define LVIF_IMAGE          0x0002
  1405. #define LVIF_PARAM          0x0004
  1406. #define LVIF_STATE          0x0008
  1407. #define LVIF_ALL            0x000f  // ;Internal
  1408. #define LVIF_RESERVED       0xf000  // all bits in high nibble is for notify specific stuff /* ;Internal */
  1409. // State flags
  1410. #define LVIS_FOCUSED     0x0001  // LV_ITEM.state flags
  1411. #define LVIS_SELECTED       0x0002
  1412. #define LVIS_CUT            0x0004  // LVIS_MARKED
  1413. #define LVIS_DROPHILITED    0x0008
  1414. #define LVIS_DISABLED       0x0010   // GOING AWAY // ;Internal
  1415. #define LVIS_LINK           0x0040   // ;Internal
  1416. #define LVIS_OVERLAYMASK    0x0F00  // used as ImageList overlay image indexes
  1417. #define LVIS_STATEIMAGEMASK 0xF000 // client bits for state image drawing
  1418. #define LVIS_USERMASK       LVIS_STATEIMAGEMASK  // BUGBUG: remove me.
  1419. #define LVIS_ALL            0xFFFF  /* ;Internal */
  1420. #define INDEXTOSTATEIMAGEMASK(i) ((i) << 12)
  1421. typedef struct _LV_ITEM
  1422. {
  1423.     UINT mask; // LVIF_ flags
  1424.     int iItem;
  1425.     int iSubItem;
  1426.     UINT state; // LVIS_ flags
  1427.     UINT stateMask; // LVIS_ flags (valid bits in state)
  1428.     LPSTR pszText;
  1429.     int cchTextMax;
  1430.     int iImage;
  1431.     LPARAM lParam;
  1432. } LV_ITEM;
  1433.     // Values used to cause text/image GETDISPINFO callbacks
  1434. #define LPSTR_TEXTCALLBACK      ((LPSTR)-1L)
  1435. #define I_IMAGECALLBACK         (-1)
  1436. // BOOL ListView_GetItem(HWND hwnd, LV_ITEM FAR* pitem);
  1437. #define LVM_GETITEM         (LVM_FIRST + 5)
  1438. #define ListView_GetItem(hwnd, pitem) 
  1439.     (BOOL)SendMessage((hwnd), LVM_GETITEM, 0, (LPARAM)(LV_ITEM FAR*)(pitem))
  1440. // Sets items and subitems.
  1441. //
  1442. // BOOL ListView_SetItem(HWND hwnd, const LV_ITEM FAR* pitem);
  1443. #define LVM_SETITEM         (LVM_FIRST + 6)
  1444. #define ListView_SetItem(hwnd, pitem) 
  1445.     (BOOL)SendMessage((hwnd), LVM_SETITEM, 0, (LPARAM)(const LV_ITEM FAR*)(pitem))
  1446. // int ListView_InsertItem(HWND hwnd, const LV_ITEM FAR* pitem);
  1447. #define LVM_INSERTITEM         (LVM_FIRST + 7)
  1448. #define ListView_InsertItem(hwnd, pitem)   
  1449.     (int)SendMessage((hwnd), LVM_INSERTITEM, 0, (LPARAM)(const LV_ITEM FAR*)(pitem))
  1450. // Deletes the specified item along with all its subitems.
  1451. //
  1452. // BOOL ListView_DeleteItem(HWND hwnd, int i);
  1453. #define LVM_DELETEITEM      (LVM_FIRST + 8)
  1454. #define ListView_DeleteItem(hwnd, i) 
  1455.     (BOOL)SendMessage((hwnd), LVM_DELETEITEM, (WPARAM)(int)(i), 0L)
  1456. // BOOL ListView_DeleteAllItems(HWND hwnd);
  1457. #define LVM_DELETEALLITEMS  (LVM_FIRST + 9)
  1458. #define ListView_DeleteAllItems(hwnd) 
  1459.     (BOOL)SendMessage((hwnd), LVM_DELETEALLITEMS, 0, 0L)
  1460. // UINT ListView_GetCallbackMask(HWND hwnd);
  1461. #define LVM_GETCALLBACKMASK (LVM_FIRST + 10)
  1462. #define ListView_GetCallbackMask(hwnd) 
  1463.     (BOOL)SendMessage((hwnd), LVM_GETCALLBACKMASK, 0, 0)
  1464. // BOOL ListView_SetCallbackMask(HWND hwnd, UINT mask);
  1465. #define LVM_SETCALLBACKMASK (LVM_FIRST + 11)
  1466. #define ListView_SetCallbackMask(hwnd, mask) 
  1467.     (BOOL)SendMessage((hwnd), LVM_SETCALLBACKMASK, (WPARAM)(UINT)(mask), 0)
  1468. // ListView_GetNextItem flags (can be used in combination)
  1469. #define LVNI_ALL 0x0000
  1470. #define LVNI_FOCUSED     0x0001  // return only focused item
  1471. #define LVNI_SELECTED    0x0002  // return only selected items
  1472. #define LVNI_CUT      0x0004  // return only marked items
  1473. #define LVNI_DROPHILITED 0x0008 // return only drophilited items
  1474. #define LVNI_PREVIOUS    0x0020  // Go backwards   // ;Internal
  1475. #define LVNI_ABOVE       0x0100  // return item geometrically above
  1476. #define LVNI_BELOW       0x0200  // "" below
  1477. #define LVNI_TOLEFT      0x0400  // "" to left
  1478. #define LVNI_TORIGHT     0x0800  // "" to right (NOTE: these four are
  1479.                                  //              mutually exclusive, but
  1480.                                  //              can be used with other LVNI's)
  1481. // int ListView_GetNextItem(HWND hwnd, int i, UINT flags);
  1482. #define LVM_GETNEXTITEM     (LVM_FIRST + 12)
  1483. #define ListView_GetNextItem(hwnd, i, flags) 
  1484.     (int)SendMessage((hwnd), LVM_GETNEXTITEM, (WPARAM)(int)(i), MAKELPARAM((flags), 0))
  1485. // ListView_FindInfo definitions
  1486. #define LVFI_PARAM      0x0001
  1487. #define LVFI_STRING     0x0002
  1488. #define LVFI_SUBSTRING  0x0004  /* ;Internal */
  1489. #define LVFI_PARTIAL    0x0008
  1490. #define LVFI_NOCASE     0x0010  /* ;Internal */
  1491. #define LVFI_WRAP       0x0020
  1492. #define LVFI_NEARESTXY  0x0040
  1493. typedef struct _LV_FINDINFO
  1494. {
  1495.     UINT flags;
  1496.     LPCSTR psz;
  1497.     LPARAM lParam;
  1498.     POINT pt;  //  only used for nearestxy
  1499.     UINT vkDirection; //  only used for nearestxy
  1500. } LV_FINDINFO;
  1501. // int ListView_FindItem(HWND hwnd, int iStart, const LV_FINDINFO FAR* plvfi);
  1502. #define LVM_FINDITEM        (LVM_FIRST + 13)
  1503. #define ListView_FindItem(hwnd, iStart, plvfi) 
  1504.     (int)SendMessage((hwnd), LVM_FINDITEM, (WPARAM)(int)(iStart), (LPARAM)(const LV_FINDINFO FAR*)(plvfi))
  1505. // the following #define's must be packed sequentially.   // ;Internal
  1506. #define LVIR_BOUNDS     0
  1507. #define LVIR_ICON       1
  1508. #define LVIR_LABEL      2
  1509. #define LVIR_SELECTBOUNDS 3
  1510. #define LVIR_MAX  4                           // ;Internal
  1511.     // Rectangle bounding all or part of item, based on LVIR_* code.  Rect is returned in view coords
  1512.     // BOOL ListView_GetItemRect(HWND hwndLV, int i, RECT FAR* prc, int code);
  1513. #define LVM_GETITEMRECT     (LVM_FIRST + 14)
  1514. #define ListView_GetItemRect(hwnd, i, prc, code) 
  1515.     ((prc)->left = (code), (BOOL)SendMessage((hwnd), LVM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT FAR*)(prc)))
  1516.     // Move top-left corner of item to (x, y), specified in view rect relative coords
  1517.     // (icon and small view only)
  1518. // BOOL ListView_SetItemPosition(HWND hwndLV, int i, int x, int y);
  1519. #define LVM_SETITEMPOSITION (LVM_FIRST + 15)
  1520. #define ListView_SetItemPosition(hwndLV, i, x, y) 
  1521.     (BOOL)SendMessage((hwndLV), LVM_SETITEMPOSITION, (WPARAM)(int)(i), MAKELPARAM((x), (y)))
  1522. // BOOL ListView_GetItemPosition(HWND hwndLV, int i, POINT FAR* ppt);
  1523. #define LVM_GETITEMPOSITION (LVM_FIRST + 16)
  1524. #define ListView_GetItemPosition(hwndLV, i, ppt) 
  1525.     (BOOL)SendMessage((hwndLV), LVM_GETITEMPOSITION, (WPARAM)(int)(i), (LPARAM)(POINT FAR*)(ppt))
  1526.     // Get column width of string
  1527.     // int ListView_GetStringWidth(HWND hwndLV, LPCSTR psz);
  1528. #define LVM_GETSTRINGWIDTH  (LVM_FIRST + 17)
  1529. #define ListView_GetStringWidth(hwndLV, psz) 
  1530.     (int)SendMessage((hwndLV), LVM_GETSTRINGWIDTH, 0, (LPARAM)(LPCSTR)(psz))
  1531.     // Hit test item.  Returns item at (x,y), or -1 if not on an item.
  1532.     // Combination of LVHT_ values *pflags, indicating where the cursor
  1533.     // is relative to edges of ListView window (above, below, right, left)
  1534.     // or whether (x, y) is over icon, label, or inside window but not on item.
  1535.     // int ListView_HitTest(HWND hwndLV, LV_HITTESTINFO FAR* pinfo);
  1536.     // ItemHitTest flag values
  1537. #define LVHT_NOWHERE        0x0001
  1538. #define LVHT_ONITEMICON     0x0002
  1539. #define LVHT_ONITEMLABEL    0x0004
  1540. #define LVHT_ONITEMSTATEICON 0x0008
  1541. #define LVHT_ONITEM         (LVHT_ONITEMICON | LVHT_ONITEMLABEL | LVHT_ONITEMSTATEICON)
  1542. #define LVHT_ABOVE          0x0008
  1543. #define LVHT_BELOW          0x0010
  1544. #define LVHT_TORIGHT        0x0020
  1545. #define LVHT_TOLEFT         0x0040
  1546. typedef struct _LV_HITTESTINFO
  1547. {
  1548.     POINT pt;     // in: client coords
  1549.     UINT flags;     // out: LVHT_ flags
  1550.     int iItem;     // out: item
  1551. } LV_HITTESTINFO;
  1552.     // int ListView_HitTest(HWND hwndLV, LV_HITTESTINFO FAR* pinfo);
  1553. #define LVM_HITTEST     (LVM_FIRST + 18)
  1554. #define ListView_HitTest(hwndLV, pinfo) 
  1555.     (int)SendMessage((hwndLV), LVM_HITTEST, 0, (LPARAM)(LV_HITTESTINFO FAR*)(pinfo))
  1556.     // Return view rectangle, relative to window
  1557.     // BOOL ListView_GetViewRect(HWND hwndLV, RECT FAR* prcVis);
  1558.     // Scroll an item into view if not wholly or partially visible
  1559.     // BOOL ListView_EnsureVisible(HWND hwndLV, int i, BOOL fPartialOK);
  1560. #define LVM_ENSUREVISIBLE   (LVM_FIRST + 19)
  1561. #define ListView_EnsureVisible(hwndLV, i, fPartialOK) 
  1562.     (BOOL)SendMessage((hwndLV), LVM_ENSUREVISIBLE, (WPARAM)(int)(i), MAKELPARAM((fPartialOK), 0))
  1563.     // Scroll listview -- offsets origin of view rectangle by dx, dy
  1564.     // BOOL ListView_Scroll(HWND hwndLV, int dx, int dy);
  1565. #define LVM_SCROLL          (LVM_FIRST + 20)
  1566. #define ListView_Scroll(hwndLV, dx, dy) 
  1567.     (BOOL)SendMessage((hwndLV), LVM_SCROLL, (WPARAM)(int)dx, (LPARAM)(int)dy)
  1568.     // Force eventual redraw of range of items (redraw doesn't occur
  1569.     // until WM_PAINT processed -- call UpdateWindow() after to redraw right away)
  1570.     // BOOL ListView_RedrawItems(HWND hwndLV, int iFirst, int iLast);
  1571. #define LVM_REDRAWITEMS     (LVM_FIRST + 21)
  1572. #define ListView_RedrawItems(hwndLV, iFirst, iLast) 
  1573.     (BOOL)SendMessage((hwndLV), LVM_REDRAWITEMS, (WPARAM)(int)iFirst, (LPARAM)(int)iLast)
  1574.     // Arrange style
  1575. #define LVA_DEFAULT         0x0000
  1576. #define LVA_ALIGNLEFT       0x0001
  1577. #define LVA_ALIGNTOP        0x0002
  1578. #define LVA_ALIGNRIGHT      0x0003    /* ;Internal */
  1579. #define LVA_ALIGNBOTTOM     0x0004    /* ;Internal */
  1580. #define LVA_SNAPTOGRID      0x0005
  1581. #define LVA_ALIGNMASK       0x0007  //;Internal
  1582. #define LVA_SORTASCENDING   0x0100  // ;Internal
  1583. #define LVA_SORTDESCENDING  0x0200  // ;Internal
  1584.     // Arrange icons according to LVA_* code
  1585.     // BOOL ListView_Arrange(HWND hwndLV, UINT code);
  1586. #define LVM_ARRANGE         (LVM_FIRST + 22)
  1587. #define ListView_Arrange(hwndLV, code) 
  1588.     (BOOL)SendMessage((hwndLV), LVM_ARRANGE, (WPARAM)(UINT)(code), 0L)
  1589.     // Begin editing the label of a control.  Implicitly selects and focuses
  1590.     // item.  i == -1 to cancel.
  1591.     // HWND ListView_EditLabel(HWND hwndLV, int i);
  1592. #define LVM_EDITLABEL       (LVM_FIRST + 23)
  1593. #define ListView_EditLabel(hwndLV, i) 
  1594.     (HWND)SendMessage((hwndLV), LVM_EDITLABEL, (WPARAM)(int)(i), 0L)
  1595.     // Return edit control being used for editing.  Subclass OK, but
  1596.     // don't destroy.  Will be destroyed when editing is finished.
  1597.     //HWND ListView_GetEditControl(HWND hwndLV);
  1598. #define LVM_GETEDITCONTROL  (LVM_FIRST + 24)
  1599. #define ListView_GetEditControl(hwndLV) 
  1600.     (HWND)SendMessage((hwndLV), LVM_GETEDITCONTROL, 0, 0L)
  1601. typedef struct _LV_COLUMN
  1602. {
  1603.     UINT mask;
  1604.     int fmt;
  1605.     int cx;
  1606.     LPSTR pszText;
  1607.     int cchTextMax;
  1608.     int iSubItem;       // subitem to display
  1609. } LV_COLUMN;
  1610. // LV_COLUMN mask values
  1611. #define LVCF_FMT        0x0001
  1612. #define LVCF_WIDTH      0x0002
  1613. #define LVCF_TEXT       0x0004
  1614. #define LVCF_SUBITEM    0x0008
  1615. #define LVCF_ALL        0x000f  /* ;Internal */
  1616. // Column format codes
  1617. #define LVCFMT_LEFT     0
  1618. #define LVCFMT_RIGHT    1
  1619. #define LVCFMT_CENTER   2
  1620. #define LVCFMT_JUSTIFYMASK 0x0003
  1621. // Set/Query column info
  1622. // BOOL ListView_GetColumn(HWND hwndLV, int iCol, LV_COLUMN FAR* pcol);
  1623. #define LVM_GETCOLUMN       (LVM_FIRST + 25)
  1624. #define ListView_GetColumn(hwnd, iCol, pcol) 
  1625.     (BOOL)SendMessage((hwnd), LVM_GETCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(LV_COLUMN FAR*)(pcol))
  1626. // BOOL ListView_SetColumn(HWND hwndLV, int iCol, LV_COLUMN FAR* pcol);
  1627. #define LVM_SETCOLUMN       (LVM_FIRST + 26)
  1628. #define ListView_SetColumn(hwnd, iCol, pcol) 
  1629.     (BOOL)SendMessage((hwnd), LVM_SETCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN FAR*)(pcol))
  1630. // insert/delete report view column
  1631. // int ListView_InsertColumn(HWND hwndLV, int iCol, const LV_COLUMN FAR* pcol);
  1632. #define LVM_INSERTCOLUMN    (LVM_FIRST + 27)
  1633. #define ListView_InsertColumn(hwnd, iCol, pcol) 
  1634.     (int)SendMessage((hwnd), LVM_INSERTCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN FAR*)(pcol))
  1635. // BOOL ListView_DeleteColumn(HWND hwndLV, int iCol);
  1636. #define LVM_DELETECOLUMN    (LVM_FIRST + 28)
  1637. #define ListView_DeleteColumn(hwnd, iCol) 
  1638.     (BOOL)SendMessage((hwnd), LVM_DELETECOLUMN, (WPARAM)(int)(iCol), 0)
  1639. #define LVM_GETCOLUMNWIDTH  (LVM_FIRST + 29)
  1640. #define ListView_GetColumnWidth(hwnd, iCol) 
  1641.     (int)SendMessage((hwnd), LVM_GETCOLUMNWIDTH, (WPARAM)(int)(iCol), 0)
  1642. #define     LVSCW_AUTOSIZE              -1
  1643. #define     LVSCW_AUTOSIZE_USEHEADER    -2
  1644. #define LVM_SETCOLUMNWIDTH  (LVM_FIRST + 30)
  1645. #define ListView_SetColumnWidth(hwnd, iCol, cx) 
  1646.     (BOOL)SendMessage((hwnd), LVM_SETCOLUMNWIDTH, (WPARAM)(int)(iCol), MAKELPARAM((cx), 0))
  1647. // HIMAGELIST ListView_CreateDragImage(HWND hwndLV, int iItem, LPPOINT lpptUpLeft);
  1648. #define LVM_CREATEDRAGIMAGE        (LVM_FIRST + 33)
  1649. #define ListView_CreateDragImage(hwnd, i, lpptUpLeft) 
  1650.     (HIMAGELIST)SendMessage((hwnd), LVM_CREATEDRAGIMAGE, (WPARAM)(int)(i), (LPARAM)(LPPOINT)(lpptUpLeft))
  1651. // BOOL ListView_GetViewRect(HWND hwndLV, RECT FAR* prc);
  1652. #define LVM_GETVIEWRECT     (LVM_FIRST + 34)
  1653. #define ListView_GetViewRect(hwnd, prc) 
  1654.     (BOOL)SendMessage((hwnd), LVM_GETVIEWRECT, 0, (LPARAM)(RECT FAR*)(prc))
  1655. // get/set text and textbk color for text drawing.  these override
  1656. // the standard window/windowtext settings.  they do NOT override
  1657. // when drawing selected text.
  1658. // COLORREF ListView_GetTextColor(HWND hwnd);
  1659. #define LVM_GETTEXTCOLOR      (LVM_FIRST + 35)
  1660. #define ListView_GetTextColor(hwnd)  
  1661.     (COLORREF)SendMessage((hwnd), LVM_GETTEXTCOLOR, 0, 0L)
  1662. // BOOL ListView_SetTextColor(HWND hwnd, COLORREF clrText);
  1663. #define LVM_SETTEXTCOLOR      (LVM_FIRST + 36)
  1664. #define ListView_SetTextColor(hwnd, clrText) 
  1665.     (BOOL)SendMessage((hwnd), LVM_SETTEXTCOLOR, 0, (LPARAM)(COLORREF)(clrText))
  1666. // COLORREF ListView_GetTextBkColor(HWND hwnd);
  1667. #define LVM_GETTEXTBKCOLOR      (LVM_FIRST + 37)
  1668. #define ListView_GetTextBkColor(hwnd)  
  1669.     (COLORREF)SendMessage((hwnd), LVM_GETTEXTBKCOLOR, 0, 0L)
  1670. // BOOL ListView_SetTextBkColor(HWND hwnd, COLORREF clrTextBk);
  1671. #define LVM_SETTEXTBKCOLOR      (LVM_FIRST + 38)
  1672. #define ListView_SetTextBkColor(hwnd, clrTextBk) 
  1673.     (BOOL)SendMessage((hwnd), LVM_SETTEXTBKCOLOR, 0, (LPARAM)(COLORREF)(clrTextBk))
  1674. // messages for getting the index of the first visible item
  1675. #define LVM_GETTOPINDEX         (LVM_FIRST + 39)
  1676. #define ListView_GetTopIndex(hwndLV) 
  1677.     (int)SendMessage((hwndLV), LVM_GETTOPINDEX, 0, 0)
  1678. // Message for getting the count of items per page
  1679. #define LVM_GETCOUNTPERPAGE     (LVM_FIRST + 40)
  1680. #define ListView_GetCountPerPage(hwndLV) 
  1681.     (int)SendMessage((hwndLV), LVM_GETCOUNTPERPAGE, 0, 0)
  1682. // Message for getting the listview origin, which is needed for SetItemPos...
  1683. #define LVM_GETORIGIN           (LVM_FIRST + 41)
  1684. #define ListView_GetOrigin(hwndLV, ppt) 
  1685.     (BOOL)SendMessage((hwndLV), LVM_GETORIGIN, (WPARAM)0, (LPARAM)(POINT FAR*)(ppt))
  1686. // Message for getting the count of items per page
  1687. #define LVM_UPDATE     (LVM_FIRST + 42)
  1688. #define ListView_Update(hwndLV, i) 
  1689.     (BOOL)SendMessage((hwndLV), LVM_UPDATE, (WPARAM)i, 0L)
  1690. // set and item's state.  this macro will return VOID.  but the
  1691. // message returns BOOL success.
  1692. #define LVM_SETITEMSTATE                (LVM_FIRST + 43)
  1693. #define ListView_SetItemState(hwndLV, i, data, mask) 
  1694. { LV_ITEM _ms_lvi;
  1695.   _ms_lvi.stateMask = mask;
  1696.   _ms_lvi.state = data;
  1697.   SendMessage((hwndLV), LVM_SETITEMSTATE, (WPARAM)i, (LPARAM)(LV_ITEM FAR *)&_ms_lvi);
  1698. }
  1699. // get the item's state
  1700. #define LVM_GETITEMSTATE                (LVM_FIRST + 44)
  1701. #define ListView_GetItemState(hwndLV, i, mask) 
  1702.    (UINT)SendMessage((hwndLV), LVM_GETITEMSTATE, (WPARAM)i, (LPARAM)mask)
  1703. // get the item  text.
  1704. // if you want the int return value of how the buff size, you call it yourself.
  1705. #define LVM_GETITEMTEXT                 (LVM_FIRST + 45)
  1706. #define ListView_GetItemText(hwndLV, i, iSubItem_, pszText_, cchTextMax_) 
  1707. { LV_ITEM _ms_lvi;
  1708.   _ms_lvi.iSubItem = iSubItem_;
  1709.   _ms_lvi.cchTextMax = cchTextMax_;
  1710.   _ms_lvi.pszText = pszText_;
  1711.   SendMessage((hwndLV), LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)(LV_ITEM FAR *)&_ms_lvi);
  1712. }
  1713. // get the item  text.
  1714. // if you want the int return value (BOOL) success do it yourself
  1715. #define LVM_SETITEMTEXT                 (LVM_FIRST + 46)
  1716. #define ListView_SetItemText(hwndLV, i, iSubItem_, pszText_) 
  1717. { LV_ITEM _ms_lvi;
  1718.   _ms_lvi.iSubItem = iSubItem_;
  1719.   _ms_lvi.pszText = pszText_;
  1720.   SendMessage((hwndLV), LVM_SETITEMTEXT, (WPARAM)i, (LPARAM)(LV_ITEM FAR *)&_ms_lvi);
  1721. }
  1722. // tell the listview that you are going to add nItems lot of items
  1723. #define LVM_SETITEMCOUNT                 (LVM_FIRST + 47)
  1724. #define ListView_SetItemCount(hwndLV, cItems) 
  1725.   SendMessage((hwndLV), LVM_SETITEMCOUNT, (WPARAM)cItems, 0)
  1726. typedef int (CALLBACK *PFNLVCOMPARE)(LPARAM, LPARAM, LPARAM);
  1727. // tell the listview to resort the items
  1728. #define LVM_SORTITEMS                    (LVM_FIRST + 48)
  1729. #define ListView_SortItems(hwndLV, _pfnCompare, _lPrm) 
  1730.   (BOOL)SendMessage((hwndLV), LVM_SORTITEMS, (WPARAM)(LPARAM)_lPrm, 
  1731.   (LPARAM)(PFNLVCOMPARE)_pfnCompare)
  1732. // void ListView_SetItemPosition(HWND hwndLV, int i, int x, int y);
  1733. #define LVM_SETITEMPOSITION32 (LVM_FIRST + 49)
  1734. #define ListView_SetItemPosition32(hwndLV, i, x, y) 
  1735. { POINT ptNewPos = {x,y}; 
  1736.     SendMessage((hwndLV), LVM_SETITEMPOSITION32, (WPARAM)(int)(i), (LPARAM)&ptNewPos); 
  1737. }
  1738. // get the number of items selected
  1739. #define LVM_GETSELECTEDCOUNT  (LVM_FIRST + 50)
  1740. #define ListView_GetSelectedCount(hwndLV) 
  1741.     (UINT)SendMessage((hwndLV), LVM_GETSELECTEDCOUNT, 0, 0L)
  1742. #define LVM_GETITEMSPACING (LVM_FIRST + 51)
  1743. #define ListView_GetItemSpacing(hwndLV, fSmall) 
  1744.         (DWORD)SendMessage((hwndLV), LVM_GETITEMSPACING, fSmall, 0L)
  1745. // returns true/false telling whether it's in search mode or not
  1746. #define LVM_GETISEARCHSTRING (LVM_FIRST + 52)
  1747. #define ListView_GetISearchString(hwndLV, lpsz) 
  1748.         (BOOL)SendMessage((hwndLV), LVM_GETISEARCHSTRING, 0, (LPARAM)(LPSTR)lpsz)
  1749. // ListView notification codes
  1750. // Structure used by all ListView control notifications.
  1751. // Not all fields supply useful info for all notifications:
  1752. // iItem will be -1 and others 0 if not used.
  1753. // Some return a BOOL, too.
  1754. //
  1755. typedef struct _NM_LISTVIEW
  1756. {
  1757.     NMHDR   hdr;
  1758.     int     iItem;
  1759.     int     iSubItem;
  1760.     UINT    uNewState;      // Combination of LVIS_* (if uChanged & LVIF_STATE)
  1761.     UINT    uOldState;      // Combination of LVIS_*
  1762.     UINT    uChanged;       // Combination of LVIF_* indicating what changed
  1763.     POINT   ptAction;       // Only valid for LVN_BEGINDRAG and LVN_BEGINRDRAG
  1764.     LPARAM  lParam;         // Only valid for LVN_DELETEITEM
  1765. } NM_LISTVIEW, FAR *LPNM_LISTVIEW;
  1766. #define LVN_ITEMCHANGING        (LVN_FIRST-0) // lParam -> NM_LISTVIEW: item changing.  Return FALSE to disallow
  1767. #define LVN_ITEMCHANGED         (LVN_FIRST-1) // item changed.
  1768. #define LVN_INSERTITEM          (LVN_FIRST-2)
  1769. #define LVN_DELETEITEM          (LVN_FIRST-3)
  1770. #define LVN_DELETEALLITEMS      (LVN_FIRST-4)
  1771. #define LVN_BEGINLABELEDIT      (LVN_FIRST-5) // lParam -> LV_DISPINFO: start of label editing
  1772. #define LVN_ENDLABELEDIT        (LVN_FIRST-6) // lParam -> LV_DISPINFO: end of label editing
  1773.                                          // (iItem == -1 if cancel)
  1774. //(LVN_FIRST-7) not used
  1775. #define LVN_COLUMNCLICK         (LVN_FIRST-8)   // column identified by iItem was clicked
  1776. #define LVN_BEGINDRAG           (LVN_FIRST-9)   // Start of drag operation requested
  1777.                                          // (return FALSE if the app handles it)
  1778. #define LVN_ENDDRAG             (LVN_FIRST-10)  // End of dragging operation.  /* ;Internal */
  1779. #define LVN_BEGINRDRAG          (LVN_FIRST-11)  // Start of button 2 dragging
  1780. #define LVN_ENDRDRAG            (LVN_FIRST-12)  // End of button 2 drag (not used yet)  /* ;Internal */
  1781. #ifdef PW2                                      // ;Internal
  1782. #define LVN_PEN                 (LVN_FIRST-20)  // pen notifications  // ;Internal
  1783. #endif //PW2                                    // ;Internal
  1784. // LVN_DISPINFO notification
  1785. #define LVN_GETDISPINFO         (LVN_FIRST-50) // lParam -> LV_DISPINFO
  1786. #define LVN_SETDISPINFO         (LVN_FIRST-51)  // lParam -> LV_DISPINFO
  1787. #define LVIF_DI_SETITEM      0x1000   // keeps values returned in this GetDispInfo call
  1788. typedef struct _LV_DISPINFO {
  1789.     NMHDR hdr;
  1790.     LV_ITEM item;
  1791. } LV_DISPINFO;
  1792. // LVN_KEYDOWN notification
  1793. #define LVN_KEYDOWN (LVN_FIRST-55)
  1794. typedef struct _LV_KEYDOWN
  1795. {
  1796.     NMHDR hdr;
  1797.     WORD wVKey;
  1798.     UINT flags;
  1799. } LV_KEYDOWN;
  1800. // ====== TREEVIEW APIs =================================================
  1801. //
  1802. // Class name: SysTreeView (WC_TREEVIEW)
  1803. //
  1804. // The SysTreeView control provides for a group of items which are
  1805. // displayed in a hierarchical organization.  Each item may contain
  1806. // independent "sub-item" entries which are displayed below and indented
  1807. // from the parent item.
  1808. //
  1809. // Operation of this control is similar to the SysListView control above,
  1810. // except that sub-items are distinct entries, not supporting text elements
  1811. // belonging to the owning object (which is the case for the Report View
  1812. // mode of the SysListView).
  1813. //
  1814. // There are notifications that allow applications to determine when an item
  1815. // has been clicked or double clicked, caption text changes have occured,
  1816. // drag tracking is occuring, widths of columns have changed, node items
  1817. // are expanded, etc.
  1818. //
  1819. // NOTE: All "messages" below are documented as APIs; eventually these
  1820. // will be changed to window messages, and corresponding macros will be
  1821. // written that have the same signature as the APIs shown below.
  1822. //
  1823. #ifdef _WIN32
  1824. #define WC_TREEVIEW     "SysTreeView32"
  1825. #else
  1826. #define WC_TREEVIEW     "SysTreeView"
  1827. #endif
  1828. // TreeView window styles
  1829. #define TVS_HASBUTTONS      0x0001 // draw "plus" & "minus" sign on nodes with children
  1830. #define TVS_HASLINES        0x0002 // draw lines between nodes
  1831. #define TVS_LINESATROOT     0x0004
  1832. #define TVS_EDITLABELS      0x0008 // alow text edit in place
  1833. #define TVS_DISABLEDRAGDROP 0x0010      // disable draggine notification of nodes
  1834. #define TVS_SHOWSELALWAYS   0x0020
  1835. typedef struct _TREEITEM FAR* HTREEITEM;
  1836. #define TVIF_TEXT           0x0001  // TV_ITEM.mask flags
  1837. #define TVIF_IMAGE         0x0002
  1838. #define TVIF_PARAM          0x0004
  1839. #define TVIF_STATE          0x0008
  1840. #define TVIF_HANDLE         0x0010  // :Internal
  1841. #define TVIF_SELECTEDIMAGE  0x0020
  1842. #define TVIF_CHILDREN     0x0040
  1843. #define TVIF_ALL     0x007F  // ;Internal
  1844. #define TVIF_RESERVED       0xf000  // all bits in high nibble is for notify specific stuff /* ;Internal */
  1845. // State flags
  1846. #define TVIS_FOCUSED     0x0001  // TV_ITEM.state flags
  1847. #define TVIS_SELECTED       0x0002
  1848. #define TVIS_CUT            0x0004  // TVIS_MARKED
  1849. #define TVIS_DROPHILITED    0x0008
  1850. #define TVIS_BOLD           0x0010
  1851. #define TVIS_EXPANDED       0x0020
  1852. #define TVIS_EXPANDEDONCE   0x0040
  1853. #define TVIS_DISABLED       0  // GOING AWAY // ;Internal
  1854. #define TVIS_OVERLAYMASK    0x0F00  // used as ImageList overlay image indexes
  1855. #define TVIS_STATEIMAGEMASK 0xF000
  1856. #define TVIS_USERMASK       0xF000
  1857. #define TVIS_ALL            0xFF7f  // ;Internal
  1858. #define I_CHILDRENCALLBACK  (-1)    // cChildren value for children callback
  1859. typedef struct _TV_ITEM {
  1860.     UINT      mask; // TVIF_ flags
  1861.     HTREEITEM hItem; // The item to be changed
  1862.     UINT      state; // TVIS_ flags
  1863.     UINT      stateMask; // TVIS_ flags (valid bits in state)
  1864.     LPSTR     pszText; // The text for this item
  1865.     int       cchTextMax; // The length of the pszText buffer
  1866.     int       iImage; // The index of the image for this item
  1867.     int       iSelectedImage; // the index of the selected imagex
  1868.     int       cChildren; // # of child nodes, I_CHILDRENCALLBACK for callback
  1869.     LPARAM    lParam; // App defined data
  1870. } TV_ITEM, FAR *LPTV_ITEM;
  1871. #define TVI_ROOT  ((HTREEITEM)0xFFFF0000)
  1872. #define TVI_FIRST ((HTREEITEM)0xFFFF0001)
  1873. #define TVI_LAST  ((HTREEITEM)0xFFFF0002)
  1874. #define TVI_SORT  ((HTREEITEM)0xFFFF0003)
  1875. typedef struct _TV_INSERTSTRUCT {
  1876.     HTREEITEM hParent; // a valid HTREEITEM or TVI_ value
  1877.     HTREEITEM hInsertAfter; // a valid HTREEITEM or TVI_ value
  1878.     TV_ITEM item;
  1879. } TV_INSERTSTRUCT, FAR *LPTV_INSERTSTRUCT;
  1880. #define TVM_INSERTITEM      (TV_FIRST + 0)
  1881. #define TreeView_InsertItem(hwnd, lpis) 
  1882.     (HTREEITEM)SendMessage((hwnd), TVM_INSERTITEM, 0, (LPARAM)(LPTV_INSERTSTRUCT)(lpis))
  1883. #define TVM_DELETEITEM      (TV_FIRST + 1)
  1884. #define TreeView_DeleteItem(hwnd, hitem) 
  1885.     (BOOL)SendMessage((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hitem))
  1886. #define TreeView_DeleteAllItems(hwnd) 
  1887.     (BOOL)SendMessage((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT)
  1888. #define TVM_EXPAND     (TV_FIRST + 2)
  1889. #define TreeView_Expand(hwnd, hitem, code) 
  1890.     (BOOL)SendMessage((hwnd), TVM_EXPAND, (WPARAM)code, (LPARAM)(HTREEITEM)(hitem))
  1891. // TreeView_Expand codes
  1892. #define TVE_COLLAPSE        0x0001
  1893. #define TVE_EXPAND          0x0002
  1894. #define TVE_TOGGLE          0x0003
  1895. #define TVE_ACTIONMASK      0x0007 // ;Internal (TVE_COLLAPSE | TVE_EXPAND | TVE_TOGGLE)
  1896. #define TVE_COLLAPSERESET   0x8000 // remove all children when collapsing
  1897. #define TV_FINDITEM         (TV_FIRST + 3) // BUGBUG: Not implemented         /* ;Internal */
  1898. #define TVM_GETITEMRECT     (TV_FIRST + 4)
  1899. #define TreeView_GetItemRect(hwnd, hitem, prc, code) 
  1900.     (*(HTREEITEM FAR *)prc = (hitem), (BOOL)SendMessage((hwnd), TVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT FAR*)(prc)))
  1901. #define TVM_GETCOUNT        (TV_FIRST + 5)
  1902. #define TreeView_GetCount(hwnd) 
  1903.     (UINT)SendMessage((hwnd), TVM_GETCOUNT, 0, 0)
  1904. #define TVM_GETINDENT       (TV_FIRST + 6)
  1905. #define TreeView_GetIndent(hwnd) 
  1906.     (UINT)SendMessage((hwnd), TVM_GETINDENT, 0, 0)
  1907. #define TVM_SETINDENT       (TV_FIRST + 7)
  1908. #define TreeView_SetIndent(hwnd, indent) 
  1909.     (BOOL)SendMessage((hwnd), TVM_SETINDENT, (WPARAM)indent, 0)
  1910. #define TVM_GETIMAGELIST    (TV_FIRST + 8)
  1911. #define TreeView_GetImageList(hwnd, iImage) 
  1912.     (HIMAGELIST)SendMessage((hwnd), TVM_GETIMAGELIST, iImage, 0)
  1913. #define TVSIL_NORMAL 0
  1914. #define TVSIL_STATE 2 // use TVIS_STATEIMAGEMASK as index into state imagelist
  1915. #define TVM_SETIMAGELIST    (TV_FIRST + 9)
  1916. #define TreeView_SetImageList(hwnd, himl, iImage) 
  1917.     (HIMAGELIST)SendMessage((hwnd), TVM_SETIMAGELIST, iImage, (LPARAM)(UINT)(HIMAGELIST)(himl))
  1918. #define TVM_GETNEXTITEM     (TV_FIRST + 10)
  1919. #define TreeView_GetNextItem(hwnd, hitem, code) 
  1920.     (HTREEITEM)SendMessage((hwnd), TVM_GETNEXTITEM, (WPARAM)code, (LPARAM)(HTREEITEM)(hitem))
  1921. // TreeView_GetNextItem & TreeView_SelectItem codes
  1922. #define TVGN_ROOT 0x0000  // GetNextItem()
  1923. #define TVGN_NEXT 0x0001 // GetNextItem()
  1924. #define TVGN_PREVIOUS 0x0002 // GetNextItem()
  1925. #define TVGN_PARENT 0x0003 // GetNextItem()
  1926. #define TVGN_CHILD 0x0004 // GetNextItem()
  1927. #define TVGN_FIRSTVISIBLE 0x0005  // GetNextItem() & SelectItem()
  1928. #define TVGN_NEXTVISIBLE 0x0006 // GetNextItem()
  1929. #define TVGN_PREVIOUSVISIBLE 0x0007 // GetNextItem()
  1930. #define TVGN_DROPHILITE 0x0008 // GetNextItem() & SelectItem()
  1931. #define TVGN_CARET 0x0009 // GetNextItem() & SelectItem()
  1932. #define TreeView_GetChild(hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_CHILD)
  1933. #define TreeView_GetNextSibling(hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT)
  1934. #define TreeView_GetPrevSibling(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUS)
  1935. #define TreeView_GetParent(hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_PARENT)
  1936. #define TreeView_GetFirstVisible(hwnd) TreeView_GetNextItem(hwnd, NULL,  TVGN_FIRSTVISIBLE)
  1937. #define TreeView_GetNextVisible(hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE)
  1938. #define TreeView_GetPrevVisible(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE)
  1939. #define TreeView_GetSelection(hwnd) TreeView_GetNextItem(hwnd, NULL,  TVGN_CARET)
  1940. #define TreeView_GetDropHilight(hwnd) TreeView_GetNextItem(hwnd, NULL,  TVGN_DROPHILITE)
  1941. #define TreeView_GetRoot(hwnd)      TreeView_GetNextItem(hwnd, NULL,  TVGN_ROOT)
  1942. #define TVM_SELECTITEM      (TV_FIRST + 11)
  1943. #define TreeView_Select(hwnd, hitem, code) 
  1944.     (HTREEITEM)SendMessage((hwnd), TVM_SELECTITEM, (WPARAM)code, (LPARAM)(HTREEITEM)(hitem))
  1945. #define TreeView_SelectItem(hwnd, hitem)     TreeView_Select(hwnd, hitem, TVGN_CARET)
  1946. #define TreeView_SelectDropTarget(hwnd, hitem)     TreeView_Select(hwnd, hitem, TVGN_DROPHILITE)
  1947. #define TreeView_SelectSetFirstVisible(hwnd, hitem) TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE)
  1948. #define TVM_GETITEM         (TV_FIRST + 12)
  1949. #define TreeView_GetItem(hwnd, pitem) 
  1950.     (BOOL)SendMessage((hwnd), TVM_GETITEM, 0, (LPARAM)(TV_ITEM FAR*)(pitem))
  1951. #define TVM_SETITEM         (TV_FIRST + 13)
  1952. #define TreeView_SetItem(hwnd, pitem) 
  1953.     (BOOL)SendMessage((hwnd), TVM_SETITEM, 0, (LPARAM)(const TV_ITEM FAR*)(pitem))
  1954. #define TVM_EDITLABEL       (TV_FIRST + 14)
  1955. #define TreeView_EditLabel(hwnd, hitem) 
  1956.     (HWND)SendMessage((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem))
  1957. #define TVM_GETEDITCONTROL  (TV_FIRST + 15)
  1958. #define TreeView_GetEditControl(hwnd) 
  1959.     (HWND)SendMessage((hwnd), TVM_GETEDITCONTROL, 0, 0)
  1960. #define TVM_GETVISIBLECOUNT (TV_FIRST + 16)
  1961. #define TreeView_GetVisibleCount(hwnd) 
  1962.     (UINT)SendMessage((hwnd), TVM_GETVISIBLECOUNT, 0, 0)
  1963. #define TVM_HITTEST         (TV_FIRST + 17)
  1964. #define TreeView_HitTest(hwnd, lpht) 
  1965.     (HTREEITEM)SendMessage((hwnd), TVM_HITTEST, 0, (LPARAM)(LPTV_HITTESTINFO)(lpht))
  1966. typedef struct _TV_HITTESTINFO {
  1967.     POINT       pt; // in: client coords
  1968.     UINT flags; // out: TVHT_ flags
  1969.     HTREEITEM   hItem; // out:
  1970. } TV_HITTESTINFO, FAR *LPTV_HITTESTINFO;
  1971. #define TVHT_NOWHERE        0x0001
  1972. #define TVHT_ONITEMICON     0x0002
  1973. #define TVHT_ONITEMLABEL    0x0004
  1974. #define TVHT_ONITEM         (TVHT_ONITEMICON | TVHT_ONITEMLABEL | TVHT_ONITEMSTATEICON)
  1975. #define TVHT_ONITEMINDENT   0x0008
  1976. #define TVHT_ONITEMBUTTON   0x0010
  1977. #define TVHT_ONITEMRIGHT    0x0020
  1978. #define TVHT_ONITEMSTATEICON 0x0040
  1979. #define TVHT_ABOVE          0x0100
  1980. #define TVHT_BELOW          0x0200
  1981. #define TVHT_TORIGHT        0x0400
  1982. #define TVHT_TOLEFT         0x0800
  1983. #define TVM_CREATEDRAGIMAGE  (TV_FIRST + 18)
  1984. #define TreeView_CreateDragImage(hwnd, hitem) 
  1985.     (HIMAGELIST)SendMessage((hwnd), TVM_CREATEDRAGIMAGE, 0, (LPARAM)(HTREEITEM)(hitem))
  1986. #define TVM_SORTCHILDREN     (TV_FIRST + 19)
  1987. #define TreeView_SortChildren(hwnd, hitem, recurse) 
  1988.     (BOOL)SendMessage((hwnd), TVM_SORTCHILDREN, (WPARAM)recurse, (LPARAM)(HTREEITEM)(hitem))
  1989. #define TVM_ENSUREVISIBLE    (TV_FIRST + 20)
  1990. #define TreeView_EnsureVisible(hwnd, hitem) 
  1991.     (BOOL)SendMessage((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(HTREEITEM)(hitem))
  1992. #define TVM_SORTCHILDRENCB   (TV_FIRST + 21)
  1993. #define TreeView_SortChildrenCB(hwnd, psort, recurse) 
  1994.     (BOOL)SendMessage((hwnd), TVM_SORTCHILDRENCB, (WPARAM)recurse, 
  1995.     (LPARAM)(LPTV_SORTCB)(psort))
  1996. #define TVM_ENDEDITLABELNOW  (TV_FIRST + 22)
  1997. #define TreeView_EndEditLabelNow(hwnd, fCancel) 
  1998.     (BOOL)SendMessage((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)fCancel, 0)
  1999. // returns true/false telling whether it's in search mode or not
  2000. #define TVM_GETISEARCHSTRING (TV_FIRST + 23)
  2001. #define TreeView_GetISearchString(hwndTV, lpsz) 
  2002.         (BOOL)SendMessage((hwndTV), TVM_GETISEARCHSTRING, 0, (LPARAM)(LPSTR)lpsz)
  2003. typedef int (CALLBACK *PFNTVCOMPARE)(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
  2004. typedef struct _TV_SORTCB
  2005. {
  2006. HTREEITEM hParent;
  2007. PFNTVCOMPARE lpfnCompare;
  2008. LPARAM lParam;
  2009. } TV_SORTCB, FAR *LPTV_SORTCB;
  2010. // common notificaton structure for WM_NOTIFY sent to parent
  2011. // some fields are only valid on some notify messages
  2012. typedef struct _NM_TREEVIEW {
  2013.     NMHDR       hdr;
  2014.     UINT action;         // notification specific action
  2015.     TV_ITEM   itemOld;
  2016.     TV_ITEM   itemNew;
  2017.     POINT       ptDrag;
  2018. } NM_TREEVIEW, FAR *LPNM_TREEVIEW;
  2019. #define TVN_SELCHANGING     (TVN_FIRST-1)
  2020. #define TVN_SELCHANGED      (TVN_FIRST-2)
  2021. // lParam -> NM_TREEVIEW
  2022. // NM_TREEVIEW.itemNew.hItem & NM_TREEVIEW.itemNew.lParam are valid
  2023. // NM_TREEVIEW.itemOld.hItem & NM_TREEVIEW.itemOld.lParam are valid
  2024. // NM_TREEVIEW.action is a TVE_ value indicating how the selcection changed
  2025. // TVN_SELCHANGING & TVN_SELCHANGED action values
  2026. #define TVC_UNKNOWN     0x0000
  2027. #define TVC_BYMOUSE         0x0001
  2028. #define TVC_BYKEYBOARD      0x0002
  2029. #define TVN_GETDISPINFO     (TVN_FIRST-3)
  2030. #define TVN_SETDISPINFO     (TVN_FIRST-4)
  2031. // lParam -> TV_DISPINFO structure
  2032. // TV_DISPINFO.item.hItem & TV_DISPINFO.item.lParam are valid
  2033. #define TVIF_DI_SETITEM      0x1000   // keeps values returned in this GetDispInfo call
  2034. typedef struct _TV_DISPINFO {
  2035.     NMHDR hdr;
  2036.     TV_ITEM item;
  2037. } TV_DISPINFO;
  2038. #define TVN_ITEMEXPANDING   (TVN_FIRST-5)
  2039. #define TVN_ITEMEXPANDED    (TVN_FIRST-6)
  2040. // lParam -> NM_TREEVIEW
  2041. // NM_TREEVIEW.itemNew.hItem & NM_TREEVIEW.itemNew.state & NM_TREEVIEW.itemNew.lParam are valid
  2042. // NM_TREEVIEW.action is TVE_ action and flags
  2043. #define TVN_BEGINDRAG       (TVN_FIRST-7)
  2044. #define TVN_BEGINRDRAG      (TVN_FIRST-8)
  2045. // lParam -> NM_TREEVIEW
  2046. // NM_TREEVIEW.itemNew.hItem & NM_TREEVIEW.itemNew.lParam are valid
  2047. // NM_TREEVIEW.ptDrag is start of drag in client coords
  2048. #define TVN_DELETEITEM      (TVN_FIRST-9)
  2049. // lParam -> NM_TREEVIEW
  2050. // NM_TREEVIEW.itemOld.hItem & NM_TREEVIEW.itemOld.lParam are valid
  2051. #define TVN_BEGINLABELEDIT  (TVN_FIRST-10)
  2052. #define TVN_ENDLABELEDIT    (TVN_FIRST-11)
  2053. // lParam -> TV_DISPINFO
  2054. // TV_DISPINFO.item.hItem & TV_DISPINFO.item.state & TV_DISPINFO.item.lParam & TV_DISPINFO.item.pszText
  2055. // are valid
  2056. #define TVN_KEYDOWN         (TVN_FIRST-12)
  2057. // lParam -> TV_KEYDOWN
  2058. typedef struct _TV_KEYDOWN {
  2059.     NMHDR hdr;
  2060.     WORD wVKey;
  2061.     UINT flags;
  2062. } TV_KEYDOWN;
  2063. //============================================================================
  2064. //
  2065. // Class name: SysTabControl (WC_TABCONTROL)
  2066. //
  2067. #ifdef _WIN32
  2068. #define WC_TABCONTROL         "SysTabControl32"
  2069. #else
  2070. #define WC_TABCONTROL         "SysTabControl"
  2071. #endif
  2072. // window styles to control tab control behavior
  2073. #define TCS_FORCEICONLEFT       0x0010  // 0nly for fixed width mode
  2074. #define TCS_FORCELABELLEFT      0x0020  // 0nly for fixed width mode
  2075. #define TCS_SHAREIMAGELISTS     0x0040  // ;Internal
  2076. #define TCS_TABS 0x0000  // default
  2077. #define TCS_BUTTONS 0x0100
  2078. #define TCS_SINGLELINE 0x0000  // default
  2079. #define TCS_MULTILINE 0x0200
  2080. #define TCS_RIGHTJUSTIFY 0x0000  // default
  2081. #define TCS_FIXEDWIDTH 0x0400
  2082. #define TCS_RAGGEDRIGHT 0x0800
  2083. #define TCS_FOCUSONBUTTONDOWN   0x1000
  2084. #define TCS_OWNERDRAWFIXED      0x2000
  2085. #define TCS_TOOLTIPS            0x4000
  2086. #define TCS_FOCUSNEVER          0x8000
  2087. #define TCM_FIRST     0x1300     // Tab Control messages
  2088. // COLORREF TabCtrl_GetBkColor(HWND hwnd);                // ;Internal
  2089. #define TCM_GETBKCOLOR      (TCM_FIRST + 0)             // ;Internal
  2090. #define TabCtrl_GetBkColor(hwnd)   (COLORREF)SendMessage((hwnd), TCM_GETBKCOLOR, 0, 0L)  // ;Internal
  2091. // BOOL TabCtrl_SetBkColor(HWND hwnd, COLORREF clrBk);   // ;Internal
  2092. #define TCM_SETBKCOLOR      (TCM_FIRST + 1)              // ;Internal
  2093. #define TabCtrl_SetBkColor(hwnd, clrBk)  (BOOL)SendMessage((hwnd), TCM_SETBKCOLOR, 0, (LPARAM)(COLORREF)(clrBk))  // ;Internal
  2094. // HIMAGELIST TabCtrl_GetImageList(HWND hwnd);
  2095. #define TCM_GETIMAGELIST    (TCM_FIRST + 2)
  2096. #define TabCtrl_GetImageList(hwnd) 
  2097.     (HIMAGELIST)SendMessage((hwnd), TCM_GETIMAGELIST, 0, 0L)
  2098. // this returns the old image list (null if no previous)
  2099. // BOOL TabCtrl_SetImageList(HWND hwnd, HIMAGELIST himl);
  2100. #define TCM_SETIMAGELIST    (TCM_FIRST + 3)
  2101. #define TabCtrl_SetImageList(hwnd, himl) 
  2102.     (HIMAGELIST)SendMessage((hwnd), TCM_SETIMAGELIST, 0, (LPARAM)(UINT)(HIMAGELIST)(himl))
  2103. // int TabCtrl_GetItemCount(HWND hwnd);
  2104. #define TCM_GETITEMCOUNT    (TCM_FIRST + 4)
  2105. #define TabCtrl_GetItemCount(hwnd) 
  2106.     (int)SendMessage((hwnd), TCM_GETITEMCOUNT, 0, 0L)
  2107. // TabView Item structure
  2108. #define TCIF_TEXT       0x0001  // TabView mask flags
  2109. #define TCIF_IMAGE      0x0002
  2110. #define TCIF_RTLREADING 0x0004 // MidEast languages only
  2111. #define TCIF_PARAM      0x0008
  2112. #define TCIF_ALL        0x000f  /* ;Internal */
  2113. typedef struct _TC_ITEMHEADER
  2114. {
  2115.     UINT mask; // TCIF_ bits
  2116.     UINT lpReserved1;
  2117.     UINT lpReserved2;
  2118.     LPSTR pszText;
  2119.     int cchTextMax;
  2120.     int iImage;
  2121. } TC_ITEMHEADER;
  2122. // BUGBUG: we need to pull the state code stuff out    ;Internal
  2123. typedef struct _TC_ITEM
  2124. {
  2125.     // This block must be identical to TC_TEIMHEADER
  2126.     UINT mask; // TCIF_ bits
  2127.     UINT lpReserved1;
  2128.     UINT lpReserved2;
  2129.     LPSTR pszText;
  2130.     int cchTextMax;
  2131.     int iImage;
  2132.     LPARAM lParam;
  2133. } TC_ITEM;
  2134. // BOOL TabCtrl_GetItem(HWND hwnd, int iItem, TC_ITEM FAR* pitem);
  2135. #define TCM_GETITEM         (TCM_FIRST + 5)
  2136. #define TabCtrl_GetItem(hwnd, iItem, pitem) 
  2137.     (BOOL)SendMessage((hwnd), TCM_GETITEM, (WPARAM)(int)iItem, (LPARAM)(TC_ITEM FAR*)(pitem))
  2138. // BOOL TabCtrl_SetItem(HWND hwnd, int iItem, TC_ITEM FAR* pitem);
  2139. #define TCM_SETITEM         (TCM_FIRST + 6)
  2140. #define TabCtrl_SetItem(hwnd, iItem, pitem) 
  2141.     (BOOL)SendMessage((hwnd), TCM_SETITEM, (WPARAM)(int)iItem, (LPARAM)(TC_ITEM FAR*)(pitem))
  2142. // int TabCtrl_InsertItem(HWND hwnd, int iItem, const TC_ITEM FAR* pitem);
  2143. #define TCM_INSERTITEM         (TCM_FIRST + 7)
  2144. #define TabCtrl_InsertItem(hwnd, iItem, pitem)   
  2145.     (int)SendMessage((hwnd), TCM_INSERTITEM, (WPARAM)(int)iItem, (LPARAM)(const TC_ITEM FAR*)(pitem))
  2146. // Deletes the specified item along with all its subitems.
  2147. //
  2148. // BOOL TabCtrl_DeleteItem(HWND hwnd, int i);
  2149. #define TCM_DELETEITEM      (TCM_FIRST + 8)
  2150. #define TabCtrl_DeleteItem(hwnd, i) 
  2151.     (BOOL)SendMessage((hwnd), TCM_DELETEITEM, (WPARAM)(int)(i), 0L)
  2152. // BOOL TabCtrl_DeleteAllItems(HWND hwnd);
  2153. #define TCM_DELETEALLITEMS  (TCM_FIRST + 9)
  2154. #define TabCtrl_DeleteAllItems(hwnd) 
  2155.     (BOOL)SendMessage((hwnd), TCM_DELETEALLITEMS, 0, 0L)
  2156.     // Rectangle bounding all or part of item, based on code.  Rect is returned in view coords
  2157.     // BOOL TabCtrl_GetItemRect(HWND hwndTC, int i, RECT FAR* prc);
  2158. #define TCM_GETITEMRECT     (TCM_FIRST + 10)
  2159. #define TabCtrl_GetItemRect(hwnd, i, prc) 
  2160.     (BOOL)SendMessage((hwnd), TCM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT FAR*)(prc))
  2161.     // BOOL TabCtrl_GetCurSel(HWND hwndTC);
  2162. #define TCM_GETCURSEL     (TCM_FIRST + 11)
  2163. #define TabCtrl_GetCurSel(hwnd) 
  2164.     (int)SendMessage((hwnd), TCM_GETCURSEL, 0, 0)
  2165. #define TCM_SETCURSEL     (TCM_FIRST + 12)
  2166. #define TabCtrl_SetCurSel(hwnd, i) 
  2167.     (int)SendMessage((hwnd), TCM_SETCURSEL, (WPARAM)i, 0)
  2168.     // ItemHitTest flag values
  2169. #define TCHT_NOWHERE        0x0001
  2170. #define TCHT_ONITEMICON     0x0002
  2171. #define TCHT_ONITEMLABEL    0x0004
  2172. #define TCHT_ONITEM         (TCHT_ONITEMICON | TCHT_ONITEMLABEL)
  2173. typedef struct _TC_HITTESTINFO
  2174. {
  2175.     POINT pt;     // in
  2176.     UINT flags;     // out
  2177. } TC_HITTESTINFO, FAR * LPTC_HITTESTINFO;
  2178.  // int TabCtrl_HitTest(HWND hwndTC, TC_HITTESTINFO FAR* pinfo);
  2179. #define TCM_HITTEST     (TCM_FIRST + 13)
  2180. #define TabCtrl_HitTest(hwndTC, pinfo) 
  2181.     (int)SendMessage((hwndTC), TCM_HITTEST, 0, (LPARAM)(TC_HITTESTINFO FAR*)(pinfo))
  2182. // Set the size of extra byte (abExtra[]) for each item.
  2183. #define TCM_SETITEMEXTRA    (TCM_FIRST + 14)
  2184. #define TabCtrl_SetItemExtra(hwndTC, cb) 
  2185.     (BOOL)SendMessage((hwndTC), TCM_SETITEMEXTRA, (WPARAM)(cb), 0L)
  2186. #define TCM_ADJUSTRECT (TCM_FIRST + 40)
  2187. #define TabCtrl_AdjustRect(hwnd, bLarger, prc) 
  2188.     (void)SendMessage(hwnd, TCM_ADJUSTRECT, (WPARAM)(BOOL)bLarger, (LPARAM)(RECT FAR *)prc)
  2189. #define TCM_SETITEMSIZE (TCM_FIRST + 41)
  2190. #define TabCtrl_SetItemSize(hwnd, x, y) 
  2191.     (DWORD)SendMessage((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y))
  2192. #define TCM_REMOVEIMAGE         (TCM_FIRST + 42)
  2193. #define TabCtrl_RemoveImage(hwnd, i) 
  2194.         (void)SendMessage((hwnd), TCM_REMOVEIMAGE, i, 0L)
  2195. #define TCM_SETPADDING          (TCM_FIRST + 43)
  2196. #define TabCtrl_SetPadding(hwnd,  cx, cy) 
  2197.         (void)SendMessage((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy))
  2198. #define TCM_GETROWCOUNT         (TCM_FIRST + 44)
  2199. #define TabCtrl_GetRowCount(hwnd) 
  2200.         (int)SendMessage((hwnd), TCM_GETROWCOUNT, 0, 0L)
  2201. /* all params are NULL
  2202.  * returns the hwnd for tooltips control  or NULL
  2203.  */
  2204. #define TCM_GETTOOLTIPS (TCM_FIRST + 45)
  2205. #define TabCtrl_GetToolTips(hwnd) 
  2206.         (HWND)SendMessage((hwnd), TCM_GETTOOLTIPS, 0, 0L)
  2207. /* wParam: HWND of ToolTips control to use
  2208.  * lParam unused
  2209.  */
  2210. #define TCM_SETTOOLTIPS (TCM_FIRST + 46)
  2211. #define TabCtrl_SetToolTips(hwnd, hwndTT) 
  2212.         (void)SendMessage((hwnd), TCM_SETTOOLTIPS, (WPARAM)hwndTT, 0L)
  2213. // this returns the item with the current focus.. which might not be
  2214. // the currently selected item, if the user is in the process of selecting a new
  2215. // item
  2216.     // BOOL TabCtrl_GetCurFocus(HWND hwndTC);
  2217. #define TCM_GETCURFOCUS     (TCM_FIRST + 47)
  2218. #define TabCtrl_GetCurFocus(hwnd) 
  2219.     (int)SendMessage((hwnd), TCM_GETCURFOCUS, 0, 0)
  2220. #define TCM_SETCURFOCUS     (TCM_FIRST + 48)
  2221. #define TabCtrl_SetCurFocus(hwnd, i) 
  2222.     SendMessage((hwnd),TCM_SETCURFOCUS, i, 0)
  2223. // TabView notification codes
  2224. #define TCN_KEYDOWN         (TCN_FIRST - 0)
  2225. typedef struct _TC_KEYDOWN
  2226. {
  2227.     NMHDR hdr;
  2228.     WORD wVKey;
  2229.     UINT flags;
  2230. } TC_KEYDOWN;
  2231. // selection has changed
  2232. #define TCN_SELCHANGE     (TCN_FIRST - 1)
  2233. // selection changing away from current tab
  2234. // return:  FALSE to continue, or TRUE to not change
  2235. #define TCN_SELCHANGING     (TCN_FIRST - 2)
  2236. /*/////////////////////////////////////////////////////////////////////////*/
  2237. // Animate control
  2238. #ifndef NOANIMATE
  2239. #ifdef _WIN32
  2240. /*
  2241. // OVERVIEW:
  2242. //
  2243. // The Animte control is a simple animation control, you can use it to
  2244. // have animaed controls in dialogs.
  2245. //
  2246. // what it animates are simple .AVI files from a resource.
  2247. // a simple AVI is a uncompressed or RLE compressed AVI file.
  2248. //
  2249. // the .AVI file must be placed in the resource with a type of "AVI"
  2250. //
  2251. // example:
  2252. //
  2253. //  myapp.rc:
  2254. //      MyAnimation AVI foobar.avi      // must be simple/RLE avifile
  2255. //
  2256. //  myapp.c:
  2257. //      Animate_Open(hwndA, "MyAnimation"); // open the resource
  2258. //      Animate_Play(hwndA, 0, -1, -1);     // play from start to finish and repeat
  2259. */
  2260. #define ANIMATE_CLASS "SysAnimate32"
  2261. /* STYLE BITS */
  2262. #define ACS_CENTER          0x0001      // center animation in window
  2263. #define ACS_TRANSPARENT     0x0002      // make animation transparent.
  2264. #define ACS_AUTOPLAY        0x0004      // start playing on open
  2265. /* MESSAGES */
  2266. #define ACM_OPEN    (WM_USER+100)
  2267. /* wParam: not used, 0
  2268.         // lParam: name of resource/file to open
  2269.         // return: bool
  2270.         */
  2271. #define ACM_PLAY            (WM_USER+101)
  2272.         /* wParam: repeat count        -1 = repeat forever.
  2273.         // lParam: LOWORD=frame start   0 = first frame.
  2274.         //         HIWORD=play end     -1 = last frame.
  2275.         // return: bool
  2276.         */
  2277. #define ACM_STOP            (WM_USER+102)
  2278.         /* wParam: not used
  2279.         // lParam: not used
  2280.         // return: bool
  2281.         */
  2282. /* notify codes, sent via WM_COMMAND */
  2283. #define ACN_START   1           // file has started playing
  2284. #define ACN_STOP    2           // file has stopped playing
  2285. /* HELPER MACROS */
  2286. #define Animate_Create(hwndP, id, dwStyle, hInstance)   
  2287.             CreateWindow(ANIMATE_CLASS, NULL,           
  2288.                 dwStyle, 0, 0, 0, 0, hwndP, (HMENU)(id), hInstance, NULL)
  2289. #define Animate_Open(hwnd, szName)          (BOOL)SendMessage(hwnd, ACM_OPEN, 0, (LPARAM)(LPSTR)(szName))
  2290. #define Animate_Play(hwnd, from, to, rep)   (BOOL)SendMessage(hwnd, ACM_PLAY, (WPARAM)(UINT)(rep), (LPARAM)MAKELONG(from, to))
  2291. #define Animate_Stop(hwnd)                  (BOOL)SendMessage(hwnd, ACM_STOP, 0, 0)
  2292. #define Animate_Close(hwnd)                 Animate_Open(hwnd, NULL)
  2293. #define Animate_Seek(hwnd, frame)           Animate_Play(hwnd, frame, frame, 1)
  2294. #endif /* _WIN32 */
  2295. #endif /* NOANIMATE */
  2296. #ifndef NO_COMMCTRL_DA                                                   /* ;Internal */
  2297. //====== Dynamic Array routines ========================================== /* ;Internal */
  2298. // Dynamic structure array  /* ;Internal */
  2299. typedef struct _DSA FAR* HDSA;                                             /* ;Internal */
  2300.                                                                            /* ;Internal */
  2301. WINCOMMCTRLAPI HDSA   WINAPI DSA_Create(int cbItem, int cItemGrow);                  /* ;Internal */
  2302. WINCOMMCTRLAPI BOOL   WINAPI DSA_Destroy(HDSA hdsa);                                 /* ;Internal */
  2303. WINCOMMCTRLAPI BOOL   WINAPI DSA_GetItem(HDSA hdsa, int i, void FAR* pitem);         /* ;Internal */
  2304. WINCOMMCTRLAPI LPVOID WINAPI DSA_GetItemPtr(HDSA hdsa, int i);                       /* ;Internal */
  2305. WINCOMMCTRLAPI BOOL   WINAPI DSA_SetItem(HDSA hdsa, int i, void FAR* pitem);         /* ;Internal */
  2306. WINCOMMCTRLAPI int    WINAPI DSA_InsertItem(HDSA hdsa, int i, void FAR* pitem);      /* ;Internal */
  2307. WINCOMMCTRLAPI BOOL   WINAPI DSA_DeleteItem(HDSA hdsa, int i);                       /* ;Internal */
  2308. WINCOMMCTRLAPI BOOL   WINAPI DSA_DeleteAllItems(HDSA hdsa);                          /* ;Internal */
  2309. #define       DSA_GetItemCount(hdsa) (*(int FAR*)(hdsa))              /* ;Internal */
  2310.                                                                            /* ;Internal */
  2311. // Dynamic pointer array  /* ;Internal */
  2312. typedef struct _DPA FAR* HDPA;                                             /* ;Internal */
  2313.                                                                            /* ;Internal */
  2314. WINCOMMCTRLAPI HDPA   WINAPI DPA_Create(int cItemGrow);                              /* ;Internal */
  2315. WINCOMMCTRLAPI HDPA   WINAPI DPA_CreateEx(int cpGrow, HANDLE hheap);                       /* ;Internal */
  2316. WINCOMMCTRLAPI BOOL   WINAPI DPA_Destroy(HDPA hdpa);                                 /* ;Internal */
  2317. WINCOMMCTRLAPI HDPA   WINAPI DPA_Clone(HDPA hdpa, HDPA hdpaNew);                     /* ;Internal */
  2318. WINCOMMCTRLAPI LPVOID WINAPI DPA_GetPtr(HDPA hdpa, int i);                           /* ;Internal */
  2319. WINCOMMCTRLAPI int    WINAPI DPA_GetPtrIndex(HDPA hdpa, LPVOID p);                /* ;Internal */
  2320. WINCOMMCTRLAPI BOOL   WINAPI DPA_Grow(HDPA pdpa, int cp);                            /* ;Internal */
  2321. WINCOMMCTRLAPI BOOL   WINAPI DPA_SetPtr(HDPA hdpa, int i, LPVOID p);              /* ;Internal */
  2322. WINCOMMCTRLAPI int    WINAPI DPA_InsertPtr(HDPA hdpa, int i, LPVOID p);           /* ;Internal */
  2323. WINCOMMCTRLAPI LPVOID WINAPI DPA_DeletePtr(HDPA hdpa, int i);                        /* ;Internal */
  2324. WINCOMMCTRLAPI BOOL   WINAPI DPA_DeleteAllPtrs(HDPA hdpa);                           /* ;Internal */
  2325. #define       DPA_GetPtrCount(hdpa)   (*(int FAR*)(hdpa))             /* ;Internal */
  2326. #define       DPA_GetPtrPtr(hdpa)     (*((LPVOID FAR* FAR*)((BYTE FAR*)(hdpa) + sizeof(int))))   /* ;Internal */
  2327. #define       DPA_FastGetPtr(hdpa, i) (DPA_GetPtrPtr(hdpa)[i])   /* ;Internal */
  2328. typedef int (CALLBACK *PFNDPACOMPARE)(LPVOID p1, LPVOID p2, LPARAM lParam); /* ;Internal */
  2329.                                                                            /* ;Internal */
  2330. WINCOMMCTRLAPI BOOL   WINAPI DPA_Sort(HDPA hdpa, PFNDPACOMPARE pfnCompare, LPARAM lParam); /* ;Internal */
  2331.                                                                            /* ;Internal */
  2332. // Search array.  If DPAS_SORTED, then array is assumed to be sorted       /* ;Internal */
  2333. // according to pfnCompare, and binary search algorithm is used.           /* ;Internal */
  2334. // Otherwise, linear search is used.                                       /* ;Internal */
  2335. //                                                                         /* ;Internal */
  2336. // Searching starts at iStart (-1 to start search at beginning).           /* ;Internal */
  2337. //                                                                         /* ;Internal */
  2338. // DPAS_INSERTBEFORE/AFTER govern what happens if an exact match is not    /* ;Internal */
  2339. // found.  If neither are specified, this function returns -1 if no exact  /* ;Internal */
  2340. // match is found.  Otherwise, the index of the item before or after the   /* ;Internal */
  2341. // closest (including exact) match is returned.                            /* ;Internal */
  2342. //                                                                         /* ;Internal */
  2343. // Search option flags                                                     /* ;Internal */
  2344. //                                                                         /* ;Internal */
  2345. #define DPAS_SORTED             0x0001                                    /* ;Internal */
  2346. #define DPAS_INSERTBEFORE       0x0002                                     /* ;Internal */
  2347. #define DPAS_INSERTAFTER        0x0004                                     /* ;Internal */
  2348.                                                                            /* ;Internal */
  2349. WINCOMMCTRLAPI int WINAPI DPA_Search(HDPA hdpa, LPVOID pFind, int iStart,  /* ;Internal */
  2350.       PFNDPACOMPARE pfnCompare,  /* ;Internal */
  2351.       LPARAM lParam, UINT options);    /* ;Internal */
  2352.                                                                            /* ;Internal */
  2353. //======================================================================   /* ;Internal */
  2354. // String management helper routines                                       /* ;Internal */
  2355.                                                                            /* ;Internal */
  2356. WINCOMMCTRLAPI int  WINAPI Str_GetPtr(LPCSTR psz, LPSTR pszBuf, int cchBuf);              /* ;Internal */
  2357. WINCOMMCTRLAPI BOOL WINAPI Str_SetPtr(LPSTR FAR* ppsz, LPCSTR psz);                       /* ;Internal */
  2358. #endif // NO_COMMCTRL_DA                                           /* ;Internal */
  2359.                                                                            /* ;Internal */
  2360. #ifndef NO_COMMCTRL_ALLOCFCNS                                                   /* ;Internal */
  2361. //====== Memory allocation functions ===================                        /* ;Internal */
  2362.                                                                                 /* ;Internal */
  2363. #ifdef _WIN32                                                                    /* ;Internal */
  2364. #define _huge                                                                   /* ;Internal */
  2365. #endif                                                                          /* ;Internal */
  2366.                                                                 /* ;Internal */
  2367. WINCOMMCTRLAPI void _huge* WINAPI Alloc(long cb);                               /* ;Internal */
  2368. WINCOMMCTRLAPI void _huge* WINAPI ReAlloc(void _huge* pb, long cb);              /* ;Internal */
  2369. WINCOMMCTRLAPI BOOL      WINAPI Free(void _huge* pb);                          /* ;Internal */
  2370. WINCOMMCTRLAPI DWORD      WINAPI GetSize(void _huge* pb);                       /* ;Internal */
  2371.                                                                 /* ;Internal */
  2372. #endif                                                          /* ;Internal */
  2373.                                                                                 /* ;Internal */
  2374. #ifndef NO_COMMCTRL_STRFCNS                                                     /* ;Internal */
  2375. // BUGBUG: move some place else                                                 /* ;Internal */
  2376. //=============== string routines ===================================     /* ;Internal */
  2377.                                                                           /* ;Internal */
  2378. // DBCS ready string routines...                                          /* ;Internal */
  2379.                                                                           /* ;Internal */
  2380. // these would be WINAPI but that conflicts with some private users of    /* ;Internal */
  2381. // these routines, and we don't need to load DS anyway                    /* ;Internal */
  2382.                                                                           /* ;Internal */
  2383. #define StrNCmp  StrCmpN                                                        /* ;Internal */
  2384. #define StrNCmpI StrCmpNI                                                       /* ;Internal */
  2385. #define StrNCpy  lstrcpyn                                                       /* ;Internal */
  2386. #define StrCpyN  lstrcpyn                                                       /* ;Internal */
  2387. WINCOMMCTRLAPI LPSTR FAR PASCAL StrChr(LPCSTR lpStart, WORD wMatch);                     /* ;Internal */
  2388. WINCOMMCTRLAPI LPSTR FAR PASCAL StrRChr(LPCSTR lpStart, LPCSTR lpEnd, WORD wMatch);      /* ;Internal */
  2389. WINCOMMCTRLAPI LPSTR FAR PASCAL StrChrI(LPCSTR lpStart, WORD wMatch);                    /* ;Internal */
  2390. WINCOMMCTRLAPI LPSTR FAR PASCAL StrRChrI(LPCSTR lpStart, LPCSTR lpEnd, WORD wMatch);     /* ;Internal */
  2391. WINCOMMCTRLAPI int   FAR PASCAL StrCmpN(LPCSTR lpStr1, LPCSTR lpStr2, int nChar);        /* ;Internal */
  2392. WINCOMMCTRLAPI int   FAR PASCAL StrCmpNI(LPCSTR lpStr1, LPCSTR lpStr2, int nChar);       /* ;Internal */
  2393. WINCOMMCTRLAPI LPSTR FAR PASCAL StrStr(LPCSTR lpFirst, LPCSTR lpSrch);                   /* ;Internal */
  2394. WINCOMMCTRLAPI LPSTR FAR PASCAL StrRStr(LPCSTR lpSource, LPCSTR lpLast, LPCSTR lpSrch);  /* ;Internal */
  2395. WINCOMMCTRLAPI LPSTR FAR PASCAL StrStrI(LPCSTR lpFirst, LPCSTR lpSrch);                  /* ;Internal */
  2396. WINCOMMCTRLAPI LPSTR FAR PASCAL StrRStrI(LPCSTR lpSource, LPCSTR lpLast, LPCSTR lpSrch); /* ;Internal */
  2397. WINCOMMCTRLAPI int   FAR PASCAL StrCSpn(LPCSTR lpStr, LPCSTR lpSet);                     /* ;Internal */
  2398. WINCOMMCTRLAPI int   FAR PASCAL StrCSpnI(LPCSTR lpStr, LPCSTR lpSet);                    /* ;Internal */
  2399. WINCOMMCTRLAPI int    WINAPI StrToInt(LPCSTR lpSrc);                                  /* ;Internal */
  2400. #define StrToLong StrToInt                                                      /* ;Internal */
  2401.                                                                                 /* ;Internal */
  2402. #endif //  NO_COMMCTRL_STRFCNS                                                  /* ;Internal */
  2403.                                                                                 /* ;Internal */
  2404. #ifndef _SIZE_T_DEFINED /* ;Internal */
  2405. #define _SIZE_T_DEFINED /* ;Internal */
  2406. typedef unsigned int size_t; /* ;Internal */
  2407. #endif /* ;Internal */
  2408.                                                                                 /* ;Internal */
  2409. #ifdef _WIN32                                                             /* ;Internal */
  2410. // BUGBUG: move some place else /* ;Internal */
  2411. //===================================================================      /* ;Internal */
  2412. typedef int (CALLBACK *MRUCMPPROC)(LPCSTR, LPCSTR);                        /* ;Internal */
  2413.                                                                 /* ;Internal */
  2414. // NB This is cdecl - to be compatible with the crts.                     /* ;Internal */
  2415. typedef int (cdecl FAR *MRUCMPDATAPROC)(const void FAR *, const void FAR *,  /* ;Internal */
  2416. size_t); /* ;Internal */
  2417. /* ;Internal */
  2418.                                                                 /* ;Internal */
  2419.                                                                                 /* ;Internal */
  2420. typedef struct _MRUINFO {                                                       /* ;Internal */
  2421.     DWORD cbSize;                                                               /* ;Internal */
  2422.     UINT uMax;                                                                  /* ;Internal */
  2423.     UINT fFlags;                                                                /* ;Internal */
  2424.     HKEY hKey;                                                                  /* ;Internal */
  2425.     LPCSTR lpszSubKey;                                                          /* ;Internal */
  2426.     MRUCMPPROC lpfnCompare;                                                     /* ;Internal */
  2427. } MRUINFO, FAR *LPMRUINFO;                                                      /* ;Internal */
  2428.                                                                                 /* ;Internal */
  2429. #define MRU_BINARY      0x0001                                                  /* ;Internal */
  2430. #define MRU_CACHEWRITE  0x0002                                                  /* ;Internal */
  2431.                                                                                 /* ;Internal */
  2432.                                                                                 /* ;Internal */
  2433. WINCOMMCTRLAPI HANDLE WINAPI CreateMRUList(LPMRUINFO lpmi);                                    /* ;Internal */
  2434. WINCOMMCTRLAPI void   WINAPI FreeMRUList(HANDLE hMRU);                                    /* ;Internal */
  2435. WINCOMMCTRLAPI int    WINAPI AddMRUString(HANDLE hMRU, LPCSTR szString);                  /* ;Internal */
  2436. WINCOMMCTRLAPI int    WINAPI DelMRUString(HANDLE hMRU, int nItem);                        /* ;Internal */
  2437. WINCOMMCTRLAPI int    WINAPI FindMRUString(HANDLE hMRU, LPCSTR szString, LPINT lpiSlot);  /* ;Internal */
  2438. WINCOMMCTRLAPI int    WINAPI EnumMRUList(HANDLE hMRU, int nItem, LPVOID lpData, UINT uLen); /* ;Internal */
  2439.                                                                                 /* ;Internal */
  2440. WINCOMMCTRLAPI int    WINAPI AddMRUData(HANDLE hMRU, const void FAR *lpData, UINT cbData); /* ;Internal */
  2441. WINCOMMCTRLAPI int    WINAPI FindMRUData(HANDLE hMRU, const void FAR *lpData, UINT cbData,  /* ;Internal */
  2442.   LPINT lpiSlot); /* ;Internal */
  2443. #endif                                                                        /* ;Internal */
  2444.                                                                            /* ;Internal */
  2445. //=========================================================================     /* ;Internal */
  2446. // for people that just gota use GetProcAddress()                               /* ;Internal */
  2447.                                                                                 /* ;Internal */
  2448. #ifdef _WIN32                                                                    /* ;Internal */
  2449. #define DPA_CreateORD                   328                                     /* ;Internal */
  2450. #define DPA_DestroyORD                  329                                     /* ;Internal */
  2451. #define DPA_GrowORD                     330                                     /* ;Internal */
  2452. #define DPA_CloneORD                    331                                     /* ;Internal */
  2453. #define DPA_GetPtrORD                   332                                     /* ;Internal */
  2454. #define DPA_GetPtrIndexORD              333                                     /* ;Internal */
  2455. #define DPA_InsertPtrORD                334                                     /* ;Internal */
  2456. #define DPA_SetPtrORD                   335                                     /* ;Internal */
  2457. #define DPA_DeletePtrORD                336                                     /* ;Internal */
  2458. #define DPA_DeleteAllPtrsORD            337                                     /* ;Internal */
  2459. #define DPA_SortORD                     338                                     /* ;Internal */
  2460. #define DPA_SearchORD                   339                                     /* ;Internal */
  2461. #define DPA_CreateExORD                 340                                     /* ;Internal */
  2462. #define SendNotifyORD                   341                                     /* ;Internal */
  2463. #define CreatePageORD                   163                                     /* ;Internal */
  2464. #define CreateProxyPageORD              164                                     /* ;Internal */
  2465. #endif                                                                          /* ;Internal */
  2466. #ifdef __cplusplus
  2467. } /* end of 'extern "C" {' */
  2468. #endif
  2469. #ifdef _WIN32
  2470. #include <poppack.h>
  2471. #endif
  2472. #endif
  2473. #endif /* _INC_COMMCTRL */