RTStatusBar.cpp
上传用户:qhonly
上传日期:2013-06-10
资源大小:487k
文件大小:3k
源码类别:

界面编程

开发平台:

Visual C++

  1. // RTStatusBar.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "RTStatusBar.h"
  5. #include "RTDraw.h"
  6. // CRTStatusBar
  7. IMPLEMENT_DYNAMIC(CRTStatusBar, CStatusBar)
  8. CRTStatusBar::CRTStatusBar()
  9. {
  10. }
  11. CRTStatusBar::~CRTStatusBar()
  12. {
  13. }
  14. CBitmap* CRTStatusBar::m_StatusBitmap[5] = {NULL,NULL,NULL,NULL,NULL};
  15. UINT     CRTStatusBar::m_StatusBitmapDrawMode[5] = {0,0,0,0,0};
  16. BOOL     CRTStatusBar::m_IsEnableSkin = TRUE;
  17. BEGIN_MESSAGE_MAP(CRTStatusBar, CStatusBar)
  18. ON_WM_ERASEBKGND()
  19. ON_WM_PAINT()
  20. END_MESSAGE_MAP()
  21. // CRTStatusBar 消息处理程序
  22. BOOL CRTStatusBar::OnEraseBkgnd(CDC* pDC)
  23. {
  24. if(!m_IsEnableSkin)return CStatusBar::OnEraseBkgnd(pDC);
  25. CRect rtClient;
  26. GetWindowRect(&rtClient);
  27. rtClient.SetRect(0,0,rtClient.Width(),rtClient.Height());
  28. if(!CRTDraw::RTDrawBitmap(pDC,&rtClient,m_StatusBitmap[BMP_BACK],m_StatusBitmapDrawMode[BMP_BACK]))
  29.         return CStatusBar::OnEraseBkgnd(pDC);
  30. else
  31. return TRUE;
  32. }
  33. void CRTStatusBar::SetBitmap(CBitmap*  StatusBitmap[], UINT DrawMode[])
  34. {
  35. for(int i = 0; i < 5; i ++)
  36. {
  37. m_StatusBitmap[i] = StatusBitmap[i];
  38. m_StatusBitmapDrawMode[i] = DrawMode[i];
  39. }
  40. }
  41. void CRTStatusBar::OnPaint()
  42. {
  43. if(!m_IsEnableSkin)return CStatusBar::OnPaint();
  44. CPaintDC cDC(this);
  45.     CRect rcItem;
  46.     for ( int i = 0; i < m_nCount; i++ )
  47.     {
  48.         GetItemRect (i, rcItem);
  49. if(i == m_nCount - 1)
  50. {
  51. CRect rcClient;
  52. GetClientRect(&rcClient);
  53. if(rcItem.right < rcClient.right)
  54. {
  55. rcItem.SetRect(rcItem.left,rcItem.top,rcClient.right,rcItem.bottom);
  56. }
  57. }
  58. cDC.Draw3dRect(&rcItem,GetSysColor(COLOR_3DSHADOW),0xFFFFFF);
  59. rcItem.SetRect(rcItem.left + 1,rcItem.top + 1,rcItem.right - 1,rcItem.bottom - 1);
  60. CString itemText;
  61. GetPaneText(i,itemText);
  62. if(m_StatusBitmap[BMP_BACK] != NULL)
  63. {
  64. CRTDraw::RTDrawBitmap(&cDC,&rcItem,m_StatusBitmap[BMP_BACK],m_StatusBitmapDrawMode[BMP_BACK]);
  65. }
  66. CFont TitleFont;
  67. NONCLIENTMETRICS nif;
  68. nif.cbSize = sizeof(nif);
  69. SystemParametersInfo(SPI_GETNONCLIENTMETRICS,sizeof(NONCLIENTMETRICS),&nif,0);
  70. nif.lfCaptionFont.lfWeight = FW_NORMAL;
  71. TitleFont.CreateFontIndirect(&nif.lfCaptionFont);
  72. CFont *pOldFont = cDC.SelectObject(&TitleFont);
  73. int oldBkMode = cDC.SetBkMode(TRANSPARENT);
  74. TEXTMETRIC Metrics;
  75. cDC.GetTextMetrics(&Metrics);
  76. rcItem.top = rcItem.top + (rcItem.Height() - Metrics.tmHeight)/2;
  77. cDC.DrawText(itemText,&rcItem,DT_SINGLELINE);
  78. cDC.SelectObject(pOldFont);
  79.     }
  80. }
  81. BOOL CRTStatusBar::SetIndicators (const UINT* lpIDArray, int nIDCount)
  82. {
  83.     if ( !CStatusBar::SetIndicators (lpIDArray, nIDCount) )
  84.     {
  85.         return false;
  86.     }
  87. if(!m_IsEnableSkin)return TRUE;
  88.     SendMessage (SB_SETMINHEIGHT, 20);
  89.     for ( int i = 0; i < nIDCount; i++ )
  90.     {
  91.         UINT a, b;
  92.         int c;
  93.         GetPaneInfo (i, a, b, c);
  94.         SetPaneInfo (i, a, b|SBPS_NOBORDERS, c);
  95.     }
  96.     return true;
  97. }
  98. void CRTStatusBar::EnableSkin(BOOL IsEnable)
  99. {
  100. m_IsEnableSkin = IsEnable;
  101. }