colorbtn.h
上传用户:dengyong
上传日期:2007-01-01
资源大小:40k
文件大小:4k
源码类别:

组合框控件

开发平台:

Visual C++

  1. /*************************************************************************
  2. ColorBtn.h header file
  3. CColorBtn: A control panel like color picker
  4.            by The Gremlin
  5. Compatibility: Visual C++ 4.0 and up.
  6. *******************
  7. Altered to create a customizable color picker by Corey Spagnoli 12/1998
  8.    - removed resource dependencies and 'other' button support
  9.    - configured for run-time changes
  10.    - enabled on the fly dialog calculations
  11.    - added circular shapes
  12.    - took out registry support (using database to fill color arrays)
  13.    - changed hungarian notation to match my company's standards 
  14.     (my apologies to hungarian lovers like me, but rules are rules)
  15. **************************************************************************/
  16. #ifndef _COLORBTN_H_
  17. #define _COLORBTN_H_
  18. #include <afxtempl.h>
  19. // Utility class for the dialog
  20. class CColorBtnDlg : public CDialog
  21. {
  22. // Construction
  23. public:
  24. enum COLOR_DIALOG_CONSTANTS
  25.    {
  26.    MIN_WELL_WIDTH = 5,
  27.    MIN_WELL_HEIGHT = 5,
  28.    MIN_INNER_BORDER = 0,
  29.    MAX_INNER_BORDER = 5,
  30.    MIN_OUTER_BORDER = 0,
  31.    MAX_OUTER_BORDER = 10,
  32.    MIN_NUMCOLORWELLCOLS = 1,
  33.    MAX_NUMCOLORWELLCOLS = 40
  34.    };
  35.    CButton *m_Parent;
  36.    CArray<COLORREF, COLORREF&> m_Colors;
  37.    COLORREF m_SelectedColor;
  38.    
  39.    CColorBtnDlg(CWnd* pParent = NULL);   // standard constructor
  40.    ~CColorBtnDlg();
  41.    
  42.    short m_DialogWidth;
  43.    short m_NumColorWellColumns;
  44.    short m_ColorWellHeight;
  45.    short m_OuterBorderThickness;
  46.    short m_InnerBorderThickness;
  47.    UINT  m_StartingButtonID;
  48.    BOOL  m_IsotropicWells;
  49. private:
  50.    DLGTEMPLATE m_dlgTempl;
  51.    HGLOBAL m_GlobalLock;
  52. public:
  53. // Dialog Data
  54. //{{AFX_DATA(CColorBtnDlg)
  55. // NOTE: the ClassWizard will add data members here
  56. //}}AFX_DATA
  57. // Overrides
  58. // ClassWizard generated virtual function overrides
  59. //{{AFX_VIRTUAL(CColorBtnDlg)
  60. protected:
  61. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  62. //}}AFX_VIRTUAL
  63. // Implementation
  64. protected:
  65.    
  66. // Generated message map functions
  67. //{{AFX_MSG(CColorBtnDlg)
  68. virtual BOOL OnInitDialog();
  69. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  70. afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
  71. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  72. //}}AFX_MSG
  73. void OnColor(UINT id);    
  74.    void EndDialog( int nResult );
  75.    void CreateDialogFromTemplate();
  76. DECLARE_MESSAGE_MAP()
  77. };
  78. class CColorBtn : public CButton
  79. {
  80. // Construction
  81. public:
  82.    enum {
  83.       RECTANGLE,
  84.       ELLIPSE,
  85.       TRIANGLE,
  86.       HEX
  87.       } shapes;
  88.     CColorBtn();
  89.     // The selected color,set this variable to initialize the 
  90.     // button's color and read to see the results
  91.    COLORREF m_CurrentColor;
  92.    
  93.    // Thse functions pass values through to Dialog (m_ColorDlg)
  94.    void ClearColorWells();
  95.    void AddColorWell(COLORREF Color);
  96.    void SetColorsFromArray(CArray<COLORREF, COLORREF&>* ColorArray);
  97.    void SetBorderThickness(short Outer, short Inner);
  98.    void SetDialogWidth(short Width);
  99.    void SetNumColorWellColumns(short NumCols);
  100.    void SetColorWellHeight(short Height);
  101.    void MakeColorWellsIsotropic(BOOL Yes = TRUE);
  102.    void SetColorWellShape(short Shape);
  103.    short GetColorWellShape();
  104.     // Use Serialize to store the color table in a file. Call at the document's Serialize()  
  105. static void Serialize( CArchive& ar );
  106.    
  107.    void SetSelectedColor(COLORREF Color);  
  108.    COLORREF GetColor();
  109. // Overrides
  110. // ClassWizard generated virtual function overrides
  111. //{{AFX_VIRTUAL(CColorBtn)
  112. //}}AFX_VIRTUAL
  113. // Implementation
  114. public:
  115. virtual ~CColorBtn();
  116. // Generated message map functions
  117. protected:
  118. //{{AFX_MSG(CColorBtn)
  119. afx_msg void OnClicked();
  120. //}}AFX_MSG
  121.     void DrawItem(LPDRAWITEMSTRUCT);
  122. DECLARE_MESSAGE_MAP()
  123. private:
  124.     // A number of pens and brushes needed to paint the button
  125.     CPen *m_OldPen;
  126.     CBrush *m_OldBrush;
  127.     CPen m_BlackPen;
  128.     CPen m_DkGrayPen;
  129.     CPen m_WhitePen;
  130.     CBrush m_BackBrush;
  131.     CBrush m_NullBrush;
  132.     CPen m_NullPen;
  133.     CColorBtnDlg m_ColorDlg;
  134.     short m_ColorWellShape;
  135. };
  136. #endif