BtnST.h
上传用户:shyhzl888
上传日期:2007-01-07
资源大小:35k
文件大小:6k
源码类别:

行业应用

开发平台:

Visual C++

  1. #ifndef _BTNST_H
  2. #define _BTNST_H
  3. #if _MSC_VER >= 1000
  4. #pragma once
  5. #endif // _MSC_VER >= 1000
  6. // CBtnST.h : header file
  7. //
  8. // Comment this if you don't want that CButtonST hilights itself
  9. // also when the window is inactive (like happens in Internet Explorer)
  10. #define ST_LIKEIE
  11. // Comment this if you don't want to use CMemDC class
  12. #define ST_USE_MEMDC
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CButtonST window
  15. class CButtonST : public CButton
  16. {
  17. // Construction
  18. public:
  19.     CButtonST();
  20. ~CButtonST();
  21.     enum {ST_ALIGN_HORIZ, ST_ALIGN_VERT};
  22. // Attributes
  23. public:
  24. // Operations
  25. public:
  26. // Overrides
  27. // ClassWizard generated virtual function overrides
  28.     //{{AFX_VIRTUAL(CButtonST)
  29. public:
  30. virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  31. virtual BOOL PreTranslateMessage(MSG* pMsg);
  32. protected:
  33. virtual void PreSubclassWindow();
  34. //}}AFX_VIRTUAL
  35. // Implementation
  36. public:
  37. void AddToolTip ( CString strTip );
  38. BOOL SetBtnCursor(int nCursorId = -1);
  39. void SetFlatFocus(BOOL bDrawFlatFocus, BOOL bRepaint = FALSE);
  40. BOOL GetFlatFocus();
  41. void SetDefaultActiveFgColor(BOOL bRepaint = FALSE);
  42. void SetActiveFgColor(COLORREF crNew, BOOL bRepaint = FALSE);
  43. const COLORREF GetActiveFgColor();
  44. void SetDefaultActiveBgColor(BOOL bRepaint = FALSE);
  45. void SetActiveBgColor(COLORREF crNew, BOOL bRepaint = FALSE);
  46. const COLORREF GetActiveBgColor();
  47. void SetDefaultInactiveFgColor(BOOL bRepaint = FALSE);
  48. void SetInactiveFgColor(COLORREF crNew, BOOL bRepaint = FALSE);
  49. const COLORREF GetInactiveFgColor();
  50. void SetDefaultInactiveBgColor(BOOL bRepaint = FALSE);
  51. void SetInactiveBgColor(COLORREF crNew, BOOL bRepaint = FALSE);
  52. const COLORREF GetInactiveBgColor();
  53. void SetShowText(BOOL bShow = TRUE);
  54. BOOL GetShowText();
  55. void SetAlign(int nAlign);
  56. int GetAlign();
  57. void SetFlat(BOOL bState = TRUE);
  58. BOOL GetFlat();
  59. void DrawBorder(BOOL bEnable = TRUE);
  60. void SetIcon(int nIconInId, int nIconOutId = NULL, BYTE cx = 32, BYTE cy = 32);
  61. static const short GetVersionI();
  62. static const char* GetVersionC();
  63. protected:
  64. CString m_strToolTip;
  65. CToolTipCtrl m_ctrlToolTip;
  66.     //{{AFX_MSG(CButtonST)
  67. afx_msg void OnCaptureChanged(CWnd *pWnd);
  68. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  69. afx_msg void OnKillFocus(CWnd* pNewWnd);
  70. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  71. //}}AFX_MSG
  72. DECLARE_MESSAGE_MAP()
  73. private:
  74. void DrawTheIcon(CDC* pDC, CString* title, RECT* rcItem, CRect* captionRect, BOOL IsPressed, BOOL IsDisabled);
  75. int m_nAlign;
  76. BOOL m_bShowText;
  77. BOOL m_bDrawBorder;
  78. BOOL m_bIsFlat;
  79. BOOL m_MouseOnButton;
  80. BOOL m_bDrawFlatFocus;
  81. HCURSOR m_hCursor;
  82. HICON m_hIconIn;
  83. HICON m_hIconOut;
  84. BYTE m_cyIcon;
  85. BYTE m_cxIcon;
  86. COLORREF  m_crInactiveBg;
  87.     COLORREF  m_crInactiveFg;
  88.     COLORREF  m_crActiveBg;
  89.     COLORREF  m_crActiveFg;
  90. };
  91. #ifdef ST_USE_MEMDC
  92. //////////////////////////////////////////////////
  93. // CMemDC - memory DC
  94. //
  95. // Author: Keith Rule
  96. // Email:  keithr@europa.com
  97. // Copyright 1996-1997, Keith Rule
  98. //
  99. // You may freely use or modify this code provided this
  100. // Copyright is included in all derived versions.
  101. //
  102. // History - 10/3/97 Fixed scrolling bug.
  103. //                   Added print support.
  104. //           25 feb 98 - fixed minor assertion bug
  105. //
  106. // This class implements a memory Device Context
  107. class CMemDC : public CDC
  108. {
  109. public:
  110.     // constructor sets up the memory DC
  111.     CMemDC(CDC* pDC) : CDC()
  112.     {
  113.         ASSERT(pDC != NULL);
  114.         m_pDC = pDC;
  115.         m_pOldBitmap = NULL;
  116.         m_bMemDC = !pDC->IsPrinting();
  117.               
  118.         if (m_bMemDC)    // Create a Memory DC
  119.         {
  120.             pDC->GetClipBox(&m_rect);
  121.             CreateCompatibleDC(pDC);
  122.             m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
  123.             m_pOldBitmap = SelectObject(&m_bitmap);
  124.             SetWindowOrg(m_rect.left, m_rect.top);
  125.         }
  126.         else        // Make a copy of the relevent parts of the current DC for printing
  127.         {
  128.             m_bPrinting = pDC->m_bPrinting;
  129.             m_hDC       = pDC->m_hDC;
  130.             m_hAttribDC = pDC->m_hAttribDC;
  131.         }
  132.     }
  133.     
  134.     // Destructor copies the contents of the mem DC to the original DC
  135.     ~CMemDC()
  136.     {
  137.         if (m_bMemDC) 
  138.         {    
  139.             // Copy the offscreen bitmap onto the screen.
  140.             m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
  141.                           this, m_rect.left, m_rect.top, SRCCOPY);
  142.             //Swap back the original bitmap.
  143.             SelectObject(m_pOldBitmap);
  144.         } else {
  145.             // All we need to do is replace the DC with an illegal value,
  146.             // this keeps us from accidently deleting the handles associated with
  147.             // the CDC that was passed to the constructor.
  148.             m_hDC = m_hAttribDC = NULL;
  149.         }
  150.     }
  151.     // Allow usage as a pointer
  152.     CMemDC* operator->() {return this;}
  153.         
  154.     // Allow usage as a pointer
  155.     operator CMemDC*() {return this;}
  156. private:
  157.     CBitmap  m_bitmap;      // Offscreen bitmap
  158.     CBitmap* m_pOldBitmap;  // bitmap originally found in CMemDC
  159.     CDC*     m_pDC;         // Saves CDC passed in constructor
  160.     CRect    m_rect;        // Rectangle of drawing area.
  161.     BOOL     m_bMemDC;      // TRUE if CDC really is a Memory DC.
  162. };
  163. #endif
  164. /////////////////////////////////////////////////////////////////////////////
  165. //{{AFX_INSERT_LOCATION}}
  166. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
  167. #endif