ButtonST.h
上传用户:clj987822
上传日期:2022-04-25
资源大小:13296k
文件大小:5k
源码类别:

其他智力游戏

开发平台:

Visual C++

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