BtnST.h
上传用户:mcdz888
上传日期:2022-08-05
资源大小:118k
文件大小:6k
源码类别:

绘图程序

开发平台:

Visual C++

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