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

界面编程

开发平台:

Visual C++

  1. // RTHeaderCtrl.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "RTHeaderCtrl.h"
  5. #include "RTDraw.h"
  6. #define HDF_SORTUP              0x0400
  7. #define HDF_SORTDOWN            0x0200
  8. // CRTHeaderCtrl
  9. IMPLEMENT_DYNAMIC(CRTHeaderCtrl, CHeaderCtrl)
  10. CRTHeaderCtrl::CRTHeaderCtrl()
  11. {
  12. }
  13. CRTHeaderCtrl::~CRTHeaderCtrl()
  14. {
  15. }
  16. BOOL CRTHeaderCtrl::m_IsEanbleRTStyle = TRUE;
  17. CBitmap* CRTHeaderCtrl::m_HeaderBitmap[5] = {NULL,NULL,NULL,NULL,NULL};
  18. UINT     CRTHeaderCtrl::m_HeaderBitmapDrawMode[5] = {0,0,0,0,0};
  19. BEGIN_MESSAGE_MAP(CRTHeaderCtrl, CHeaderCtrl)
  20. ON_WM_ERASEBKGND()
  21. ON_WM_PAINT()
  22. END_MESSAGE_MAP()
  23. // CRTHeaderCtrl 消息处理程序
  24. void CRTHeaderCtrl::EnableSkin(BOOL IsEnable)
  25. {
  26. m_IsEanbleRTStyle = IsEnable;
  27. }
  28. void CRTHeaderCtrl::SetHeaderBitmap(CBitmap* pHeader[],UINT DrawMode[])
  29. {
  30. for(int i = 0; i < 5; i++)
  31. {
  32. m_HeaderBitmap[i] = pHeader[i];
  33. m_HeaderBitmapDrawMode[i] = DrawMode[i];
  34. }
  35. }
  36. BOOL CRTHeaderCtrl::OnEraseBkgnd(CDC* pDC)
  37. {
  38. if(!m_IsEanbleRTStyle)
  39. return CHeaderCtrl::OnEraseBkgnd(pDC);
  40. else
  41. return FALSE;
  42. }
  43. void CRTHeaderCtrl::OnPaint()
  44. {
  45. if(!m_IsEanbleRTStyle)return CHeaderCtrl::OnPaint();
  46. CPaintDC dc(this); // device context for painting
  47. CRect rect, rectItem, clientRect;
  48. GetClientRect(&rect);
  49. GetClientRect(&clientRect);
  50. CMemDC memDC(&dc, rect);
  51. CRTDraw::RTDrawBitmap(&memDC,&rect,m_HeaderBitmap[BMP_BACK],m_HeaderBitmapDrawMode[BMP_BACK]);
  52. int nItems = GetItemCount();
  53. memDC.SetBkMode(TRANSPARENT);
  54. CFont* font = GetFont();
  55. CFont* def_font = memDC.SelectObject(font);
  56. for(int i = 0; i <nItems; i++)
  57. {
  58. TCHAR buf[256];
  59. HD_ITEM hditem;
  60. hditem.mask = HDI_TEXT | HDI_FORMAT | HDI_ORDER;
  61. hditem.pszText = buf;
  62. hditem.cchTextMax = 255;
  63. GetItem( i, &hditem );
  64. GetItemRect(i, &rect);
  65. if(hditem.fmt & HDF_SORTUP)
  66. CRTDraw::RTDrawBitmap(&memDC,&rect,m_HeaderBitmap[BMP_FOCUS],m_HeaderBitmapDrawMode[BMP_FOCUS]);
  67. else if(hditem.fmt & HDF_SORTDOWN)
  68. CRTDraw::RTDrawBitmap(&memDC,&rect,m_HeaderBitmap[BMP_DOWN],m_HeaderBitmapDrawMode[BMP_DOWN]);
  69. else
  70. CRTDraw::RTDrawBitmap(&memDC,&rect,m_HeaderBitmap[BMP_NORMAL],m_HeaderBitmapDrawMode[BMP_NORMAL]);
  71. UINT uFormat = DT_SINGLELINE | DT_NOPREFIX | DT_VCENTER | DT_END_ELLIPSIS ;
  72. CRect rtText(&rect);
  73. if((hditem.fmt & HDF_RIGHT) == HDF_RIGHT)
  74. {
  75. rtText.right -= 6;
  76. uFormat |= DT_RIGHT;
  77. }
  78. else if((hditem.fmt & HDF_CENTER) == HDF_CENTER)
  79. uFormat |= DT_CENTER;
  80. else
  81. {
  82. rtText.left += 6;
  83. uFormat |= DT_LEFT;
  84. }
  85. memDC.DrawText(buf, &rtText, uFormat);
  86. }
  87. memDC.SelectObject(def_font);
  88. }