BtnST.h
上传用户:gzboli
上传日期:2013-04-10
资源大小:471k
文件大小:5k
源码类别:

图片显示

开发平台:

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. virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  35. //}}AFX_VIRTUAL
  36. // Implementation
  37. public:
  38. void DrawTransparent();
  39. BOOL GetDefault();
  40. void SetTooltipText(int nId, BOOL bActivate = TRUE);
  41. void SetTooltipText(CString* spText, BOOL bActivate = TRUE);
  42. void ActivateTooltip(BOOL bEnable = TRUE);
  43. BOOL SetBtnCursor(int nCursorId = -1);
  44. void SetFlatFocus(BOOL bDrawFlatFocus, BOOL bRepaint = FALSE);
  45. BOOL GetFlatFocus();
  46. //设置光标滑过按钮时,按钮文本的颜色
  47. void SetDefaultActiveFgColor(BOOL bRepaint = FALSE);
  48. void SetActiveFgColor(COLORREF crNew, BOOL bRepaint = FALSE);
  49. const COLORREF GetActiveFgColor();
  50. //设置光标滑过按钮时,按钮的颜色
  51. void SetDefaultActiveBgColor(BOOL bRepaint = FALSE);
  52. void SetActiveBgColor(COLORREF crNew, BOOL bRepaint = FALSE);
  53. const COLORREF GetActiveBgColor();
  54. //设置光标在按钮区域之外时,按钮文本的颜色
  55. void SetDefaultInactiveFgColor(BOOL bRepaint = FALSE);
  56. void SetInactiveFgColor(COLORREF crNew, BOOL bRepaint = FALSE);
  57. const COLORREF GetInactiveFgColor();
  58. //设置光标在按钮区域之外时,按钮文本的颜色
  59. void SetDefaultInactiveBgColor(BOOL bRepaint = FALSE);
  60. void SetInactiveBgColor(COLORREF crNew, BOOL bRepaint = FALSE);
  61. const COLORREF GetInactiveBgColor();
  62. //是否显示按钮文本(标题)
  63. void SetShowText(BOOL bShow = TRUE);
  64. BOOL GetShowText();
  65. //设置/获取图标位置
  66. void SetAlign(int nAlign);
  67. int GetAlign();
  68. //设置/返回按钮风格(平面或标准)
  69. void SetFlat(BOOL bState = TRUE);
  70. BOOL GetFlat();
  71. //设置打开/关闭高亮显示(仅用于平面按钮)
  72. void DrawBorder(BOOL bEnable = TRUE);
  73. //设置按钮图标
  74. void SetIcon(int nIconInId, int nIconOutId = NULL);
  75. static const short GetVersionI();
  76. static const char* GetVersionC();
  77. protected:
  78.     //{{AFX_MSG(CButtonST)
  79. afx_msg void OnCaptureChanged(CWnd *pWnd);
  80. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  81. afx_msg void OnKillFocus(CWnd* pNewWnd);
  82. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  83. //}}AFX_MSG
  84. DECLARE_MESSAGE_MAP()
  85. private:
  86. void DrawTheIcon(CDC* pDC, CString* title, RECT* rcItem, CRect* captionRect, BOOL IsPressed, BOOL IsDisabled);
  87. void InitToolTip();
  88. void PaintBk(CDC* pDC);
  89. int m_nAlign;
  90. BOOL m_bShowText;
  91. BOOL m_bDrawBorder;
  92. BOOL m_bIsFlat;
  93. BOOL m_MouseOnButton;
  94. BOOL m_bDrawFlatFocus;
  95. HCURSOR m_hCursor;
  96. CToolTipCtrl m_ToolTip;
  97. HICON m_hIconIn;
  98. HICON m_hIconOut;
  99. BYTE m_cyIcon;
  100. BYTE m_cxIcon;
  101. CDC m_dcBk;
  102. CBitmap m_bmpBk;
  103. CBitmap* m_pbmpOldBk;
  104. BOOL m_bDrawTransparent;
  105. BOOL m_bIsDefault;
  106. COLORREF  m_crInactiveBg;
  107.     COLORREF  m_crInactiveFg;
  108.     COLORREF  m_crActiveBg;
  109.     COLORREF  m_crActiveFg;
  110. };
  111. #ifdef ST_USE_MEMDC
  112. //////////////////////////////////////////////////
  113. // CMemDC - memory DC
  114. // 内存设备环境类
  115. class CMemDC : public CDC
  116. {
  117. public:
  118.     // 构造函数,设置内存DC
  119.     CMemDC(CDC* pDC) : CDC()
  120.     {
  121.         ASSERT(pDC != NULL);
  122.         m_pDC = pDC;
  123.         m_pOldBitmap = NULL;
  124.         m_bMemDC = !pDC->IsPrinting();
  125.               
  126.         if (m_bMemDC)    // 创建内存DC
  127.         {
  128.             pDC->GetClipBox(&m_rect);
  129.             CreateCompatibleDC(pDC);
  130.             m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
  131.             m_pOldBitmap = SelectObject(&m_bitmap);
  132.             SetWindowOrg(m_rect.left, m_rect.top);
  133.         }
  134.         else        // 设置当前DC的备份,用于打印
  135. {
  136.             m_bPrinting = pDC->m_bPrinting;
  137.             m_hDC       = pDC->m_hDC;
  138.             m_hAttribDC = pDC->m_hAttribDC;
  139.         }
  140.     }
  141.     
  142.     // 析构函数,备份内存DC的内容
  143.     ~CMemDC()
  144.     {
  145.         if (m_bMemDC) 
  146.         {    
  147.             // 将位图拷贝到屏幕
  148.             m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
  149.                           this, m_rect.left, m_rect.top, SRCCOPY);
  150.             SelectObject(m_pOldBitmap);
  151.         } else {
  152.             // All we need to do is replace the DC with an illegal value,
  153.             // this keeps us from accidently deleting the handles associated with
  154.             // the CDC that was passed to the constructor.
  155.             m_hDC = m_hAttribDC = NULL;
  156.         }
  157.     }
  158.     // 允许作为指针使用
  159.     CMemDC* operator->() {return this;}
  160.         
  161.     operator CMemDC*() {return this;}
  162. private:
  163.     CBitmap  m_bitmap;      
  164.     CBitmap* m_pOldBitmap;  
  165.     CDC*     m_pDC;         
  166.     CRect    m_rect;        
  167.     BOOL     m_bMemDC;      
  168. };
  169. #endif
  170. /////////////////////////////////////////////////////////////////////////////
  171. //{{AFX_INSERT_LOCATION}}
  172. #endif