XTOutBarCtrl.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:79k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTOutBarCtrl.h interface for the CXTOutBarCtrl class.
  2. //
  3. // This file is a part of the XTREME CONTROLS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTOUTBARCTRL_H__)
  22. #define __XTOUTBARCTRL_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "XTOutBarCtrlTheme.h"
  28. // forwards
  29. class CXTOutBarItem;
  30. class CXTOutBarFolder;
  31. class CXTOutBarEditItem;
  32. class CXTOutBarCtrlTheme;
  33. const DWORD OBS_XT_SMALLICON       = 0x0001;   //<ALIAS CXTOutBarCtrl::ModifyFlag@const DWORD&@const DWORD&@const bool>
  34. const DWORD OBS_XT_LARGEICON       = 0x0002;   //<ALIAS CXTOutBarCtrl::ModifyFlag@const DWORD&@const DWORD&@const bool>
  35. const DWORD OBS_XT_EDITGROUPS      = 0x0004;   //<ALIAS CXTOutBarCtrl::ModifyFlag@const DWORD&@const DWORD&@const bool>
  36. const DWORD OBS_XT_EDITITEMS       = 0x0008;   //<ALIAS CXTOutBarCtrl::ModifyFlag@const DWORD&@const DWORD&@const bool>
  37. const DWORD OBS_XT_REMOVEGROUPS    = 0x0010;   //<ALIAS CXTOutBarCtrl::ModifyFlag@const DWORD&@const DWORD&@const bool>
  38. const DWORD OBS_XT_REMOVEITEMS     = 0x0020;   //<ALIAS CXTOutBarCtrl::ModifyFlag@const DWORD&@const DWORD&@const bool>
  39. const DWORD OBS_XT_ADDGROUPS       = 0x0040;   //<ALIAS CXTOutBarCtrl::ModifyFlag@const DWORD&@const DWORD&@const bool>
  40. const DWORD OBS_XT_DRAGITEMS       = 0x0080;   //<ALIAS CXTOutBarCtrl::ModifyFlag@const DWORD&@const DWORD&@const bool>
  41. const DWORD OBS_XT_ANIMATION       = 0x0100;   //<ALIAS CXTOutBarCtrl::ModifyFlag@const DWORD&@const DWORD&@const bool>
  42. const DWORD OBS_XT_SELHIGHLIGHT    = 0x0200;   //<ALIAS CXTOutBarCtrl::ModifyFlag@const DWORD&@const DWORD&@const bool>
  43. const DWORD OBS_XT_DEFAULT         = 0x00FC;   //<ALIAS CXTOutBarCtrl::ModifyFlag@const DWORD&@const DWORD&@const bool>
  44. // ---------------------------------------------------------------------
  45. // Summary:
  46. //     XT_OUTBAR_INFO structure is used by by the CXTOutBarCtrl
  47. //     class to store and information for an Outlook bar folder or item.
  48. // See Also:
  49. //     CXTOutBarCtrl, CXTOutBarCtrl::OnLabelChanged
  50. // ---------------------------------------------------------------------
  51. struct XT_OUTBAR_INFO
  52. {
  53. int     nIndex;    // Index of the item.
  54. int     nDragTo;   // Ending drag index.
  55. int     nDragFrom; // Starting drag index.
  56. bool    bFolder;   // true if the item is a folder
  57. LPCTSTR lpszText;  // Item text.
  58. HWND    hWnd;      // CXTOutBarCtrl window handle
  59. };
  60. //===========================================================================
  61. // Summary:
  62. //     CXTOutBarCtrl is a CWnd derived class. It is used to create a shortcut
  63. //     bar window similar to the shortcut bar seen in Outlook(tm).
  64. //===========================================================================
  65. class _XTP_EXT_CLASS CXTOutBarCtrl : public CWnd, public CXTThemeManagerStyleHostBase
  66. {
  67. DECLARE_DYNCREATE(CXTOutBarCtrl)
  68. DECLARE_THEME_HOST(CXTOutBarCtrl)
  69. DECLARE_THEME_REFRESH(CXTOutBarCtrl)
  70. public:
  71. // ----------------------------------------------------------------------
  72. // Summary:
  73. //     Enumeration to determine an item type.
  74. // Remarks:
  75. //     HitTestCode type defines the constants used to determine the
  76. //     type of item that was found during a HitTestEx operation.
  77. // See Also:
  78. //     CXTOutBarCtrl, CXTOutBarCtrl::HitTestEx
  79. //
  80. // <KEYWORDS hitNone, hitFolder, hitItem, hitUpScroll, hitDnScroll>
  81. // ----------------------------------------------------------------------
  82. enum HitTestCode
  83. {
  84. hitNone      =-1, // No item was found.
  85. hitFolder    = 0, // The item found was a folder.
  86. hitItem      = 1, // The item found was a shortcut.
  87. hitUpScroll  = 2, // The item found was a up arrow.
  88. hitDnScroll  = 3  // The item found was a down arrow.
  89. };
  90. // ----------------------------------------------------------------------
  91. // Summary:
  92. //     Enumeration to determine an item's size.
  93. // Remarks:
  94. //     RectItem type defines the constants used to determine the
  95. //     size or the item or one of its components (label or icon). This is
  96. //     used to determine how the control should be rendered.
  97. // See Also:
  98. //     CXTOutBarCtrl, CXTOutBarCtrl::GetItemSize
  99. //
  100. // <KEYWORDS rectItemIcon, rectItemLabel, rectItemBoth>
  101. // ----------------------------------------------------------------------
  102. enum RectItem
  103. {
  104. rectItemIcon = 1,  // Area is the size of an item icon.
  105. rectItemLabel = 2, // Area is the size of an item label.
  106. rectItemBoth = 3   // Area is the size of both the item icon and label combined.
  107. };
  108. public:
  109. //-----------------------------------------------------------------------
  110. // Summary:
  111. //     Constructs a CXTOutBarCtrl object
  112. //-----------------------------------------------------------------------
  113. CXTOutBarCtrl();
  114. //-----------------------------------------------------------------------
  115. // Summary:
  116. //     Destroys a CXTOutBarCtrl object, handles cleanup and deallocation
  117. //-----------------------------------------------------------------------
  118. virtual ~CXTOutBarCtrl();
  119. public:
  120. //-----------------------------------------------------------------------
  121. // Summary:
  122. //     Call this member function to set an animation effect for the currently
  123. //     selected item. It is not to be used with OBS_XT_SELHIGHLIGHT flag.
  124. // Parameters:
  125. //     iTime - Specifies the time in milliseconds that the selected item will animate.
  126. //-----------------------------------------------------------------------
  127. virtual void SetAnimSelHighlight(const int iTime);
  128. //-----------------------------------------------------------------------
  129. // Summary:
  130. //     Call this member function to retrieve the item data that was set for
  131. //     the specified folder.
  132. // Parameters:
  133. //     iFolder - The index of the folder to retrieve item data for. If -1, the currently
  134. //               selected folder item data is returned.
  135. // Returns:
  136. //     A DWORD value.
  137. //-----------------------------------------------------------------------
  138. virtual DWORD GetFolderData(int iFolder = -1);
  139. //-----------------------------------------------------------------------
  140. // Summary:
  141. //     Call this member function to retrieve the CWnd object that has been set
  142. //     for the folder specified by 'iFolder'.
  143. // Parameters:
  144. //     iFolder - Index of the folder to retrieve the CWnd object for, if -1 the currently
  145. //               selected folder CWnd object is used.
  146. // Returns:
  147. //     If 'iFolder' is -1, the child of the currently selected folder is returned.
  148. //     If no object has been set for the folder, the return value is NULL.
  149. //-----------------------------------------------------------------------
  150. virtual CWnd* GetFolderChild(int iFolder = -1);
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     Call this member function to add a folder with a CWnd child nested
  154. //     inside of it. You can insert a folder with any CWnd object, such as
  155. //     a tree control (see the OutlookBar sample).
  156. // Parameters:
  157. //     lpszFolderName - Name of the folder to add.
  158. //     pWndChild      - Points to a valid CWnd object. The object must be created before
  159. //                      inserting.
  160. //     dwData         - Item data (lParam) for the folder.
  161. // Returns:
  162. //     The integer value that represents the index of the added folder.
  163. //-----------------------------------------------------------------------
  164. virtual int AddFolderBar(LPCTSTR lpszFolderName, CWnd* pWndChild, const DWORD dwData = 0);
  165. //-----------------------------------------------------------------------
  166. // Summary:
  167. //     Call this member function to get the text of the specified item for
  168. //     the currently selected folder.
  169. // Parameters:
  170. //     iIndex - Index of the item to retrieve the text for.
  171. // Returns:
  172. //     A CString object containing the retrieved text.
  173. //-----------------------------------------------------------------------
  174. virtual CString GetItemText(const int iIndex);
  175. //-----------------------------------------------------------------------
  176. // Summary:
  177. //     Call this member function to set the tick count, in milliseconds, between
  178. //     each animation frame in folder scrolling. If you set a value of -1,
  179. //     or minor, no animation will be played. Animation requires the OBS_XT_ANIMATION
  180. //     flag be set.
  181. // Parameters:
  182. //     lValue - Specifies the time in milliseconds between animation. A value of
  183. //              -1 will disable animation playback.
  184. //-----------------------------------------------------------------------
  185. virtual void SetAnimationTickCount(const long lValue);
  186. //-----------------------------------------------------------------------
  187. // Summary:
  188. //     Call this member function to get the current animation tick count.
  189. // Returns:
  190. //     An integer value representing the current tick count.
  191. //-----------------------------------------------------------------------
  192. virtual int GetAnimationTickCount();
  193. //-----------------------------------------------------------------------
  194. // Summary:
  195. //     Call this member function to set the image index, in the image list,
  196. //     for the 'iIndex' item of the currently selected folder.
  197. // Parameters:
  198. //     iIndex - Index of the item in the currently selected folder.
  199. //     iImage - Index of the image, in the image list, to use for the specified item.
  200. //-----------------------------------------------------------------------
  201. virtual void SetItemImage(const int iIndex, const int iImage);
  202. //-----------------------------------------------------------------------
  203. // Summary:
  204. //     Call this member function to set the item data (lParam) for the specified
  205. //     item in the currently selected folder.
  206. // Parameters:
  207. //     iIndex - Index of the item to set item data for.
  208. //     dwData - Item data (lParam) to set.
  209. //-----------------------------------------------------------------------
  210. virtual void SetItemData(const int iIndex, const DWORD dwData);
  211. //-----------------------------------------------------------------------
  212. // Summary:
  213. //     Call this member function to retrieve the index of the image associated
  214. //     with the specified item in the currently selected folder.
  215. // Parameters:
  216. //     iIndex - Index of the item to retrieve the image index for.
  217. // Returns:
  218. //     An integer value that represents the index of the desired image.
  219. //-----------------------------------------------------------------------
  220. virtual int  GetItemImage(const int iIndex) const;
  221. //-----------------------------------------------------------------------
  222. // Summary:
  223. //     Call this member function to get the item data (lParam) for the specified
  224. //     item in the currently selected folder.
  225. // Parameters:
  226. //     iIndex - Index of the item to retrieve item data for.
  227. // Returns:
  228. //     A DWORD value.
  229. //-----------------------------------------------------------------------
  230. virtual DWORD GetItemData(const int iIndex) const;
  231. //-----------------------------------------------------------------------
  232. // Summary:
  233. //     Call this member function to remove all items from the folder specified
  234. //     by 'iFolder'.
  235. // Parameters:
  236. //     iFolder - Index of the folder to insert the item into.
  237. //     bNofify - true to send an XTWM_OUTBAR_NOTIFY message.
  238. //-----------------------------------------------------------------------
  239. virtual void RemoveAllItems(int iFolder, bool bNofify = false);
  240. //-----------------------------------------------------------------------
  241. // Summary:
  242. //     Call this member function to remove the specified item from the currently
  243. //     selected folder.
  244. // Parameters:
  245. //     iIndex - Index of the item to remove.
  246. //-----------------------------------------------------------------------
  247. virtual void RemoveItem(const int iIndex);
  248. //-----------------------------------------------------------------------
  249. // Summary:
  250. //     Call this member function to set the text for the specified item in the
  251. //     currently selected folder.
  252. // Parameters:
  253. //     iIndex       - Index of the item to set the text for.
  254. //     lpszItemName - Points to a NULL terminated string.
  255. //-----------------------------------------------------------------------
  256. virtual void SetItemText(const int iIndex, LPCTSTR lpszItemName);
  257. //-----------------------------------------------------------------------
  258. // Summary:
  259. //     Call this member function to begin local editing of the specified item
  260. //     in the currently selected folder.
  261. // Parameters:
  262. //     iIndex - Index of the item to begin editing for.
  263. //-----------------------------------------------------------------------
  264. virtual void StartItemEdit(const int iIndex);
  265. //-----------------------------------------------------------------------
  266. // Summary:
  267. //     Call this member function to set the text label for the specified folder.
  268. // Parameters:
  269. //     iIndex         - Index of the folder to set the text label for.
  270. //     lpszFolderName - Points to a NULL terminated string.
  271. //-----------------------------------------------------------------------
  272. virtual void SetFolderText(const int iIndex, LPCTSTR lpszFolderName);
  273. //-----------------------------------------------------------------------
  274. // Summary:
  275. //     Call this member function to begin editing of the specified folder
  276. //     item's label.
  277. // Parameters:
  278. //     iIndex - Index of the folder to begin editing.
  279. //-----------------------------------------------------------------------
  280. virtual void StartGroupEdit(const int iIndex);
  281. //-----------------------------------------------------------------------
  282. // Summary:
  283. //     Call this member function to get a pointer to the image list for the
  284. //     specified folder.
  285. // Parameters:
  286. //     iIndex - Index of the folder to retrieve the image list for.
  287. //     bSmall - TRUE to return the small image list. FALSE to return the large image
  288. //              list.
  289. // Returns:
  290. //     A CImageList pointer representing the image list for the folder specified
  291. //     by 'iIndex'.
  292. //-----------------------------------------------------------------------
  293. virtual CImageList* GetFolderImageList(const int iIndex, const BOOL bSmall) const;
  294. //-----------------------------------------------------------------------
  295. // Summary:
  296. //     Call this member function to return the global image list for the OutlookBar
  297. //     control.
  298. // Parameters:
  299. //     dwImageList - If OBS_XT_SMALLICON, the small image list is returned; if OBS_XT_LARGEICON,
  300. //                   the large image list is returned.
  301. // Returns:
  302. //     A CImageList pointer representing the global image list for the OutlookBar
  303. //     control.
  304. //-----------------------------------------------------------------------
  305. virtual CImageList* GetImageList(DWORD dwImageList);
  306. //-----------------------------------------------------------------------
  307. // Summary:
  308. //     Call this member function to set the image list for the specified folder.
  309. // Parameters:
  310. //     iFolder     - Index of the folder to set the image list for.
  311. //     pImageList  - Points to the new image list.
  312. //     dwImageList - If OBS_XT_SMALLICON, the small image list is set, if OBS_XT_LARGEICON,
  313. //                   the large image list is set.
  314. // Returns:
  315. //     A pointer to the previously set image list, or NULL if no previous
  316. //     image list exists.
  317. //-----------------------------------------------------------------------
  318. virtual CImageList* SetFolderImageList(const int iFolder, CImageList* pImageList, DWORD dwImageList);
  319. //-----------------------------------------------------------------------
  320. // Summary:
  321. //     This member function will set the main image list. You can link different
  322. //     image lists to the folders using the SetFolderImageList function. If a
  323. //     folder has been linked to an image list with the SetFolderImageList function,
  324. //     it will own the linked image list. Otherwise, it will use the image list
  325. //     set with this function.
  326. // Parameters:
  327. //     pImageList  - Points to the new image list.
  328. //     dwImageList - If OBS_XT_SMALLICON, the small image list is set; if OBS_XT_LARGEICON,
  329. //     the large image list is set.
  330. // Returns:
  331. //     A pointer to the previously set image list, or NULL if no previous image
  332. //     list exists.
  333. //-----------------------------------------------------------------------
  334. virtual CImageList* SetImageList(CImageList* pImageList, DWORD dwImageList);
  335. //-----------------------------------------------------------------------
  336. // Summary:
  337. //     Call this member function to remove the specified folder and its items.
  338. // Parameters:
  339. //     iIndex - Index of the folder to remove.
  340. //-----------------------------------------------------------------------
  341. virtual void RemoveFolder(const int iIndex);
  342. //-----------------------------------------------------------------------
  343. // Summary:
  344. //     This member function will get the index of the currently selected folder.
  345. // Returns:
  346. //     An integer value representing the index of the currently selected folder.
  347. //-----------------------------------------------------------------------
  348. virtual int GetSelFolder() const;
  349. //-----------------------------------------------------------------------
  350. // Summary:
  351. //     This member function will get the total number of folders found in
  352. //     the Outlook bar.
  353. // Returns:
  354. //     An integer value representing the number of folders in the Outlook bar.
  355. //-----------------------------------------------------------------------
  356. virtual int GetFolderCount() const;
  357. //-----------------------------------------------------------------------
  358. // Summary:
  359. //     This member function will set the selected folder for the Outlook bar.
  360. // Parameters:
  361. //     iIndex - Index of the new selected folder.
  362. //-----------------------------------------------------------------------
  363. virtual void SetSelFolder(const int iIndex);
  364. //-----------------------------------------------------------------------
  365. // Summary:
  366. //     This member function gets the number of items found in the currently
  367. //     selected folder.
  368. // Returns:
  369. //     An integer value representing the number of items in the current folder.
  370. //-----------------------------------------------------------------------
  371. virtual int GetItemCount() const;
  372. //-----------------------------------------------------------------------
  373. // Summary:
  374. //     Call this member function to insert an item into the specified folder.
  375. // Parameters:
  376. //     iFolder      - Index of the folder to insert the item into.
  377. //     iIndex       - Index or position of the item to insert into the folder.
  378. //     lpszItemName - A NULL terminated string that represents the item label. This value
  379. //                    cannot be set to NULL.
  380. //     iImage       - Index into the folder's image list.
  381. //     dwData       - User defined item data that you can assign to the item. Use GetItemData
  382. //                    and SetItemData to access and change this data.
  383. // Returns:
  384. //     The index of the newly inserted item.
  385. //-----------------------------------------------------------------------
  386. virtual int InsertItem(const int iFolder, const int iIndex, LPCTSTR lpszItemName, const int iImage = -1, const DWORD dwData = 0);
  387. //-----------------------------------------------------------------------
  388. // Summary:
  389. //     Call this member function to add a folder to the Outlook bar control.
  390. // Parameters:
  391. //     lpszFolderName - A NULL terminated string that represents the folder's label.
  392. //     dwData         - User defined item data for the folder.
  393. // Returns:
  394. //     The index of the newly inserted folder.
  395. //-----------------------------------------------------------------------
  396. virtual int AddFolder(LPCTSTR lpszFolderName, const DWORD dwData);
  397. // --------------------------------------------------------------------------------------------
  398. // Summary:
  399. //     Call this member function to modify an Outlook bar style.
  400. // Parameters:
  401. //     dwRemove -  Specifies OBS_XT_ styles to be removed during
  402. //                 style modification.
  403. //     dwAdd -     Specifies OBS_XT_ styles to be added during style
  404. //                 modification.
  405. //     bRedraw -   true to redraw the Outlook bar.
  406. // Remarks:
  407. //     Call this member function to modify an Outlook bar style. Styles
  408. //     to be added or removed can be combined by using the bitwise OR (|)
  409. //     operator.
  410. //
  411. //     The desired styles for the Outlook bar can be one or more of the
  412. //     following:<p/>
  413. //
  414. //     * <b>OBS_XT_SMALLICON</b> Sets small icon mode.
  415. //     * <b>OBS_XT_LARGEICON</b> Sets large icon mode.
  416. //     * <b>OBS_XT_EDITGROUPS</b> Enables folder local editing
  417. //           (renaming).
  418. //     * <b>OBS_XT_EDITITEMS</b> Enables item local editing
  419. //           (renaming).
  420. //     * <b>OBS_XT_REMOVEGROUPS</b> Enables the "Remove" command for
  421. //           folders in context menu.
  422. //     * <b>OBS_XT_REMOVEITEMS</b> Enables the "Remove" command for
  423. //           items in context menu.
  424. //     * <b>OBS_XT_ADDGROUPS</b> Enables folder insertion.
  425. //     * <b>OBS_XT_DRAGITEMS</b> Enables item dragging to rearrange
  426. //           position.
  427. //     * <b>OBS_XT_ANIMATION</b> Enables animation while changing
  428. //           folder selection.
  429. //     * <b>OBS_XT_SELHIGHLIGHT</b> Enables dimmed highlight of last
  430. //           pressed item.
  431. //     * <b>OBS_XT_DEFAULT</b> Same as (OBS_XT_DRAGITEMS | OBS_XT_EDITGROUPS
  432. //           | OBS_XT_EDITITEMS | OBS_XT_REMOVEGROUPS | OBS_XT_REMOVEITEMS
  433. //           | OBS_XT_ADDGROUPS).
  434. // See Also:
  435. //     GetFlag, Create, CreateEx
  436. // --------------------------------------------------------------------------------------------
  437. virtual void ModifyFlag(const DWORD& dwRemove, const DWORD& dwAdd, const bool bRedraw = false);
  438. // ----------------------------------------------------------------------
  439. // Summary:
  440. //     Call this member function to get the current style set for the
  441. //     Outlook bar.
  442. // Returns:
  443. //     A DWORD value representing the current style of the Outlook
  444. //     bar.
  445. // Remarks:
  446. //     See ModifyFlag for a list of available styles.
  447. // See Also:
  448. //     ModifyFlag, Create, CreateEx
  449. // ----------------------------------------------------------------------
  450. virtual DWORD GetFlag() const;
  451. //-----------------------------------------------------------------------
  452. // Summary:
  453. //     Call this member function to set the size of the icons displayed in the
  454. //     Outlook bar control for the specified folder.
  455. // Parameters:
  456. //     bSet    - TRUE to display small icons, or FALSE to display large icons.
  457. //     iFolder - Index of the folder to set the icon size for. If -1, all folder icons
  458. //               are set.
  459. //-----------------------------------------------------------------------
  460. virtual void SetSmallIconView(const BOOL bSet, const int iFolder = -1);
  461. //-----------------------------------------------------------------------
  462. // Summary:
  463. //     Call this member function to return the current state of the icon display
  464. //     for the Outlook bar control.
  465. // Parameters:
  466. //     iFolder - Index of the folder to check. If -1, the currently selected folder
  467. //               is checked.
  468. // Returns:
  469. //     TRUE if small icons are displayed, and FALSE if large icons are displayed.
  470. //-----------------------------------------------------------------------
  471. virtual BOOL IsSmallIconView(const int iFolder = -1) const;
  472. // -----------------------------------------------------------------------------------------------
  473. // Summary:
  474. //     Call this member function to create the Outlook bar control.
  475. // Parameters:
  476. //     dwStyle -     Style for the Outlook bar. It usually includes the WS_CHILD | WS_VISIBLE
  477. //                   flags.
  478. //     rect -        Size of the Outlook bar.
  479. //     pParentWnd -  Parent of the control.
  480. //     nID -         Identifier of the Outlook bar control.
  481. //     dwFlag -      Specifies the style flags for the control. See ModifyFlag
  482. //                   for a list of available styles.
  483. // Returns:
  484. //     TRUE if successful, otherwise returns FALSE.
  485. // See Also:
  486. //     CreateEx, ModifyFlag
  487. // -----------------------------------------------------------------------------------------------
  488. virtual BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, const DWORD dwFlag = OBS_XT_DEFAULT);
  489. // --------------------------------------------------------------------------------------------------
  490. // Summary:
  491. //     Call this member function to create the Outlook bar control.
  492. // Parameters:
  493. //     dwExStyle -   Extended style for the Outlook bar such as WS_EX_STATICEDGE.
  494. //                   It can be NULL.
  495. //     dwStyle -     Style for the Outlook bar. It usually includes the WS_CHILD | WS_VISIBLE
  496. //                   flags.
  497. //     rect -        Size of the Outlook bar.
  498. //     pParentWnd -  Parent of the control.
  499. //     nID -         Identifier of the Outlook bar control.
  500. //     dwFlag -      Specifies the style flags for the control. See ModifyFlag
  501. //                   for a list of available styles.
  502. // Returns:
  503. //     TRUE if successful, otherwise returns FALSE.
  504. // See Also:
  505. //     Create, ModifyFlag
  506. // --------------------------------------------------------------------------------------------------
  507. virtual BOOL CreateEx(DWORD dwExStyle, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, const DWORD dwFlag = OBS_XT_DEFAULT);
  508. //-----------------------------------------------------------------------
  509. // Summary:
  510. //     Call this member function to set the font used by the Outlook bar control.
  511. // Parameters:
  512. //     pFont - Points to the font to be used by the Outlook bar.
  513. //-----------------------------------------------------------------------
  514. virtual void SetFontX(CFont* pFont);
  515. //-----------------------------------------------------------------------
  516. // Summary:
  517. //     Call this member function to retrieve the font used by the Outlook
  518. //     bar control.
  519. // Returns:
  520. //     A pointer to a CFont object representing the font used by the Outlook bar
  521. //     control.
  522. //-----------------------------------------------------------------------
  523. virtual CFont* GetFontX();
  524. //-----------------------------------------------------------------------
  525. // Summary:
  526. //     Call this member function to return a pointer to the CXTOutBarFolder data
  527. //     that is associated with the specified folder.
  528. // Parameters:
  529. //     iFolder - Index of the folder to retrieve.
  530. // Returns:
  531. //     A pointer to a CXTOutBarFolder object.
  532. //-----------------------------------------------------------------------
  533. virtual CXTOutBarFolder* GetBarFolder(const int iFolder);
  534. //-----------------------------------------------------------------------
  535. // Summary:
  536. //     Call this member function to return a pointer to the CXTOutBarItem data
  537. //     that is associated with the specified folder and item.
  538. // Parameters:
  539. //     iFolder - Index of the folder to retrieve.
  540. //     iIndex  - Index of the item to retrieve.
  541. // Returns:
  542. //     A pointer to a CXTOutBarItem object.
  543. //-----------------------------------------------------------------------
  544. virtual CXTOutBarItem* GetBarFolderItem(const int iFolder, const int iIndex);
  545. //-----------------------------------------------------------------------
  546. // Summary:
  547. //     Call this member function to set the background color for the Outlook
  548. //     bar control.
  549. // Parameters:
  550. //     clrBack - An RGB value that represents the background color.
  551. //-----------------------------------------------------------------------
  552. virtual void SetBackColor(COLORREF clrBack);
  553. //-----------------------------------------------------------------------
  554. // Summary:
  555. //     Call this member function to set the text color for items in the Outlook
  556. //     bar control.
  557. // Parameters:
  558. //     clrText - An RGB value that represents the text item color.
  559. //-----------------------------------------------------------------------
  560. virtual void SetTextColor(COLORREF clrText);
  561. //-----------------------------------------------------------------------
  562. // Summary:
  563. //     Call this member function to retrieve the size of the label for the
  564. //     specified item.
  565. // Parameters:
  566. //     iFolder - Index of the folder where the item is located.
  567. //     iIndex  - Index of the item.
  568. //     rect    - Address of a CRect object that will receive the label size.
  569. //-----------------------------------------------------------------------
  570. virtual void GetLabelRect(const int iFolder, const int iIndex, CRect& rect);
  571. //-----------------------------------------------------------------------
  572. // Summary:
  573. //     Call this member function to retrieve the size of the icon for the
  574. //     specified item.
  575. // Parameters:
  576. //     iFolder     - Index of the folder where the item is located.
  577. //     iIndex      - Index of the item.
  578. //     rect        - Address of a CRect object that will receive the icon
  579. //                   size.
  580. //     pInsideRect - Pointer to a CRect object that represents the size
  581. //                   of the client area for the Outlook bar. If NULL
  582. //                   GetInsideRect will be used to determine the client
  583. //                   area size.
  584. //-----------------------------------------------------------------------
  585. virtual void GetIconRect(const int iFolder, const int iIndex, CRect& rect, CRect* pInsideRect = NULL);
  586. //-----------------------------------------------------------------------
  587. // Summary:
  588. //     Call this member function to retrieve the size of the client area for
  589. //     the Outlook bar. This is the inside area that contains the folders.
  590. // Parameters:
  591. //     rect - Address of a CRect object that will receive the size.
  592. //-----------------------------------------------------------------------
  593. virtual void GetInsideRect(CRect& rect) const;
  594. //-----------------------------------------------------------------------
  595. // Summary:
  596. //     Call this member function to retrieve the size of the specified item.
  597. //     The size includes the area occupied by the item's label and icon.
  598. // Parameters:
  599. //     iFolder     - Index of the folder where the item is located.
  600. //     iIndex      - Index of the item.
  601. //     rect        - Address of a CRect object that will receive the icon
  602. //                   size.
  603. //     pInsideRect - Pointer to a CRect object that represents the size
  604. //                   of the client area for the Outlook bar. If NULL
  605. //                   GetInsideRect will be used to determine the client
  606. //                   area size.
  607. //-----------------------------------------------------------------------
  608. virtual void GetItemRect(const int iFolder, const int iIndex, CRect& rect, CRect* pInsideRect = NULL);
  609. //-----------------------------------------------------------------------
  610. // Summary:
  611. //     Call this member function to retrieve the size of the specified folder.
  612. // Parameters:
  613. //     iIndex - Index of the folder item.
  614. //     rect   - Address of a CRect object that will receive the folder size.
  615. // Returns:
  616. //     TRUE if successful, otherwise returns FALSE.
  617. //-----------------------------------------------------------------------
  618. virtual BOOL GetFolderRect(const int iIndex, CRect& rect) const;
  619. //-----------------------------------------------------------------------
  620. // Summary:
  621. //     This member function will set the selected folder and item
  622. //     for the Outlook bar.
  623. // Parameters:
  624. //     iFolder        - Index of the folder that contains the new selection.
  625. //     iItem          - Index of the new item to select.
  626. //     bEnsureVisible - TRUE to ensure the item is visible when selected.
  627. //-----------------------------------------------------------------------
  628. virtual void SetSelItem(int iFolder, int iItem, BOOL bEnsureVisible = TRUE);
  629. //-----------------------------------------------------------------------
  630. // Summary:
  631. //     This member function will return the index of the currently selected
  632. //     item for the currently selected folder.
  633. // Returns:
  634. //     An integer value representing the index of the selected item.
  635. //-----------------------------------------------------------------------
  636. int GetCurSel();
  637. //-----------------------------------------------------------------------
  638. // Summary:
  639. //     This member function will set the currently selected item for the currently
  640. //     selected folder.
  641. // Parameters:
  642. //     iItem    - Index of the item to select.
  643. //     bPressed - true if the item is to be pressed when selected.
  644. //-----------------------------------------------------------------------
  645. void SetCurSel(int iItem, const BOOL bPressed = false);
  646. //-----------------------------------------------------------------------
  647. // Summary:
  648. //     Call this member function to enable or disable a folder item.
  649. // Parameters:
  650. //     iFolder - Index of the folder that owns the item.
  651. //     iItem   - Index of the item to enable or disable.
  652. //     bEnable - true to enable item, false to disable.
  653. //-----------------------------------------------------------------------
  654. void EnableItem(int iFolder, int iItem, bool bEnable);
  655. protected:
  656. //-----------------------------------------------------------------------
  657. // Summary:
  658. //     Called by the CXTOutBarCtrl to draw the up or down scroll button.
  659. // Parameters:
  660. //     pDC    - Pointer to a valid device context.
  661. //     rect   - Size of area to render.
  662. //     uType  - Specifies the type of frame control to draw. See the
  663. //              uType parameter in DrawFrameControl in the Platform SDK for
  664. //              a list of this parameter's possible values.
  665. //     uState - Specifies the initial state of the frame control.
  666. //              Can be one or more of the values described for the uState parameter
  667. //              in DrawFrameControl in the Platform SDK. Use the nState value
  668. //              DFCS_ADJUSTRECT to adjust the bounding rectangle to exclude
  669. //              the surrounding edge of the push button.
  670. //-----------------------------------------------------------------------
  671. virtual void DrawScrollButton(CDC* pDC, CRect rect, UINT uType, UINT uState);
  672. //-----------------------------------------------------------------------
  673. // Summary:
  674. //     Called by the CXTOutBarCtrl to draw a folder item.
  675. // Parameters:
  676. //     pDC        - Pointer to a valid device context.
  677. //     iFolder    - Index of the parent folder.
  678. //     rc         - Size of the area to render.
  679. //     iIndex     - Index of the item to render.
  680. //     bOnlyImage - TRUE if only the image is to be drawn.
  681. //-----------------------------------------------------------------------
  682. virtual void DrawItem(CDC* pDC, const int iFolder, CRect rc, const int iIndex, const BOOL bOnlyImage = false);
  683. //-----------------------------------------------------------------------
  684. // Summary:
  685. //     Called by the CXTOutBarCtrl to draw the drag arrow
  686. // Parameters:
  687. //     pDC   - Pointer to a valid device context.
  688. //     iFrom - Index of the item before the arrow.
  689. //     iTo   - Index of the item after the arrow.
  690. //-----------------------------------------------------------------------
  691. virtual void DrawDragArrow(CDC* pDC, const int iFrom, const int iTo);
  692. //-----------------------------------------------------------------------
  693. // Summary:
  694. //     Called by the CXTOutBarCtrl to render an item animated.
  695. // Parameters:
  696. //     iOffsetX - X distance to offset icon animation.
  697. //     iOffsetY - Y distance to offset icon animation.
  698. //     iIndex   - Index of item to animate.
  699. //-----------------------------------------------------------------------
  700. virtual void DrawAnimItem(const int iOffsetX, const int iOffsetY, const int iIndex);
  701. //-----------------------------------------------------------------------
  702. // Summary:
  703. //     Called by the CXTOutBarCtrl to render a folder.
  704. // Parameters:
  705. //     pDC      - Pointer to a valid device context.
  706. //     iIndex   - Index of the folder to render.
  707. //     rect     - Size of the area to render.
  708. //     eHilight - Current mouse over state.
  709. // See Also: XTMouseState
  710. //-----------------------------------------------------------------------
  711. virtual void DrawFolder(CDC* pDC, const int iIndex, CRect rect, const XTMouseState eHilight);
  712. //-----------------------------------------------------------------------
  713. // Summary:
  714. //     Called by the CXTOutBarCtrl to render an item's icon.
  715. // Parameters:
  716. //     pDC      - Pointer to a valid device context.
  717. //     iIcon    - Index of the icon to render.
  718. //     iFolder  - Index of the parent folder.
  719. //     bHilight - true if the icon is highlighted.
  720. //-----------------------------------------------------------------------
  721. virtual void DrawIcon(CDC* pDC, int iIcon, int iFolder, bool bHilight);
  722. //-----------------------------------------------------------------------
  723. // Summary:
  724. //     Called by the CXTOutBarCtrl to render all items for a folder.
  725. // Parameters:
  726. //     pDC     - Pointer to a valid device context.
  727. //     iFolder - Index of the parent folder.
  728. //     rc      - Size of area to render.
  729. //-----------------------------------------------------------------------
  730. virtual void PaintItems(CDC* pDC, const int iFolder, CRect rc);
  731. //-----------------------------------------------------------------------
  732. // Summary:
  733. //     Called by the CXTOutBarCtrl to get the area that is visible to the user.
  734. // Parameters:
  735. //     iFolder - [in] Index of the folder to get the range for.
  736. //     iFirst  - [out] Index of the first item that is visible.
  737. //     iLast   - [out] Index of the last item that is visible.
  738. //-----------------------------------------------------------------------
  739. virtual void GetVisibleRange(const int iFolder, int& iFirst, int& iLast);
  740. //-----------------------------------------------------------------------
  741. // Summary:
  742. //     Called by the CXTOutBarCtrl to get the size of the
  743. //     item dragged.
  744. // Parameters:
  745. //     iIndex - Index of the item
  746. //     rect   - Size of the item dragged.
  747. // Returns:
  748. //     Style of last drag item that was rendered.
  749. //-----------------------------------------------------------------------
  750. virtual int GetDragItemRect(const int iIndex, CRect& rect);
  751. //-----------------------------------------------------------------------
  752. // Summary:
  753. //     Called by the CXTOutBarCtrl to get the size of a folder item.
  754. // Parameters:
  755. //     iFolder - Index of parent folder.
  756. //     iIndex  - Index of item.
  757. //     iType   - The pare of the item to get the size for.
  758. // Returns:
  759. //     A CSize object representing the item size.
  760. //-----------------------------------------------------------------------
  761. virtual CSize GetItemSize(const int iFolder, const int iIndex, const RectItem iType);
  762. //-----------------------------------------------------------------------
  763. // Summary:
  764. //     Called by the CXTOutBarCtrl to render folder animation when a new folder is selected.
  765. // Parameters:
  766. //     iFrom - Index of currently selected folder.
  767. //     iTo   - Index of the new folder to select.
  768. //-----------------------------------------------------------------------
  769. virtual void AnimateFolderScroll(const int iFrom, const int iTo);
  770. //-----------------------------------------------------------------------
  771. // Summary:
  772. //     Called by the CXTOutBarCtrl to draw an item highlighted.
  773. // Parameters:
  774. //     pDC      - Pointer to a valid device context.
  775. //     iIndex   - Index of the item to render.
  776. //     bPressed - TRUE if the item is selected.
  777. //-----------------------------------------------------------------------
  778. virtual void HighlightItem(CDC* pDC, const int iIndex, const BOOL bPressed = false);
  779. //-----------------------------------------------------------------------
  780. // Summary:
  781. //     Called by the CXTOutBarCtrl to render a folder highlighted.
  782. // Parameters:
  783. //     pDC    - Pointer to a valid device context.
  784. //     iIndex - Index of the folder to highlight.
  785. //-----------------------------------------------------------------------
  786. virtual void HighlightFolder(CDC* pDC, const int iIndex);
  787. //-----------------------------------------------------------------------
  788. // Summary:
  789. //     Called to determine the item from a given xy coordinate.
  790. // Parameters:
  791. //     point  - [in] xy coordinate to test.
  792. //     iIndex - [out] Index of the item at the given xy coordinates.
  793. // Returns:
  794. //     Item type see HitTestCode.
  795. //-----------------------------------------------------------------------
  796. virtual HitTestCode HitTestEx(const CPoint& point, int& iIndex);
  797. //-----------------------------------------------------------------------
  798. // Summary:
  799. //     Called to determine if the specified item is valid.
  800. // Parameters:
  801. //     iIndex - Index of the item to test.
  802. // Returns:
  803. //     TRUE if the item is valid, otherwise FALSE.
  804. //-----------------------------------------------------------------------
  805. virtual BOOL IsValidItem(const int iIndex) const;
  806. //-----------------------------------------------------------------------
  807. // Summary:
  808. //     Called by the CXTOutBarCtrl to end an item or folder label edit.
  809. // Parameters:
  810. //     pEdit     - Pointer to the edit control.
  811. //     bIsFolder - true if the item edited is a folder.
  812. //-----------------------------------------------------------------------
  813. virtual void EndLabelEdit(CXTOutBarEditItem* pEdit, bool bIsFolder);
  814. //-----------------------------------------------------------------------
  815. // Summary:
  816. //     Called by the CXTOutBarCtrl when an item or folders label changes.
  817. // Parameters:
  818. //     pObi - Pointer to a XT_OUTBAR_INFO structure.
  819. //-----------------------------------------------------------------------
  820. virtual void OnLabelChanged(const XT_OUTBAR_INFO* pObi);
  821. //-----------------------------------------------------------------------
  822. // Summary:
  823. //     Called by the CXTOutBarCtrl to draw an item icon.
  824. // Parameters:
  825. //     pDC        - Pointer to a valid device context.
  826. //     pt         - xy location of the icon to render.
  827. //     pBarItem   - Pointer to a CXTOutBarItem object.
  828. //     pImageList - Pointer to the CXTOutBarCtrl image list.
  829. //-----------------------------------------------------------------------
  830. virtual void DrawItemIcon(CDC* pDC, CPoint pt, CXTOutBarItem* pBarItem, CImageList* pImageList);
  831. //-----------------------------------------------------------------------
  832. // Summary:
  833. //     Called by the CXTOutBarCtrl to draw an items label.
  834. // Parameters:
  835. //     pDC      - Pointer to a valid device context.
  836. //     rc       - Size of text to render.
  837. //     pBarItem - Pointer to a CXTOutBarItem object.
  838. //     nFormat  - Draw text flags, see CXTOutBarCtrlTheme::DrawItemText.
  839. //-----------------------------------------------------------------------
  840. virtual void DrawItemText(CDC* pDC, CRect rc, CXTOutBarItem* pBarItem, UINT nFormat);
  841. //-----------------------------------------------------------------------
  842. // Summary:
  843. //     Called by the CXTOutBarCtrl to render a folder that contains
  844. //     a CWnd object when a new folder is selected.
  845. // Parameters:
  846. //     pWnd    - Pointer to the child of the folder.
  847. //     pDC     - Pointer to a valid device context.
  848. //     nOffset - Amount in pixels to offset from the top.
  849. //-----------------------------------------------------------------------
  850. void DrawPreviewBitmap(CWnd* pWnd, CDC* pDC, int nOffset);
  851. //-----------------------------------------------------------------------
  852. // Summary:
  853. //     This member is called to notify the parent window that an event
  854. //     has occurred in the task panel.
  855. // Parameters:
  856. //     nCode -  Specifies which event has occurred.
  857. //     pobi  - Additional message-specific information.
  858. //-----------------------------------------------------------------------
  859. virtual LRESULT NotifyOwner(UINT nCode, XT_OUTBAR_INFO* pobi);
  860. protected:
  861. //{{AFX_CODEJOCK_PRIVATE
  862. DECLARE_MESSAGE_MAP()
  863. //{{AFX_MSG(CXTOutBarCtrl)
  864. afx_msg void OnTimer(UINT_PTR nIDEvent);
  865. afx_msg void OnPaint();
  866. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM /*lParam*/);
  867. virtual void OnDraw(CDC* pDC);
  868. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  869. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  870. afx_msg void OnMouseLeave();
  871. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  872. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  873. afx_msg void OnSize(UINT nType, int cx, int cy);
  874. afx_msg void OnLargeIcon();
  875. afx_msg void OnUpdateLargeIcon(CCmdUI* pCmdUI);
  876. afx_msg void OnSmallIcon();
  877. afx_msg void OnUpdateSmallIcon(CCmdUI* pCmdUI);
  878. afx_msg void OnRemoveItem();
  879. afx_msg void OnUpdateRemoveItem(CCmdUI* pCmdUI);
  880. afx_msg void OnRenameItem();
  881. afx_msg void OnUpdateRenameItem(CCmdUI* pCmdUI);
  882. afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
  883. afx_msg void OnDestroy();
  884. //}}AFX_MSG
  885. //}}AFX_CODEJOCK_PRIVATE
  886. private:
  887. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  888. BOOL CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, LPVOID lpParam = NULL);
  889. protected:
  890. int m_nFolderHeight;           // Size in pixels of the folder caption bar.
  891. int m_nSelFolder;              // Index of the currently selected folder.
  892. int m_nFolderHilighted;        // Index of the currently highlighted folder.
  893. int m_nItemHilighted;          // Index of the currently highlighted item.
  894. int m_nLastFolderSelected;     // Index of the last folder that was selected.
  895. int m_nLastItemSelected;       // Index of the last item that was selected.
  896. int m_nFirstItem;              // Index of the first visible item.
  897. int m_nIconSpacingLarge;       // Amount in pixels of the gap between large icons.
  898. int m_nIconSpacingSmall;       // Amount in pixels of the gap between small icons.
  899. int m_nHitInternal1;           // Used internally to test folder and item indexes.
  900. int m_nHitInternal2;           // Used internally to test folder and item indexes.
  901. int m_nLastDragItemDraw;       // Insertion index for drag and drop operations.
  902. int m_nLastDragItemDrawType;   // Style of last drag item that was rendered.
  903. int m_nSelAnimCount;           // Selected item animation sequence count
  904. int m_nSelAnimTiming;          // Specifies the time in milliseconds that the selected item will animate.
  905. int m_nAnimationTickCount;     // Specifies the time in milliseconds between animation.
  906. CPen m_penBlack;               // Pen used to render drag arrow.
  907. BOOL m_bUpArrow;               // TRUE when the up scroll arrow is displayed.
  908. BOOL m_bDownArrow;             // TRUE when the down scroll arrow is displayed.
  909. BOOL m_bUpPressed;             // TRUE when the up scroll arrow is selected.
  910. BOOL m_bDownPressed;           // TRUE when the down scroll arrow is selected.
  911. BOOL m_bIconPressed;           // TRUE when the selected item's icon should be rendered selected.
  912. BOOL m_bLooping;               // TRUE when scrolling to continue iteration.
  913. BOOL m_bPressedHighlight;      // TRUE when the selected item should be rendered.
  914. CFont m_font;                  // Font used by the outlook bar.
  915. DWORD m_dwFlags;               // Style for the Outlook bar.
  916. CRect m_rcUpArrow;             // Size and location of the up scroll arrow.
  917. CRect m_rcDownArrow;           // Size and location of the down scroll arrow.
  918. CSize m_sizeOffset;            // Amount in pixels of the gap between an item icon and text.
  919. CSize m_sizeMargin;            // Amount in pixels of the gap between the border and item text and icon.
  920. CPtrArray m_arFolder;          // Array of folders added to the outlook bar.
  921. CImageList* m_pLargeImageList; // Points to the large image list for the outlook bar.
  922. CImageList* m_pSmallImageList; // Points to the small image list for the outlook bar.
  923. friend class CXTOutBarEditItem;
  924. };
  925. //////////////////////////////////////////////////////////////////////
  926. AFX_INLINE int CXTOutBarCtrl::GetCurSel() {
  927. return m_nItemHilighted;
  928. }
  929. AFX_INLINE void CXTOutBarCtrl::SetCurSel(int iItem, const BOOL bPressed/*=false*/) {
  930. HighlightItem(NULL, iItem, bPressed);
  931. }
  932. AFX_INLINE BOOL CXTOutBarCtrl::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  933. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  934. }
  935. AFX_INLINE BOOL CXTOutBarCtrl::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, LPVOID lpParam) {
  936. return CWnd::CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, lpParam);
  937. }
  938. // ----------------------------------------------------------------------
  939. // Summary:
  940. //     CXTOutBarItem is a stand alone helper class. It is used by the
  941. //     CXTOutBarCtrl to maintain information about each folder item
  942. //     specified in the Outlook bar control.
  943. // ----------------------------------------------------------------------
  944. class _XTP_EXT_CLASS CXTOutBarItem
  945. {
  946. public:
  947. // --------------------------------------------------------------------
  948. // Summary:
  949. //     Constructs a CXTOutBarItem object
  950. // Parameters:
  951. //     lpszName -     [in] A NULL terminated string that represents the
  952. //                    item name.
  953. // nImageIndex -  [in] An index into the folders image list.
  954. // dwData -       [in] User item data (lParam).
  955. // --------------------------------------------------------------------
  956. CXTOutBarItem(LPCTSTR lpszName, const int nImageIndex, DWORD dwData);
  957. // ------------------------------------------------------------
  958. // Summary:
  959. //     Destroys a CXTOutBarItem object, handles cleanup and
  960. //     deallocation
  961. // ------------------------------------------------------------
  962. virtual ~CXTOutBarItem();
  963. //-----------------------------------------------------------------------
  964. // Summary:
  965. //     Call this member function to retrieve the zero-based index of the folder
  966. //     item.
  967. // Returns:
  968. //     An integer value that represents the zero-based index of the folder item.
  969. //-----------------------------------------------------------------------
  970. int GetIndex();
  971. // ----------------------------------------------------------------
  972. // Summary:
  973. //     Call this member function to set the zero-based index of the
  974. //     folder item.
  975. // Parameters:
  976. //     iIndex -  [in] New index of the folder item.
  977. // ----------------------------------------------------------------
  978. void SetIndex(int iIndex);
  979. //-----------------------------------------------------------------------
  980. // Summary:
  981. //     Call this member function to return the user specified item data (lParam)
  982. //     for the folder item.
  983. // Returns:
  984. //     A DWORD value that represents the user data.
  985. //-----------------------------------------------------------------------
  986. DWORD GetData();
  987. // --------------------------------------------------------------------------
  988. // Summary:
  989. //     Call this member function to set a user data (lParam) value for
  990. //     the folder item.
  991. // Parameters:
  992. //     dwData -  [in] Specifies the user data (lparam) value to be associated
  993. //               with the folder item.
  994. // --------------------------------------------------------------------------
  995. void SetData(DWORD dwData);
  996. //-----------------------------------------------------------------------
  997. // Summary:
  998. //     Call this member function to retrieve the label of the folder item.
  999. // Returns:
  1000. //     A CString object that contains the folder item label.
  1001. //-----------------------------------------------------------------------
  1002. CString GetName();
  1003. // ---------------------------------------------------------------------
  1004. // Summary:
  1005. //     Call this member function to set the label of the folder item.
  1006. // Parameters:
  1007. //     strName -  [in] A NULL terminated string that represents the item
  1008. //                label.
  1009. // ---------------------------------------------------------------------
  1010. void SetName(LPCTSTR strName);
  1011. // --------------------------------------------------------------
  1012. // Summary:
  1013. //     Call this member function to set the items selected state.
  1014. // Parameters:
  1015. //     bSelected -  [in] true to set the item state to selected.
  1016. // --------------------------------------------------------------
  1017. void SelectItem(bool bSelected);
  1018. //-----------------------------------------------------------------------
  1019. // Summary:
  1020. //     Call this member function to see if the item is selected.
  1021. // Returns:
  1022. //     true if the item is selected, otherwise returns false.
  1023. //-----------------------------------------------------------------------
  1024. bool IsSelected();
  1025. // -----------------------------------------------------------------
  1026. // Summary:
  1027. //     Call this member function to toggle the enabled state for the
  1028. //     outlook bar item.
  1029. // Parameters:
  1030. //     bEnable -  [in] true to enable, false to disable.
  1031. // -----------------------------------------------------------------
  1032. void EnableItem(bool bEnable);
  1033. //-----------------------------------------------------------------------
  1034. // Summary:
  1035. //     Call this member function to determine if the item is enabled.
  1036. // Returns:
  1037. //     true if the item is enabled, otherwise returns false.
  1038. //-----------------------------------------------------------------------
  1039. bool IsEnabled();
  1040. protected:
  1041. int     m_nIndex;       // Item index.
  1042. bool    m_bEnabled;     // true if the icon is enabled.
  1043. bool    m_bSelected;    // true if selected.
  1044. DWORD   m_dwData;       // User data.
  1045. CString m_strName;      // label of the folder item.
  1046. friend class CXTOutBarCtrl;
  1047. };
  1048. //////////////////////////////////////////////////////////////////////
  1049. AFX_INLINE void CXTOutBarItem::SelectItem(bool bSelected) {
  1050. m_bSelected = bSelected;
  1051. }
  1052. AFX_INLINE bool CXTOutBarItem::IsSelected() {
  1053. return m_bSelected;
  1054. }
  1055. AFX_INLINE void CXTOutBarItem::EnableItem(bool bEnable) {
  1056. m_bEnabled = bEnable;
  1057. }
  1058. AFX_INLINE bool CXTOutBarItem::IsEnabled() {
  1059. return m_bEnabled;
  1060. }
  1061. // --------------------------------------------------------------------
  1062. // Summary:
  1063. //     CXTOutBarFolder is a stand alone helper class. It is used by
  1064. //     the CXTOutBarCtrl to maintain information about each folder
  1065. //     specified in the Outlook bar control.
  1066. // --------------------------------------------------------------------
  1067. class _XTP_EXT_CLASS CXTOutBarFolder
  1068. {
  1069. public:
  1070. // ----------------------------------------------------------------------
  1071. // Summary:
  1072. //     Constructs a CXTOutBarFolder object.
  1073. // Parameters:
  1074. //     lpszName -  [in] A NULL terminated string that represents the item
  1075. //                 name.
  1076. // dwData -    [in] User defined item data (lParam).
  1077. // pControl -  [in] Pointer to the parent CXTOutBarCtrl object.
  1078. // Remarks:
  1079. //     The CXTOutBarFolder object is constructed by the CXTOutBarCtrl to
  1080. //     when a new folder to the control.
  1081. // See Also:
  1082. //     CXTOutBarCtrl::AddFolder, CXTOutBarCtrl::AddFolderBar
  1083. // ----------------------------------------------------------------------
  1084. CXTOutBarFolder(LPCTSTR lpszName, DWORD dwData, CXTOutBarCtrl* pControl);
  1085. // --------------------------------------------------------------
  1086. // Summary:
  1087. //     Destroys a CXTOutBarFolder object, handles cleanup and
  1088. //     deallocation
  1089. // --------------------------------------------------------------
  1090. virtual ~CXTOutBarFolder();
  1091. // ---------------------------------------------------------------------
  1092. // Summary:
  1093. //     Call this member function to retrieve the number of folders found
  1094. //     in the Outlook bar.
  1095. // Returns:
  1096. //     The number of folders in the Outlook bar.
  1097. // ---------------------------------------------------------------------
  1098. int GetItemCount();
  1099. // --------------------------------------------------------------------
  1100. // Summary:
  1101. //     Call this member function to insert an item into the Outlook bar
  1102. //     folder.
  1103. // Parameters:
  1104. //     iIndex -    [in] Index of the item.
  1105. // lpszName -  [in] A NULL terminated string that represents the
  1106. //                 label of the item.
  1107. // nImage -    [in] Index into the folder's image list.
  1108. // dwData -    [in] User item data (lParam).
  1109. // Returns:
  1110. //     An integer value.
  1111. // --------------------------------------------------------------------
  1112. int InsertItem(int iIndex, LPCTSTR lpszName, const int nImage, const DWORD dwData);
  1113. // ---------------------------------------------------------------------
  1114. // Summary:
  1115. //     Retrieves a pointer to a CXTOutBarItem at the given index.
  1116. // Parameters:
  1117. //     iIndex -  [in] Index of the folder item to retrieve.
  1118. // Remarks:
  1119. //     Call this member function to retrieve a pointer to the CXTOutBarItem
  1120. //     at the specified index.
  1121. // Returns:
  1122. //     A pointer to a CXTOutBarItem object if successful, otherwise NULL.
  1123. // ---------------------------------------------------------------------
  1124. CXTOutBarItem* GetItemAt(int iIndex);
  1125. // -----------------------------------------------------------------------
  1126. // Summary:
  1127. //     Call this member function to insert a folder item into the
  1128. //     location specified by 'iIndex'.
  1129. // Parameters:
  1130. //     iIndex -    [in] Zero-based index of where to insert the new item.
  1131. // pBarItem -  [in] Points to a valid CXTOutBarItem object.
  1132. // -----------------------------------------------------------------------
  1133. void InsertItemAt(int iIndex, CXTOutBarItem* pBarItem);
  1134. // -------------------------------------------------------------------
  1135. // Summary:
  1136. //     Call this member function to remove the specified item from the
  1137. //     folder.
  1138. // Parameters:
  1139. //     iIndex -  Index of the item to remove.
  1140. // Returns:
  1141. //     A pointer to the removed item.
  1142. // -------------------------------------------------------------------
  1143. CXTOutBarItem* RemoveItemAt(int iIndex);
  1144. //-----------------------------------------------------------------------
  1145. // Summary:
  1146. //     Call this member function to return the label of the folder item.
  1147. // Returns:
  1148. //     A CString object.
  1149. //-----------------------------------------------------------------------
  1150. CString GetName();
  1151. // -------------------------------------------------------------------------
  1152. // Summary:
  1153. //     Call this member function to set the label for the folder item.
  1154. // Parameters:
  1155. //     strName -  [in] A NULL terminated string that represents the folder's
  1156. //                new label.
  1157. // -------------------------------------------------------------------------
  1158. void SetName(LPCTSTR strName);
  1159. // ---------------------------------------------------------------------
  1160. // Summary:
  1161. //     Call this member function to return the user defined item data
  1162. //     (lParam) for the folder.
  1163. // Returns:
  1164. //     A DWORD value that represents the item data if defined, otherwise
  1165. //     NULL.
  1166. // ---------------------------------------------------------------------
  1167. DWORD GetData();
  1168. // --------------------------------------------------------------------
  1169. // Summary:
  1170. //     Call this member function to set the user item data (lParam) for
  1171. //     the folder.
  1172. // Parameters:
  1173. //     dwData -  [in] User item data (lParam).
  1174. // --------------------------------------------------------------------
  1175. void SetData(DWORD dwData);
  1176. //-----------------------------------------------------------------------
  1177. // Summary:
  1178. //     Call this member function to return a pointer to the large image list
  1179. //     for the folder.
  1180. // Returns:
  1181. //     A pointer to CImageList object if successful, otherwise returns NULL.
  1182. //-----------------------------------------------------------------------
  1183. CImageList* GetLargeImageList();
  1184. // -----------------------------------------------------------------
  1185. // Summary:
  1186. //     Call this member function to set the large image list for the
  1187. //     folder.
  1188. // Parameters:
  1189. //     pLargeList -  [in] Points to a CImageList object.
  1190. // -----------------------------------------------------------------
  1191. void SetLargeImageList(CImageList* pLargeList);
  1192. //-----------------------------------------------------------------------
  1193. // Summary:
  1194. //     Call this member function to return a pointer to the small image list
  1195. //     for the folder.
  1196. // Returns:
  1197. //     A CImageList object if successful, otherwise returns NULL.
  1198. //-----------------------------------------------------------------------
  1199. CImageList* GetSmallImageList();
  1200. // -----------------------------------------------------------------
  1201. // Summary:
  1202. //     Call this member function to set the small image list for the
  1203. //     folder.
  1204. // Parameters:
  1205. //     pSmallList -  [in] Points to a CImageList object.
  1206. // -----------------------------------------------------------------
  1207. void SetSmallImageList(CImageList* pSmallList);
  1208. // ----------------------------------------------------------------------
  1209. // Summary:
  1210. //     Retrieves a pointer to the child window.
  1211. // Remarks:
  1212. //     Call this member function to retrieve a CWnd pointer to the child
  1213. //     object that is associated with this folder item.
  1214. // Returns:
  1215. //     A CWnd pointer to the child associated with the folder, or NULL if
  1216. //     no objects were found.
  1217. // See Also:
  1218. //     SetChild, CXTOutBarCtrl::AddFolderBar
  1219. // ----------------------------------------------------------------------
  1220. CWnd* GetChild();
  1221. // --------------------------------------------------------------------
  1222. // Summary:
  1223. //     Call this member function to set the CWnd child to be associated
  1224. //     with this folder item.
  1225. // Parameters:
  1226. //     pChild -  [in] Points to a valid CWnd object.
  1227. // --------------------------------------------------------------------
  1228. void SetChild(CWnd* pChild);
  1229. // --------------------------------------------------------------------
  1230. // Summary:
  1231. //     Call this member function to set the currently selected item for
  1232. //     the folder.
  1233. // Parameters:
  1234. //     iItem -  [in] Index of the item to select
  1235. // --------------------------------------------------------------------
  1236. void SetSelItem(int iItem);
  1237. //-----------------------------------------------------------------------
  1238. // Summary:
  1239. //     Call this member function to return a pointer to the currently selected
  1240. //     item.
  1241. // Returns:
  1242. //     A pointer to a CXTOutBarItem object if successful, otherwise returns NULL.
  1243. //-----------------------------------------------------------------------
  1244. CXTOutBarItem* GetSelItem();
  1245. //-----------------------------------------------------------------------
  1246. // Summary:
  1247. //     Call this member function to return the index for the currently selected
  1248. //     item.
  1249. // Returns:
  1250. //     The index of the currently selected item if successful, otherwise returns -1.
  1251. //-----------------------------------------------------------------------
  1252. int GetSelIndex();
  1253. // ----------------------------------------------------------------------
  1254. // Summary:
  1255. //     Retrieves a pointer to the parent CXTOutBarCtrl window.
  1256. // Remarks:
  1257. //     Call this member to retrieve a pointer to the folder's CXTOutBarCtrl
  1258. //     parent window.
  1259. // Returns:
  1260. //     A pointer to a CXTOutBarCtrl object if successful, otherwise NULL.
  1261. // ----------------------------------------------------------------------
  1262. CXTOutBarCtrl* GetControl();
  1263. protected:
  1264. BOOL                            m_bSmallIcons;  // TRUE to use small icons.
  1265. CWnd*                           m_pChild;       // Child window pointer.
  1266. DWORD                           m_dwData;       // Application data.
  1267. CString                         m_strName;      // Folder label.
  1268. CImageList*                     m_pLargeList;   // Image list for large icons.
  1269. CImageList*                     m_pSmallList;   // Image list for small icons.
  1270. CList<CXTOutBarItem*, CXTOutBarItem*> m_barItems;     // Folder items.
  1271. CXTOutBarCtrl*                  m_pControl;     // Pointer to the parent CXTOutBarCtrl object.
  1272. friend class CXTOutBarCtrl;
  1273. };
  1274. //////////////////////////////////////////////////////////////////////
  1275. AFX_INLINE void CXTOutBarCtrl::SetFontX(CFont* pFont) {
  1276. ASSERT_VALID(pFont); LOGFONT lf; pFont->GetLogFont(&lf); m_font.DeleteObject(); m_font.CreateFontIndirect(&lf);
  1277. }
  1278. AFX_INLINE CFont* CXTOutBarCtrl::GetFontX() {
  1279. return &m_font;
  1280. }
  1281. AFX_INLINE void CXTOutBarCtrl::SetAnimationTickCount(const long lValue) {
  1282. m_nAnimationTickCount = lValue;
  1283. }
  1284. AFX_INLINE int CXTOutBarCtrl::GetAnimationTickCount() {
  1285. return m_nAnimationTickCount;
  1286. }
  1287. AFX_INLINE CXTOutBarFolder* CXTOutBarCtrl::GetBarFolder(const int iFolder) {
  1288. return (CXTOutBarFolder*)m_arFolder.GetAt(iFolder);
  1289. }
  1290. AFX_INLINE CXTOutBarItem* CXTOutBarCtrl::GetBarFolderItem(const int iFolder, const int iIndex) {
  1291. return GetBarFolder(iFolder)->GetItemAt(iIndex);
  1292. }
  1293. //////////////////////////////////////////////////////////////////////
  1294. AFX_INLINE int CXTOutBarItem::GetIndex() {
  1295. return m_nIndex;
  1296. }
  1297. AFX_INLINE void CXTOutBarItem::SetIndex(int iIndex) {
  1298. m_nIndex = iIndex;
  1299. }
  1300. AFX_INLINE DWORD CXTOutBarItem::GetData() {
  1301. return m_dwData;
  1302. }
  1303. AFX_INLINE void CXTOutBarItem::SetData(DWORD dwData) {
  1304. m_dwData = dwData;
  1305. }
  1306. AFX_INLINE CString CXTOutBarItem::GetName() {
  1307. return m_strName;
  1308. }
  1309. AFX_INLINE void CXTOutBarItem::SetName(LPCTSTR strName) {
  1310. m_strName = strName;
  1311. }
  1312. //////////////////////////////////////////////////////////////////////
  1313. AFX_INLINE int CXTOutBarFolder::GetItemCount() {
  1314. return (int)m_barItems.GetCount();
  1315. }
  1316. AFX_INLINE CString CXTOutBarFolder::GetName() {
  1317. return m_strName;
  1318. }
  1319. AFX_INLINE void CXTOutBarFolder::SetName(LPCTSTR strName) {
  1320. m_strName = strName;
  1321. }
  1322. AFX_INLINE DWORD CXTOutBarFolder::GetData() {
  1323. return m_dwData;
  1324. }
  1325. AFX_INLINE void CXTOutBarFolder::SetData(DWORD dwData) {
  1326. m_dwData = dwData;
  1327. }
  1328. AFX_INLINE CImageList* CXTOutBarFolder::GetLargeImageList() {
  1329. return m_pLargeList;
  1330. }
  1331. AFX_INLINE void CXTOutBarFolder::SetLargeImageList(CImageList* pLargeList) {
  1332. m_pLargeList = pLargeList;
  1333. }
  1334. AFX_INLINE CImageList* CXTOutBarFolder::GetSmallImageList() {
  1335. return m_pSmallList;
  1336. }
  1337. AFX_INLINE void CXTOutBarFolder::SetSmallImageList(CImageList* pSmallList) {
  1338. m_pSmallList = pSmallList;
  1339. }
  1340. AFX_INLINE CWnd* CXTOutBarFolder::GetChild() {
  1341. return m_pChild;
  1342. }
  1343. AFX_INLINE void CXTOutBarFolder::SetChild(CWnd* pChild) {
  1344. m_pChild = pChild;
  1345. }
  1346. AFX_INLINE CXTOutBarCtrl* CXTOutBarFolder::GetControl() {
  1347. return m_pControl;
  1348. }
  1349. //////////////////////////////////////////////////////////////////////
  1350. //===========================================================================
  1351. // Summary:
  1352. //     CXTOutBarEditItem is a helper class derived from CXTEdit. It is used by
  1353. //     CXTOutBarCtrl, an Outlook like control, to create an in-place edit box
  1354. //     that is used to modify a folder or an item within the control.
  1355. //===========================================================================
  1356. class _XTP_EXT_CLASS CXTOutBarEditItem : public CXTEdit
  1357. {
  1358. DECLARE_DYNAMIC(CXTOutBarEditItem)
  1359. public:
  1360. //-----------------------------------------------------------------------
  1361. // Summary:
  1362. //     Constructs a CXTOutBarEditItem object
  1363. //-----------------------------------------------------------------------
  1364. CXTOutBarEditItem();
  1365. //-----------------------------------------------------------------------
  1366. // Summary:
  1367. //     Destroys a CXTOutBarEditItem object, handles cleanup and deallocation
  1368. //-----------------------------------------------------------------------
  1369. virtual ~CXTOutBarEditItem();
  1370. protected:
  1371. int             m_iIndex;       // Index of the folder or item.
  1372. bool            m_bEscapeKey;   // true if the escape key was pressed.
  1373. bool            m_bSmallIcons;  // true if the folder is using small icons.
  1374. bool            m_bIsFolder;    // true if the edit box is for a folder.
  1375. CRect           m_rcOriginal;   // Original size of the edit box when it was first created.
  1376. CString         m_strText;      // Original string of the edit box when it was first created, and the new text on edit completion.
  1377. CXTOutBarCtrl*  m_pParentWnd;   // Parent Outlook bar control.
  1378. public:
  1379. //-----------------------------------------------------------------------
  1380. // Summary:
  1381. //     Call this member function to return the index of the folder or item
  1382. //     currently being edited.
  1383. // Returns:
  1384. //     An integer value that represents the index of the folder or item.
  1385. //-----------------------------------------------------------------------
  1386. int GetIndex() const;
  1387. //-----------------------------------------------------------------------
  1388. // Summary:
  1389. //     Call this member function to return the text associated with this edit
  1390. //     control.
  1391. // Returns:
  1392. //     A CString object that represents the text originally
  1393. //     set for the edit control. If called after the edit is destroyed, it
  1394. //     returns the modified text value.
  1395. //-----------------------------------------------------------------------
  1396. CString GetText() const;
  1397. //-----------------------------------------------------------------------
  1398. // Summary:
  1399. //     The Outlook bar control calls this member to create an in-place edit
  1400. //     control.
  1401. // Parameters:
  1402. //     lpszText    - NULL terminated string to be displayed in the edit control.
  1403. //     dwStyle     - Window style for the edit control.
  1404. //     rect        - Size of the edit control.
  1405. //     pParentWnd  - Owner window.
  1406. //     nID         - Control ID.
  1407. //     nIndex      - Folder or item index.
  1408. //     bIsFolder   - true if the edit is for a folder item.
  1409. //     bSmallIcons - true if the parent folder is displaying small icons.
  1410. // Returns:
  1411. //     TRUE if successful, otherwise returns FALSE.
  1412. //-----------------------------------------------------------------------
  1413. virtual BOOL Create(LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, UINT nIndex, bool bIsFolder, bool bSmallIcons);
  1414. //{{AFX_CODEJOCK_PRIVATE
  1415. //{{AFX_VIRTUAL(CXTOutBarEditItem)
  1416. public:
  1417. virtual BOOL PreTranslateMessage(MSG* pMsg);
  1418. protected:
  1419. virtual void PostNcDestroy();
  1420. //}}AFX_VIRTUAL
  1421. //}}AFX_CODEJOCK_PRIVATE
  1422. protected:
  1423. //{{AFX_CODEJOCK_PRIVATE
  1424. //{{AFX_MSG(CXTOutBarEditItem)
  1425. afx_msg void OnKillFocus(CWnd* pNewWnd);
  1426. afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  1427. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  1428. //}}AFX_MSG
  1429. DECLARE_MESSAGE_MAP()
  1430. //}}AFX_CODEJOCK_PRIVATE
  1431. private:
  1432. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  1433. BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
  1434. };
  1435. //////////////////////////////////////////////////////////////////////
  1436. AFX_INLINE int CXTOutBarEditItem::GetIndex() const {
  1437. return m_iIndex;
  1438. }
  1439. AFX_INLINE CString CXTOutBarEditItem::GetText() const {
  1440. return m_strText;
  1441. }
  1442. AFX_INLINE BOOL CXTOutBarEditItem::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  1443. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  1444. }
  1445. AFX_INLINE BOOL CXTOutBarEditItem::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) {
  1446. return CEdit::Create(dwStyle, rect, pParentWnd, nID);
  1447. }
  1448. //===========================================================================
  1449. // Summary:
  1450. //     CXTToolBox is a CXTOutBarCtrl derived class. It is used to create a
  1451. //     toolbox control similar to the toolbox control seen in VisualStudio.NET.
  1452. //===========================================================================
  1453. class _XTP_EXT_CLASS CXTToolBox : public CXTOutBarCtrl
  1454. {
  1455. DECLARE_DYNCREATE(CXTToolBox)
  1456. public:
  1457. //-----------------------------------------------------------------------
  1458. // Summary:
  1459. //     Constructs a CXTToolBox object
  1460. //-----------------------------------------------------------------------
  1461. CXTToolBox();
  1462. //-----------------------------------------------------------------------
  1463. // Summary:
  1464. //     Destroys a CXTToolBox object, handles cleanup and deallocation
  1465. //-----------------------------------------------------------------------
  1466. virtual ~CXTToolBox();
  1467. protected:
  1468. int  m_iFirst;      // Index of the first visible item.
  1469. int  m_iLast;       // Index of the last visible item.
  1470. bool m_bAnimating;  // true if the folder selection is changing.
  1471. public:
  1472. //-----------------------------------------------------------------------
  1473. // Summary:
  1474. //     Call this member function to create the toolbox control.
  1475. // Parameters:
  1476. //     dwExStyle  - Extended style for the toolbox, such as WS_EX_STATICEDGE. It can be
  1477. //                  NULL.
  1478. //     dwStyle    - Style for the toolbox. It usually includes the WS_CHILD | WS_VISIBLE
  1479. //                  flags.
  1480. //     rect       - Size of the toolbox.
  1481. //     pParentWnd - Parent of the control.
  1482. //     nID        - Identifier of the toolbox control.
  1483. //     dwFlag     - Specifies the style flags for the control. See CXTOutBarCtrl::ModifyFlag
  1484. //                  for a list of available styles.
  1485. // Returns:
  1486. //     TRUE if successful, otherwise returns FALSE.
  1487. //-----------------------------------------------------------------------
  1488. virtual BOOL CreateEx(DWORD dwExStyle, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, const DWORD dwFlag = OBS_XT_DEFAULT);
  1489. //-----------------------------------------------------------------------
  1490. // Summary:
  1491. //     Call this member function to retrieve the size of the icon for the
  1492. //     specified item.
  1493. // Parameters:
  1494. //     iFolder - Index of the folder where the item is located.
  1495. //     iIndex  - Index of the item.
  1496. //     rect    - Address of a CRect object that will receive the icon size.
  1497. //     pInsideRect - Pointer to a CRect object that represents the size
  1498. //                   of the client area for the Outlook bar. If NULL
  1499. //                   GetInsideRect will be used to determine the client
  1500. //                   area size.
  1501. //-----------------------------------------------------------------------
  1502. virtual void GetIconRect(const int iFolder, const int iIndex, CRect& rect, CRect* pInsideRect = NULL);
  1503. //-----------------------------------------------------------------------
  1504. // Summary:
  1505. //     Call this member function to retrieve the size of the specified item.
  1506. //     The size includes the area occupied by the item's label and icon.
  1507. // Parameters:
  1508. //     iFolder - Index of the folder where the item is located.
  1509. //     iIndex  - Index of the item.
  1510. //     rect    - Address of a CRect object that will receive the item size.
  1511. //     pInsideRect - Pointer to a CRect object that represents the size
  1512. //                   of the client area for the Outlook bar. If NULL
  1513. //                   GetInsideRect will be used to determine the client
  1514. //                   area size.
  1515. //-----------------------------------------------------------------------
  1516. virtual void GetItemRect(const int iFolder, const int iIndex, CRect& rect, CRect* pInsideRect = NULL);
  1517. //-----------------------------------------------------------------------
  1518. // Summary:
  1519. //     This member function will set the selected folder for the toolbox.
  1520. // Parameters:
  1521. //     iIndex - Index of the new selected folder.
  1522. //-----------------------------------------------------------------------
  1523. virtual void SetSelFolder(const int iIndex);
  1524. protected:
  1525. //{{AFX_CODEJOCK_PRIVATE
  1526. //{{AFX_VIRTUAL(CXTToolBox)
  1527. //}}AFX_VIRTUAL
  1528. //}}AFX_CODEJOCK_PRIVATE
  1529. //-----------------------------------------------------------------------
  1530. // Summary:
  1531. //     Called by the CXTToolBox to render an item's icon.
  1532. // Parameters:
  1533. //     pDC      - Pointer to a valid device context.
  1534. //     iIcon    - Index of the icon to render.
  1535. //     iFolder  - Index of the parent folder.
  1536. //     bHilight - true if the icon is highlighted.
  1537. //-----------------------------------------------------------------------
  1538. virtual void DrawIcon(CDC* pDC, int iIcon, int iFolder, bool bHilight);
  1539. //-----------------------------------------------------------------------
  1540. // Summary:
  1541. //     Called by the CXTToolBox to draw a folder item.
  1542. // Parameters:
  1543. //     pDC        - Pointer to a valid device context.
  1544. //     iFolder    - Index of the parent folder.
  1545. //     rc         - Size of the area to render.
  1546. //     iIndex     - Index of the item to render.
  1547. //     bOnlyImage - TRUE if only the image is to be drawn.
  1548. //-----------------------------------------------------------------------
  1549. virtual void DrawItem(CDC* pDC, const int iFolder, CRect rc, const int iIndex, const BOOL bOnlyImage);
  1550. //-----------------------------------------------------------------------
  1551. // Summary:
  1552. //     Called by the CXTToolBox to render a folder.
  1553. // Parameters:
  1554. //     pDC      - Pointer to a valid device context.
  1555. //     iIndex   - Index of the folder to render.
  1556. //     rect     - Size of the area to render.
  1557. //     eHilight - Current mouse over state.
  1558. // See Also: XTMouseState
  1559. //-----------------------------------------------------------------------
  1560. virtual void DrawFolder(CDC* pDC, const int iIndex, CRect rect, const XTMouseState eHilight);
  1561. //-----------------------------------------------------------------------
  1562. // Summary:
  1563. //     Called by the CXTToolBox to draw the up or down scroll button.
  1564. // Parameters:
  1565. //     pDC    - Pointer to a valid device context.
  1566. //     rect   - Size of area to render.
  1567. //     uType  - Specifies the type of frame control to draw. See the
  1568. //              uType parameter in DrawFrameControl in the Platform SDK for
  1569. //              a list of this parameter's possible values.
  1570. //     uState - Specifies the initial state of the frame control.
  1571. //              Can be one or more of the values described for the uState parameter
  1572. //              in DrawFrameControl in the Platform SDK. Use the nState value
  1573. //              DFCS_ADJUSTRECT to adjust the bounding rectangle to exclude
  1574. //              the surrounding edge of the push button.
  1575. //-----------------------------------------------------------------------
  1576. virtual void DrawScrollButton(CDC* pDC, CRect rect, UINT uType, UINT uState);
  1577. //{{AFX_CODEJOCK_PRIVATE
  1578. //{{AFX_MSG(CXTToolBox)
  1579. afx_msg void OnPaint();
  1580. virtual void OnDraw(CDC* pDC);
  1581. afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
  1582. //}}AFX_MSG
  1583. DECLARE_MESSAGE_MAP()
  1584. //}}AFX_CODEJOCK_PRIVATE
  1585. private:
  1586. BOOL CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, LPVOID lpParam = NULL);
  1587. };
  1588. AFX_INLINE BOOL CXTToolBox::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, LPVOID lpParam) {
  1589. return CWnd::CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, lpParam);
  1590. }
  1591. #endif // #if !defined(__XTOUTBARCTRL_H__)