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

对话框与窗口

开发平台:

Visual C++

  1. // XTColorSelectorCtrl.h : interface for the CXTColorSelectorCtrl 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(__XTCOLORCTRL_H__)
  22. #define __XTCOLORCTRL_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTColorDialog;
  28. class CXTColorSelectorCtrlTheme;
  29. // ----------------------------------------------------------------------
  30. // Summary:
  31. //     XTP_PICK_BUTTON structure is used by the CXTColorSelectorCtrl
  32. //     class to support custom colors.
  33. // See Also:
  34. //     CXTColorSelectorCtrl
  35. // ----------------------------------------------------------------------
  36. struct _XTP_EXT_CLASS XTP_PICK_BUTTON
  37. {
  38. COLORREF clrButton;
  39. UINT     toolTipID;
  40. };
  41. #include "XTThemeManager.h"
  42. //===========================================================================
  43. // Summary:
  44. //     CXTColorSelectorCtrl is a CWnd derived class. It is used to create
  45. //     a CXTColorSelectorCtrl control that will allow a user to select colors.
  46. //===========================================================================
  47. class _XTP_EXT_CLASS CXTColorSelectorCtrl : public CWnd, public CXTThemeManagerStyleHostBase
  48. {
  49. DECLARE_THEME_HOST(CXTColorSelectorCtrl)
  50. DECLARE_THEME_REFRESH(CXTColorSelectorCtrl)
  51. public:
  52. // ----------------------------------------------------------------------
  53. // Summary:
  54. //     COLOR_CELL structure is used by the CXTColorSelectorCtrl
  55. //     class to maintain information about a particular color cell.
  56. // See Also:
  57. //     CXTColorSelectorCtrl
  58. // ----------------------------------------------------------------------
  59. struct _XTP_EXT_CLASS COLOR_CELL
  60. {
  61. UINT     nID;         // Command ID of the color cell.
  62. UINT     nIndex;      // Index of the color cell.
  63. bool     bChecked;    // true if the cell is checked.
  64. CRect    rect;        // Size of the color cell.
  65. DWORD    dwStyle;     // Windows style for the cell.
  66. TCHAR    szText[256]; // Tooltip text displayed for the color cell.
  67. COLORREF clr;         // An RGB value that represents the color of the cell.
  68. };
  69. protected:
  70. // ----------------------------------------------------------------------
  71. // Summary:
  72. //     List for maintaining COLOR_CELL structures.
  73. // Remarks:
  74. //     CList definition used by the CXTColorSelectorCtrl class to maintain
  75. //     a list of COLOR_CELL structures representing each color item in
  76. //     the color selector control.
  77. // See Also:
  78. //     CXTColorSelectorCtrl, COLOR_CELL
  79. // ----------------------------------------------------------------------
  80. typedef CList<COLOR_CELL*, COLOR_CELL*> CColorCellList;
  81. // ---------------------------------------------------------------
  82. // Summary:
  83. //     Array of listener windows to send notifications to.
  84. // Remarks:
  85. //     CArray definition used by the CXTColorSelectorCtrl class to
  86. //     maintain a list of window handles that receive notification
  87. //     messages that are sent when an event occurs in the control.
  88. // See Also:
  89. //     CXTColorSelectorCtrl
  90. // ---------------------------------------------------------------
  91. typedef CArray<HWND, HWND> CListenerArray;
  92. public:
  93. //-----------------------------------------------------------------------
  94. // Summary:
  95. //     Constructs a CXTColorSelectorCtrl object
  96. //-----------------------------------------------------------------------
  97. CXTColorSelectorCtrl();
  98. //-----------------------------------------------------------------------
  99. // Summary:
  100. //     Destroys a CXTColorSelectorCtrl object, handles cleanup and
  101. //     deallocation
  102. //-----------------------------------------------------------------------
  103. virtual ~CXTColorSelectorCtrl();
  104. public:
  105. //-----------------------------------------------------------------------
  106. // Summary:
  107. //     Call this member function to initialize the user defined color
  108. //     array for the color selector.
  109. // Parameters:
  110. //     arUserDefColors - Reference to a CUIntArray object that
  111. //                       represents an array of COLORREF values.
  112. //-----------------------------------------------------------------------
  113. static void AFX_CDECL SetUserColors(const CUIntArray& arUserDefColors);
  114. //-----------------------------------------------------------------------
  115. // Summary:
  116. //     Call this member function to return a reference to the user
  117. //     defined color array.
  118. // Returns:
  119. //     A reference to a CUIintArray object that represents an array
  120. //     of user defined COLORREF values.
  121. //-----------------------------------------------------------------------
  122. static CUIntArray& AFX_CDECL GetUserColors();
  123. //-----------------------------------------------------------------------
  124. // Summary:
  125. //     Call this method to set custom colors for color picker
  126. // Parameters:
  127. //     pColors - Static array of colors and tooltips
  128. //     nCount  - Number of colors
  129. //     nCols   - Number of columns to show
  130. //-----------------------------------------------------------------------
  131. void SetColors(XTP_PICK_BUTTON* pColors, int nCount, int nCols = 8);
  132. //-----------------------------------------------------------------------
  133. // Summary:
  134. //     This member function will return the index of the currently selected
  135. //     color and will initialize 'pColorCell' struct.
  136. // Parameters:
  137. //     pColorCell - Receives a pointer to the currently selected button.
  138. // Returns:
  139. //     The zero (0) based index of the currently selected button.
  140. //-----------------------------------------------------------------------
  141. int GetCurSel(COLOR_CELL* pColorCell);
  142. //-----------------------------------------------------------------------
  143. // Summary:
  144. //     This member function will select a button based upon its index.
  145. // Parameters:
  146. //     nIndex - An integer value that represents the zero (0) based
  147. //     index of the button to be selected.
  148. //-----------------------------------------------------------------------
  149. void SetCurSel(int nIndex);
  150. // ----------------------------------------------------------------------------
  151. // Summary:
  152. //     This member function handles the creation of the color popup
  153. //     window.
  154. // Parameters:
  155. //     rect -        A reference to a <i>CRect</i> object that represents the
  156. //                   size of the color popup window.
  157. //     pParentWnd -  Points to the parent window for the color popup.
  158. //     dwPopup -     Style for the popup window. See the Remarks section for a
  159. //                   complete list of available styles.
  160. //     clrColor -    An <i>RGB</i> value that represents the currently selected
  161. //                   color for the popup window.
  162. //     clrDefault -  Specifies the default color for the color popup. If the
  163. //                   current style includes CPS_NOFILL this parameter is
  164. //                   ignored.
  165. // Remarks:
  166. //     Styles to be added or removed can be combined by using the bitwise
  167. //     OR (|) operator. It can be one or more of the following:
  168. //     * <b>CPS_XT_NOFILL</b> The color picker will display a No Fill
  169. //           button rather than the default Automatic Color button.
  170. //     * <b>CPS_XT_EXTENDED</b> The color picker will display 40
  171. //           extended colors rather than the default 16 colors.
  172. //     * <b>CPS_XT_MORECOLORS</b> The color picker will display a
  173. //           More Colors button which will display a CXTColorDialog.
  174. //     * <b>CPS_XT_USERCOLORS</b> The color picker will display an
  175. //           MRU (most recently used) color list for the control.
  176. // Returns:
  177. //     TRUE if successful, otherwise returns FALSE.
  178. // See Also:
  179. //     CXTColorPicker::ModifyCPStyle, CXTColorPopup::Create
  180. // ----------------------------------------------------------------------------
  181. BOOL Create(CRect rect, CWnd* pParentWnd, DWORD dwPopup, COLORREF clrColor, COLORREF clrDefault = CLR_DEFAULT);
  182. //-----------------------------------------------------------------------
  183. // Summary:
  184. //     This member function adds a window to send color picker notifications to.
  185. // Parameters:
  186. //     hwndListener - A handle to the listener window.  Messages will
  187. //                    be sent to it.
  188. //-----------------------------------------------------------------------
  189. void AddListener(HWND hwndListener);
  190. //-----------------------------------------------------------------------
  191. // Summary:
  192. //     This member function removes a window from notification list.
  193. // Parameters:
  194. //     hwndListener - A handle to the listener window to remove.
  195. //-----------------------------------------------------------------------
  196. void RemoveListener(HWND hwndListener);
  197. //-----------------------------------------------------------------------
  198. // Summary:
  199. //     This member function is called to select a color cell.
  200. // Parameters:
  201. //     pColorCell - Points to an COLOR_CELL object.
  202. //-----------------------------------------------------------------------
  203. virtual void SelectColorCell(COLOR_CELL* pColorCell);
  204. //-----------------------------------------------------------------------
  205. // Summary:
  206. //     This member function is called to select a color cell.
  207. // Parameters:
  208. //     clr - Color of selected cell.
  209. //-----------------------------------------------------------------------
  210. void SelectColor(COLORREF clr);
  211. //-----------------------------------------------------------------------
  212. // Summary:
  213. //     This member function is called to return an COLOR_CELL struct
  214. //     from the color cell array.
  215. // Parameters:
  216. //     iIndex - Index into the color cell array.
  217. // Returns:
  218. //     An COLOR_CELL object.
  219. //-----------------------------------------------------------------------
  220. COLOR_CELL* GetCellFromIndex(int iIndex);
  221. //-----------------------------------------------------------------------
  222. // Summary:
  223. //     This member function is called to set the size of the borders
  224. //     for the control.
  225. // Parameters:
  226. //     cxLeft   - Specifies the left position.
  227. //     cyTop    - Specifies the top.
  228. //     cxRight  - Specifies the right.
  229. //     cyBottom - Specifies the bottom.
  230. //-----------------------------------------------------------------------
  231. void SetBorders(int cxLeft = 0, int cyTop = 0, int cxRight = 0, int cyBottom = 0);
  232. //-----------------------------------------------------------------------
  233. // Summary:
  234. //     Call this member function to determine if the color selection dialog
  235. //     is visible.
  236. // Returns:
  237. //     True if the color selection dialog is open, otherwise returns false.
  238. //-----------------------------------------------------------------------
  239. bool IsColorDlgVisible();
  240. //-----------------------------------------------------------------------
  241. // Summary:
  242. //     Call this member function to determine if the ColorSelector control is
  243. //     used in a dialog or in a toolbar.
  244. // Parameters:
  245. //     pDC - Deveice context of the control
  246. // Returns:
  247. //     TRUE if the ColorSelector control is in a dialog and FALSE if used in a toolbar.
  248. //-----------------------------------------------------------------------
  249. BOOL IsColorStatic(CDC* pDC) const;
  250. protected:
  251. //-----------------------------------------------------------------------
  252. // Summary:
  253. //     This member function is called to draw the color selector.
  254. // Parameters:
  255. //     pDC - A CDC pointer that represents the current device context.
  256. //-----------------------------------------------------------------------
  257. void DrawColorSelector(CDC* pDC);
  258. //-----------------------------------------------------------------------
  259. // Summary:
  260. //     This member function will finish the selection process for the color
  261. //     box or button in the color popup window.
  262. // Parameters:
  263. //     nCurSel - Current index of the selected color box or button
  264. //               in the color popup window.
  265. //-----------------------------------------------------------------------
  266. virtual void EndSelection(int nCurSel);
  267. // ----------------------------------------------------------------------
  268. // Summary:
  269. //     This member function is called to determine if the specified color
  270. //     is already in the ColorDialog's MRU list or in the standard colors
  271. //     list.
  272. // Parameters:
  273. //     crFind -  A const COLORREF value.
  274. // Return -  TRUE if the color is found otherwise returns FALSE.
  275. // ----------------------------------------------------------------------
  276. BOOL LookUpColor(const COLORREF crFind);
  277. // ---------------------------------------------------------------------------
  278. // Summary:
  279. //     This member function is called to finish the selection process for
  280. //     the color box or button in the color popup window.
  281. // Parameters:
  282. //     nCurSel -      Current index of the selected color box or button in the
  283. //                    color popup window.
  284. //     callerParam -  User defined value to be passed to listeners.
  285. // Remarks:
  286. //     Override this method to pass user defined data to the listener
  287. //     windows that receive notification messages.
  288. // ---------------------------------------------------------------------------
  289. virtual void OnEndSelection(int nCurSel, LPARAM callerParam);
  290. CSize CalcSize();
  291. protected:
  292. //{{AFX_CODEJOCK_PRIVATE
  293. DECLARE_MESSAGE_MAP()
  294. //{{AFX_VIRTUAL(CXTColorSelectorCtrl)
  295. virtual BOOL PreTranslateMessage(MSG* pMsg);
  296. //}}AFX_VIRTUAL
  297. //{{AFX_MSG(CXTColorSelectorCtrl)
  298. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  299. afx_msg void OnPaint();
  300. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  301. afx_msg int OnMouseActivate(CWnd* /*pDesktopWnd*/, UINT /*nHitTest*/, UINT /*message*/);
  302. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  303. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  304. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  305. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  306. afx_msg void OnMouseLeave();
  307. afx_msg LRESULT OnNcHitTest(CPoint point);
  308. afx_msg void OnSetFocus(CWnd* pOldWnd);
  309. //}}AFX_MSG
  310. //}}AFX_CODEJOCK_PRIVATE
  311. private:
  312. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  313. protected:
  314. int               m_nCols;           // Number of columns in the color popup window.
  315. int               m_nCurSel;         // Currently selected index.
  316. int               m_nPressed;        // Pressed button.
  317. CWnd*             m_pParentWnd;      // Points to the parent window for the popup window.
  318. CSize             m_sizeButton;      // cx and cy size for a color picker button.
  319. CRect             m_rcWnd;           // Rect for the popup window.
  320. CRect             m_rcBorders;       // Control borders
  321. DWORD             m_dwPopup;         // Color popup window style.
  322. CPoint            m_point;           // Last known cursor position.
  323. COLORREF          m_clrColor;        // An RGB value that represents the currently selected color.
  324. COLORREF          m_clrDefault;      // An RGB value that represents the default color for the popup window.
  325. CToolTipCtrl      m_tooltip;         // Tooltip control.
  326. CListenerArray    m_listeners;       // Array of listener windows to be sent notifications.
  327. CColorCellList    m_arCells;         // Array of color items.
  328. static CUIntArray m_arUserDefColors; // Array of user defined colors.
  329. CXTColorDialog*   m_pColorDlg;       // Points to the color selection dialog when visible.
  330. XTP_PICK_BUTTON*      m_pExtendedColors;         // Custom colors
  331. int               m_nExtendedColors;         // Custom colors count
  332. friend class CXTPopupColorTearOff;
  333. };
  334. DECLARE_THEME_FACTORY(CXTColorSelectorCtrlTheme)
  335. //===========================================================================
  336. // Summary:
  337. //     CXTColorSelectorCtrlTheme is derived from CXTThemeManagerStyle to
  338. //     handle theme specific visualizations for the CXTColorSelectorCtrl
  339. //     class.
  340. //===========================================================================
  341. class _XTP_EXT_CLASS CXTColorSelectorCtrlTheme : public CXTThemeManagerStyle
  342. {
  343. public:
  344. //-----------------------------------------------------------------------
  345. // Summary:
  346. //     Constructs a CXTColorSelectorCtrlTheme object.
  347. //-----------------------------------------------------------------------
  348. CXTColorSelectorCtrlTheme();
  349. //-----------------------------------------------------------------------
  350. // Summary:
  351. //     This member function is called by the theme manager to refresh
  352. //     the visual styles used by each components theme.
  353. //-----------------------------------------------------------------------
  354. virtual void RefreshMetrics();
  355. //-----------------------------------------------------------------------
  356. // Summary: Call this member function to draw the background of the
  357. //          ColorSelector control.
  358. // Parameters:
  359. //      pDC    - A pointer to a valid device context.
  360. //      rect   - A  CRect object that contains the dimensions of the area to fill.
  361. //      pOwner - A pointer to a valid CXTColorSelectorCtrl object.
  362. //-----------------------------------------------------------------------
  363. virtual void FillBackground(CDC* pDC, const CRect& rect, CXTColorSelectorCtrl* pOwner);
  364. //-----------------------------------------------------------------------
  365. // Summary:
  366. //     This member function is called to draw the cell specified by
  367. //     'pColorCell'.
  368. // Parameters:
  369. //     pColorCell - An COLOR_CELL object.
  370. //     pDC        - A CDC pointer that represents the current device
  371. //                  context.
  372. //     bHilite    - TRUE if mouse over cell
  373. //     bPressed   - TRUE if cell pressed
  374. //-----------------------------------------------------------------------
  375. virtual void DrawColorCell(CXTColorSelectorCtrl::COLOR_CELL* pColorCell, CDC* pDC, BOOL bHilite, BOOL bPressed);
  376. protected:
  377. COLORREF m_crBorderHilight; // RGB value for 3D border highlight color.
  378. COLORREF m_crBorderShadow; // RGB value for 3D border shadow color.
  379. COLORREF m_crBack; // RGB value for background color.
  380. COLORREF m_crPressed; // RGB value for pressed background color.
  381. COLORREF m_crHilight; // RGB value for hilight background color.
  382. COLORREF m_crChecked; // RGB value for checked background color.
  383. COLORREF m_crText; // RGB value for text color.
  384. };
  385. //===========================================================================
  386. // Summary:
  387. //     CXTColorSelectorCtrlThemeOfficeXP is derived from CXTColorSelectorCtrlTheme to
  388. //     handle theme specific visualizations for the CXTColorSelectorCtrl
  389. //     class.
  390. //===========================================================================
  391. class _XTP_EXT_CLASS CXTColorSelectorCtrlThemeOfficeXP : public CXTColorSelectorCtrlTheme
  392. {
  393. public:
  394. //-----------------------------------------------------------------------
  395. // Summary:
  396. //     Constructs a CXTColorSelectorCtrlThemeOfficeXP object.
  397. //-----------------------------------------------------------------------
  398. CXTColorSelectorCtrlThemeOfficeXP();
  399. //-----------------------------------------------------------------------
  400. // Summary:
  401. //     This member function is called by the theme manager to refresh
  402. //     the visual styles used by each components theme.
  403. //-----------------------------------------------------------------------
  404. virtual void RefreshMetrics();
  405. };
  406. //===========================================================================
  407. // Summary:
  408. //     CXTColorSelectorCtrlThemeOffice2003 is derived from CXTColorSelectorCtrlThemeOfficeXP to
  409. //     handle theme specific visualizations for the CXTColorSelectorCtrl
  410. //     class.
  411. //===========================================================================
  412. class _XTP_EXT_CLASS CXTColorSelectorCtrlThemeOffice2003 : public CXTColorSelectorCtrlThemeOfficeXP
  413. {
  414. public:
  415. //-----------------------------------------------------------------------
  416. // Summary:
  417. //     Constructs a CXTColorSelectorCtrlThemeOffice2003 object.
  418. //-----------------------------------------------------------------------
  419. CXTColorSelectorCtrlThemeOffice2003();
  420. //-----------------------------------------------------------------------
  421. // Summary:
  422. //     This member function is called by the theme manager to refresh
  423. //     the visual styles used by each components theme.
  424. //-----------------------------------------------------------------------
  425. virtual void RefreshMetrics();
  426. };
  427. /////////////////////////////////////////////////////////////////////////////
  428. AFX_INLINE void CXTColorSelectorCtrl::SetBorders(int cxLeft, int cyTop, int cxRight, int cyBottom) {
  429. m_rcBorders.left = cxLeft; m_rcBorders.top = cyTop; m_rcBorders.right = cxRight; m_rcBorders.bottom = cyBottom;
  430. }
  431. AFX_INLINE BOOL CXTColorSelectorCtrl::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  432. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  433. }
  434. AFX_INLINE void CXTColorSelectorCtrl::SetColors(XTP_PICK_BUTTON* pColors, int nCount, int nCols) {
  435. m_pExtendedColors = pColors;
  436. m_nExtendedColors = nCount;
  437. m_nCols = nCols;
  438. }
  439. const DWORD CPS_XT_NOFILL          = 0x0001;  //<ALIAS CXTColorSelectorCtrl::Create@CRect@CWnd*@DWORD@COLORREF@COLORREF>
  440. const DWORD CPS_XT_EXTENDED        = 0x0002;  //<ALIAS CXTColorSelectorCtrl::Create@CRect@CWnd*@DWORD@COLORREF@COLORREF>
  441. const DWORD CPS_XT_MORECOLORS      = 0x0004;  //<ALIAS CXTColorSelectorCtrl::Create@CRect@CWnd*@DWORD@COLORREF@COLORREF>
  442. //{{AFX_CODEJOCK_PRIVATE
  443. const DWORD CPS_XT_PICKBOX         = 0x0008;  // Used internally
  444. //}}AFX_CODEJOCK_PRIVATE
  445. const DWORD CPS_XT_USERCOLORS      = 0x0020;  //<ALIAS CXTColorSelectorCtrl::Create@CRect@CWnd*@DWORD@COLORREF@COLORREF>
  446. const DWORD CPS_XT_NOAUTOMATIC     = 0x0010;  //<ALIAS CXTColorSelectorCtrl::Create@CRect@CWnd*@DWORD@COLORREF@COLORREF>
  447. const DWORD CPS_XT_RIGHTALIGN      = 0x0040;  //<ALIAS CXTColorSelectorCtrl::Create@CRect@CWnd*@DWORD@COLORREF@COLORREF>
  448. #endif //__XTCOLORCTRL_H__