SkinStatusBar.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. // SkinStatusBar.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. //#include "dialog.h"
  5. #include "SkinStatusBar.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CSkinStatusBar
  13. CSkinStatusBar::CSkinStatusBar()
  14. {
  15. }
  16. CSkinStatusBar::~CSkinStatusBar()
  17. {
  18. ClearMemory();
  19. }
  20. /************************************************************************/
  21. /*
  22. 函数:清除栈;
  23. */
  24. /************************************************************************/
  25. void CSkinStatusBar::ClearMemory()
  26. {
  27. int nCount = m_ptButton.GetCount();
  28. if( nCount == -1 ) return;
  29. for (int i(0); i<nCount; i++ ) {
  30. CSkinButton *pBtn=(CSkinButton *)m_ptButton.GetAt(m_ptButton.FindIndex(i));
  31. pBtn->DestroyWindow();
  32. delete pBtn;
  33. }
  34. m_ptButton.RemoveAll();
  35. }
  36. BEGIN_MESSAGE_MAP(CSkinStatusBar, CSkinStatic)
  37. //{{AFX_MSG_MAP(CSkinStatusBar)
  38. ON_WM_SIZE()
  39. //}}AFX_MSG_MAP
  40. END_MESSAGE_MAP()
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CSkinStatusBar message handlers
  43. BOOL CSkinStatusBar::LoadBKImage(LPCTSTR szImagePath)
  44. {
  45. return m_bmpBK.LoadImage(szImagePath);
  46. }
  47. BOOL CSkinStatusBar::LoadSBImage(LPCTSTR szImagePath)
  48. {
  49. // 加载前,先清除原有的按钮 [7/22/2013 Zero.t]
  50. m_bmpStatusBar.LoadImage(szImagePath);
  51. for (int j=0;j<m_ptButton.GetCount();j++ ){
  52. CRect rcButton;
  53. CSkinButton *pBtn=(CSkinButton *)m_ptButton.GetAt(m_ptButton.FindIndex(j));
  54. pBtn->DestroyWindow();
  55. delete pBtn;
  56. }
  57. m_ptButton.RemoveAll();
  58. // 删除了原来的,加载新的 [7/22/2013 Zero.t]
  59. CRect rcClient;
  60. GetClientRect(&rcClient);
  61. int cx=rcClient.Width();
  62. for (int i=0;i<3;i++) {
  63. CRect rcButton;
  64. rcButton.right =rcClient.right+21*(3-i);
  65. rcButton.left =rcButton.right-21 ;
  66. rcButton.top=0;
  67. rcButton.bottom =30;
  68. CEnBitmap bmpButton;
  69. m_bmpStatusBar.DrawImage(bmpButton,1,i+1,1,3);
  70. UINT nId=m_ltCommands.GetAt(m_ltCommands.FindIndex(i));
  71. CSkinButton *pBtn=new CSkinButton(); // 内存泄漏 [7/22/2013 Zero.t]
  72. pBtn->Create("",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,rcButton,this,nId);
  73. pBtn->SetBitmap((HBITMAP)bmpButton.m_hObject );
  74. m_ptButton.AddTail(pBtn);
  75. }
  76. for (int i=0;i<m_ptButton.GetCount();i++ ) {
  77. CRect rcButton;
  78. CSkinButton *pBtn=(CSkinButton *)m_ptButton.GetAt(m_ptButton.FindIndex(i));
  79. pBtn->SetWindowPos(NULL, cx-(4-i)*21 ,3,21 ,20 ,SWP_NOZORDER );
  80. }
  81. return TRUE;
  82. }
  83. void CSkinStatusBar::SetBasicCommands(CList<UINT,UINT> &ltConmmand)
  84. {
  85. m_ltCommands.RemoveAll ();
  86. m_ltCommands.AddTail (&ltConmmand);
  87. }
  88. void CSkinStatusBar::OnSize(UINT nType, int cx, int cy)
  89. {
  90. CStatic::OnSize(nType, cx, cy);
  91. for (int i=0;i<m_ptButton.GetCount();i++ ) {
  92. CRect rcButton;
  93. CSkinButton *pBtn=(CSkinButton *)m_ptButton.GetAt(m_ptButton.FindIndex(i));
  94. pBtn->SetWindowPos(NULL, cx-(4-i)*21 ,3,21 ,20 ,SWP_NOZORDER );
  95. }
  96. }