SkinTabCtrl.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. // SkinTabCtrl.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. //#include "dialog.h"
  5. #include "SkinTabCtrl.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CSkinTabCtrl
  13. CSkinTabCtrl::CSkinTabCtrl()
  14. {
  15. m_tabCurrent=0;
  16. }
  17. CSkinTabCtrl::~CSkinTabCtrl()
  18. {
  19. for (int i=0;i<m_ImageArray.GetSize();i++ ) {
  20. delete m_ImageArray[i];
  21. }
  22. m_ImageArray.RemoveAll();
  23. }
  24. void CSkinTabCtrl::ClearMemory()
  25. {
  26. int nCount = m_ImageArray.GetSize();
  27. if ( nCount == -1 ) return;
  28. for (int i(0); i<nCount; i++ ) {
  29. delete (CEnBitmap*)m_ImageArray[i];
  30. }
  31. m_ImageArray.RemoveAll();
  32. }
  33. BEGIN_MESSAGE_MAP(CSkinTabCtrl, CStatic)
  34. //{{AFX_MSG_MAP(CSkinTabCtrl)
  35. ON_WM_ERASEBKGND()
  36. ON_WM_PAINT()
  37. ON_WM_LBUTTONDOWN()
  38. ON_WM_MOUSEMOVE()
  39. ON_WM_LBUTTONUP()
  40. //}}AFX_MSG_MAP
  41. END_MESSAGE_MAP()
  42. /////////////////////////////////////////////////////////////////////////////
  43. // CSkinTabCtrl message handlers
  44. void CSkinTabCtrl::LoadBitmap(LPCTSTR szImagePath)
  45. {
  46. m_bmpTabBk.LoadImage(szImagePath);
  47. }
  48. BOOL CSkinTabCtrl::OnEraseBkgnd(CDC* pDC)
  49. {
  50. // TODO: Add your message handler code here and/or call default
  51. return TRUE;
  52. }
  53. void CSkinTabCtrl::OnPaint()
  54. {
  55. CPaintDC dc(this); // device context for painting
  56. CEnBitmap bmpTabBk;
  57. m_bmpTabBk.Draw( &dc, m_bmpTabBk.GetRect() );
  58. CEnBitmap *pBmpTabActive;
  59. pBmpTabActive=(CEnBitmap *)m_ImageArray[m_tabCurrent];
  60. CRect rc(0,m_tabCurrent*pBmpTabActive->GetHeight(), pBmpTabActive->GetWidth(),(m_tabCurrent+1)*pBmpTabActive->GetHeight());
  61. pBmpTabActive->StretchDraw(&dc,&rc,pBmpTabActive->GetRect() );
  62. }
  63. void CSkinTabCtrl::OnLButtonDown(UINT nFlags, CPoint point)
  64. {
  65. // TODO: Add your message handler code here and/or call default
  66. CRect rc = m_bmpTabBk.GetRect();
  67. if ( point.y<44*4) {
  68. m_tabCurrent=point.y/(m_bmpTabBk.GetHeight()/4 );
  69. ::SetCursor(AfxGetApp()->LoadCursor(IDC_HANDCUR ));
  70. Invalidate();
  71. UpdateWindow();
  72. }
  73. CStatic::OnLButtonDown(nFlags, point);
  74. }
  75. void CSkinTabCtrl::AddTab(LPCTSTR szImagePath)
  76. {
  77. CEnBitmap *pBmp=new CEnBitmap();
  78. pBmp->LoadImage(szImagePath);
  79. m_ImageArray.Add(pBmp);
  80. }
  81. void CSkinTabCtrl::OnMouseMove(UINT nFlags, CPoint point)
  82. {
  83. // TODO: Add your message handler code here and/or call default
  84. if (point.y<44*4)
  85. ::SetCursor(AfxGetApp()->LoadCursor(IDC_HANDCUR ));
  86. CStatic::OnMouseMove(nFlags, point);
  87. }
  88. void CSkinTabCtrl::OnLButtonUp(UINT nFlags, CPoint point)
  89. {
  90. if (point.y<44*4)
  91. ::SetCursor(AfxGetApp()->LoadCursor(IDC_HANDCUR ));
  92. CStatic::OnLButtonUp(nFlags, point);
  93. }
  94. // 这个函数暂时不用,这个removeall也是没有删除内存的。
  95. void CSkinTabCtrl::Clear()
  96. {
  97. // for (int i=0;i<m_ImageArray.GetCount();i++ ) {
  98. // //delete m_ptButton.GetAt(m_ptButton.FindIndex(i));
  99. // CEnBitmap *pBmp = (CEnBitmap*)m_ImageArray.GetAt(i);
  100. // //pBmp->DestroyWindow();
  101. // delete pBmp;
  102. // pBmp = NULL;
  103. // }
  104. m_ImageArray.RemoveAll();
  105. }