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

对话框与窗口

开发平台:

Visual C++

  1. // XTMenuListBox.h interface for the CXTMenuListBox 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(__XTMENULISTBOX_H__)
  22. #define __XTMENULISTBOX_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "XTThemeManager.h"
  28. class CXTMenuListBoxTheme;
  29. class CXTPImageManagerIcon;
  30. //===========================================================================
  31. // Summary:
  32. //     CCXTMenuListBox is a CListBox derived class. It is used to implement
  33. //     an Outlook bar style control. It can only be used with the LBS_OWNERDRAWVARIABLE
  34. //     style bit set. This is a simpler version of CXTOutBarCtrl and does not
  35. //     allow for shortcut folders.
  36. //===========================================================================
  37. class _XTP_EXT_CLASS CXTMenuListBox : public CListBox, public CXTThemeManagerStyleHostBase
  38. {
  39. DECLARE_DYNAMIC(CXTMenuListBox)
  40. DECLARE_THEME_HOST(CXTMenuListBox)
  41. DECLARE_THEME_REFRESH(CXTMenuListBox)
  42. public:
  43. // ------------------------------------------------------------------
  44. // Summary:
  45. //     CONTENT_ITEM structure is used by the CXTMenuListBox
  46. //     class to maintain information about a particular menu item.
  47. // See Also:
  48. //     CXTMenuListBox
  49. // ------------------------------------------------------------------
  50. struct CONTENT_ITEM
  51. {
  52. //{{AFX_CODEJOCK_PRIVATE
  53. CONTENT_ITEM();
  54. ~CONTENT_ITEM();
  55. //}}AFX_CODEJOCK_PRIVATE
  56. int           m_nIndex;   // Zero-based index for the menu item.
  57. BOOL          m_bEnabled; // TRUE if the menu item is enabled.
  58. CString       m_strText;  // Text label for the menu item.
  59. CXTPImageManagerIcon* m_pIcon;    // Icon handle for the menu item.
  60. };
  61. // ----------------------------------------------------------------------
  62. // Summary:
  63. //     List for maintaining CONTENT_ITEM structures.
  64. // Remarks:
  65. //     CList definition used by the CXTMenuListBox class to maintain
  66. //     a list of CONTENT_ITEM structures representing each menu item
  67. //     defined for the menu list box control.
  68. // See Also:
  69. //     CXTMenuListBox, CXTMenuListBox::InsertMenuItem, CONTENT_ITEM
  70. // ----------------------------------------------------------------------
  71. typedef CList<CONTENT_ITEM*, CONTENT_ITEM*> CContentItemList;
  72. public:
  73. //-----------------------------------------------------------------------
  74. // Summary:
  75. //     Constructs a CXTMenuListBox object
  76. //-----------------------------------------------------------------------
  77. CXTMenuListBox();
  78. //-----------------------------------------------------------------------
  79. // Summary:
  80. //     Destroys a CXTMenuListBox object, handles cleanup and deallocation
  81. //-----------------------------------------------------------------------
  82. virtual ~CXTMenuListBox();
  83. public:
  84. //-----------------------------------------------------------------------
  85. // Summary:
  86. //     This member function creates an Outlook Bar control.
  87. // Parameters:
  88. //     dwStyle    - Window style.
  89. //     rect       - The size and position of the window, in client coordinates of
  90. //                  'pParentWnd'.
  91. //     pParentWnd - The parent window.
  92. //     nID        - The ID of the child window.
  93. // Returns:
  94. //     Nonzero if successful, otherwise returns zero.
  95. //-----------------------------------------------------------------------
  96. virtual BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
  97. //-----------------------------------------------------------------------
  98. // Summary:
  99. //     Call this member function to set the text and background colors for
  100. //     the Outlook bar.
  101. // Parameters:
  102. //     clrText     - RGB value representing the text color.
  103. //     clrBack     - RGB value representing the background color.
  104. //     clrBackDark - RGB value representing the dark background color. If defined the
  105. //                   background will be drawn with a gradient effect from crBack to crBackDark.
  106. //-----------------------------------------------------------------------
  107. void SetColors(COLORREF clrText, COLORREF clrBack, COLORREF clrBackDark = COLORREF_NULL);
  108. //-----------------------------------------------------------------------
  109. // Summary:
  110. //     This member function inserts a menu item into the Outlook bar. Unlike
  111. //     the AddMenuItem member function, InsertMenuItem does not cause an Outlook
  112. //     bar with the LBS_SORT style to be sorted.
  113. // Parameters:
  114. //     iIndex - Specifies the zero-based index of the position to insert the
  115. //     menu item. If this parameter is -1, the menu item is added to the
  116. //     end of the list.
  117. //     nIconID - Resource ID of the icon associated with this menu item.
  118. //     lpszText - Points to the null-terminated string for the menu item
  119. //     bEnabled - TRUE if the menu item is enabled.
  120. // Returns:
  121. //     The zero-based index of the position at which the menu item was inserted.
  122. //     The return value is LB_ERR if an error occurs. The return value is LB_ERRSPACE
  123. //     if insufficient space is available to store the new menu item.
  124. //-----------------------------------------------------------------------
  125. int InsertMenuItem(int iIndex, UINT nIconID, LPCTSTR lpszText, BOOL bEnabled = TRUE);
  126. //-----------------------------------------------------------------------
  127. // Summary:
  128. //     Call this member function to add a menu item to an Outlook bar. If
  129. //     the Outlook bar was not created with the LBS_SORT style, the menu item
  130. //     is added to the end of the Outlook bar. Otherwise, the menu item is
  131. //     inserted into the Outlook bar, and the Outlook bar is sorted. If the
  132. //     Outlook bar was created with the LBS_SORT style but not the LBS_HASSTRINGS
  133. //     style, the framework sorts the Outlook bar by one or more calls to
  134. //     the CompareItem member function. Use InsertMenuItem to insert a menu
  135. //     item into a specific location within the Outlook bar.
  136. // Parameters:
  137. //     nIconID - Resource ID of the icon associated with this menu item.
  138. //     lpszText - Points to the null-terminated string for the menu item.
  139. //     bEnabled - TRUE if the menu item is enabled.
  140. // Returns:
  141. //     The zero-based index to the menu item in the Outlook bar. The return
  142. //     value is LB_ERR if an error occurs. The return value is LB_ERRSPACE
  143. //     if insufficient space is available to store the new menu item.
  144. //-----------------------------------------------------------------------
  145. int AddMenuItem(UINT nIconID, LPCTSTR lpszText, BOOL bEnabled = TRUE);
  146. //-----------------------------------------------------------------------
  147. // Summary:
  148. //     Call this member function to enable or disable the menu item
  149. //     specified by <i>iItem</i>.
  150. // Parameters:
  151. //     iItem - Index of the menu item to enable or disable.
  152. //     bEnabled - TRUE to enable the menu item, FALSE to disable.
  153. // Returns:
  154. //     Returns TRUE if the menu item's enabled state was successfully
  155. //     updated, otherwise FALSE.
  156. //-----------------------------------------------------------------------
  157. BOOL EnableMenuItem(int iItem, BOOL bEnabled);
  158. //-----------------------------------------------------------------------
  159. // Summary:
  160. //     Call this member function to return an CONTENT_ITEM object that
  161. //     represents the menu item specified by 'iItem'.
  162. // Parameters:
  163. //     iItem - Specifies the zero-based index of the menu item to retrieve.
  164. // Returns:
  165. //     An CONTENT_ITEM pointer.
  166. //-----------------------------------------------------------------------
  167. CONTENT_ITEM* GetMenuItem(int iItem);
  168. //-----------------------------------------------------------------------
  169. // Summary:
  170. //     Call this member function to set the cursor, text and border attributes
  171. //     for a highlighted item.
  172. // Parameters:
  173. //     nIDCursor    - Resource id of the highlight cursor.
  174. //     bNoBorder    - True if not border is displayed when item is highlighted.
  175. //     bNoUnderline - True if text is not underlined when item is highlighted.
  176. //-----------------------------------------------------------------------
  177. void SetHilightCursor(UINT nIDCursor, bool bNoBorder = false, bool bNoUnderline = false);
  178. // ----------------------------------------------------------------------
  179. // Summary:
  180. //     This member function is called by the outlook bar to determine the
  181. //     string height for a multi-line text item.
  182. // Parameters:
  183. //     lspzItem - NULL terminated string.
  184. // Returns:
  185. //     The height in pixels of the specified string.
  186. // ----------------------------------------------------------------------
  187. int GetTextHeight(LPCTSTR lspzItem) const;
  188. protected:
  189. //{{AFX_CODEJOCK_PRIVATE
  190. DECLARE_MESSAGE_MAP()
  191. //{{AFX_VIRTUAL(CXTMenuListBox)
  192. virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  193. virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
  194. //}}AFX_VIRTUAL
  195. //{{AFX_MSG(CXTMenuListBox)
  196. afx_msg void OnLButtonDown (UINT nFlags, CPoint point);
  197. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  198. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  199. afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
  200. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  201. afx_msg void OnPaint();
  202. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  203. afx_msg void OnMouseLeave();
  204. //}}AFX_MSG
  205. //}}AFX_CODEJOCK_PRIVATE
  206. private:
  207. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  208. void RedrawItem(int iIndex);
  209. void RedrawItem(CPoint point);
  210. public:
  211. bool                m_bNoBorder;        // true to disable a border drawn around highlighted items.
  212. bool                m_bNoUnderline;     // true if the text is not drawn with a underline when no highlight border is displayed.
  213. protected:
  214. int               m_nPrevIndex;     // Previously selected menu index.
  215. int               m_bHilightItemID;   // Index of the currently highlighted item, set to -1 if no selection.
  216. bool              m_bHilight;         // true when the menu item is selected.
  217. bool              m_bTimerActive;     // true if the redraw timer is active.
  218. CPoint            m_point;            // Holds the cursor position.
  219. CContentItemList  m_arContentItems;     // Array of CONTENT_ITEM structs that represent each item in the Outlook bar.
  220. HCURSOR           m_hCursor;          // Cursor display when item is hovered.
  221. };
  222. //{{AFX_CODEJOCK_PRIVATE
  223. #define CXTOutlookBar CXTMenuListBox
  224. //}}AFX_CODEJOCK_PRIVATE
  225. //////////////////////////////////////////////////////////////////////
  226. AFX_INLINE BOOL CXTMenuListBox::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  227. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  228. }
  229. #endif // #if !defined(__XTMENULISTBOX_H__)