ButtonXP.cpp
上传用户:ckg1000
上传日期:2013-01-26
资源大小:630k
文件大小:3k
源码类别:

CAD

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. // ButtonXP.cpp : implementation file
  4. //
  5. ///////////////////////////////////////////////////////////////////////////////
  6. #include "stdafx.h"
  7. #include "ButtonXP.h"
  8. #include "Draw.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. ////////////////////////////////////////////////////////////////////////////////
  15. CButtonXP::CButtonXP ()
  16. {
  17. }
  18. ////////////////////////////////////////////////////////////////////////////////
  19. CButtonXP::~CButtonXP ()
  20. {
  21. }
  22. ////////////////////////////////////////////////////////////////////////////////
  23. void CButtonXP::PreSubclassWindow ()
  24. {
  25.     ModifyStyle (0, BS_OWNERDRAW);
  26.     m_MouseMgr.Init (m_hWnd);
  27. }
  28. ////////////////////////////////////////////////////////////////////////////////
  29. void CButtonXP::DrawItem (LPDRAWITEMSTRUCT pDis)
  30. {
  31.     CBufferDC cDC (pDis->hDC);
  32.     CRect rcItem (pDis->rcItem);
  33.     CFontDC font (cDC, DEFAULT_GUI_FONT);
  34.     CPenDC pen (cDC);
  35.     CBrushDC brush (cDC);
  36.     if ( (pDis->itemState & ODS_DISABLED) ||
  37.          (!m_MouseMgr.MouseOver() && !(pDis->itemState & ODS_SELECTED)) )
  38.     {
  39.         if ( (pDis->itemState & ODS_FOCUS) ||
  40.             LOWORD(::SendMessage (::GetParent (m_hWnd), DM_GETDEFID, 0, 0)) == GetDlgCtrlID() )
  41.         {
  42.             pen.Color (::GetSysColor (COLOR_3DDKSHADOW));
  43.         }
  44.         else
  45.         {
  46.             pen.Color (::GetSysColor (COLOR_3DSHADOW));
  47.         }
  48.         brush.Color (HLS_TRANSFORM (::GetSysColor (COLOR_3DFACE), +15, 0));
  49.     }
  50.     else
  51.     {
  52.         COLORREF crBorder = ::GetSysColor (COLOR_HIGHLIGHT);
  53.         pen.Color (crBorder);
  54.         if ( (pDis->itemState & ODS_SELECTED) )
  55.         {
  56.             brush.Color (HLS_TRANSFORM (crBorder, +50, -50));
  57.             cDC.SetTextColor (RGB(240,240,240));
  58.         }
  59.         else
  60.         {
  61.             brush.Color (HLS_TRANSFORM (crBorder, +80, -66));
  62.             cDC.SetTextColor (::GetSysColor (COLOR_BTNTEXT));
  63.         }
  64.     }
  65.     if ( (pDis->itemState & ODS_DISABLED) )
  66.     {
  67.         cDC.SetTextColor (::GetSysColor (COLOR_GRAYTEXT));
  68.     }
  69.     else if ( (pDis->itemState & ODS_SELECTED) )
  70.     {
  71.         cDC.SetTextColor (RGB(240,240,240));
  72.     }
  73.     else if ( m_MouseMgr.MouseOver() )
  74.     {
  75.         cDC.SetTextColor (0);
  76.     }
  77.     else
  78.     {
  79.         cDC.SetTextColor (::GetSysColor (COLOR_BTNTEXT));
  80.     }
  81.     cDC.Rectangle (rcItem);
  82.     cDC.SetBkMode (TRANSPARENT);
  83.     cDC.DrawText (CWindowText (this), rcItem, DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  84.     if ( (pDis->itemState & ODS_FOCUS) )
  85.     {
  86.         rcItem.DeflateRect (2, 2);
  87.         cDC.DrawFocusRect (rcItem);
  88.     }
  89. }
  90. ////////////////////////////////////////////////////////////////////////////////
  91. BEGIN_MESSAGE_MAP(CButtonXP, CButton)
  92.     //{{AFX_MSG_MAP(CButtonXP)
  93.     ON_WM_MOUSEMOVE()
  94.     ON_WM_MOUSEOUT()
  95.     //}}AFX_MSG_MAP
  96. END_MESSAGE_MAP()
  97. ////////////////////////////////////////////////////////////////////////////////
  98. void CButtonXP::OnMouseMove (UINT, CPoint)
  99. {
  100.     Default();
  101.     m_MouseMgr.OnMouseMove();
  102. }
  103. ///////////////////////////////////////////////////////////////////////////////
  104. void CButtonXP::OnMouseOut ()
  105. {
  106.     m_MouseMgr.OnMouseOut();
  107. }