SkinToolBar.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. // SkinToolBar.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. //#include "dialog.h"
  5. #include "SkinToolBar.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CSkinToolBar
  13. CSkinToolBar::CSkinToolBar()
  14. {
  15. m_bShow=TRUE;
  16. }
  17. CSkinToolBar::~CSkinToolBar()
  18. {
  19. #if 0
  20. for (int i=0;i<m_ptButton.GetCount();i++ ){
  21. //delete m_ptButton.GetAt(m_ptButton.FindIndex(i));
  22. CSkinButton *pBtn = (CSkinButton*)m_ptButton.GetAt(m_ptButton.FindIndex(i));
  23. pBtn->DestroyWindow();
  24. delete pBtn;
  25. pBtn = NULL;
  26. }
  27. m_ptButton.RemoveAll();
  28. #else
  29. ClearMemory();
  30. #endif
  31. }
  32. void CSkinToolBar::ClearMemory()
  33. {
  34. int nCount = m_ptButton.GetCount();
  35. if ( nCount == -1) return;
  36. for (int i=0;i<nCount;i++ ){
  37. CSkinButton *pBtn = (CSkinButton*)m_ptButton.GetAt(m_ptButton.FindIndex(i));
  38. pBtn->DestroyWindow();
  39. delete pBtn;
  40. }
  41. m_ptButton.RemoveAll();
  42. }
  43. BEGIN_MESSAGE_MAP(CSkinToolBar, CSkinStatic)
  44. //{{AFX_MSG_MAP(CSkinToolBar)
  45. //}}AFX_MSG_MAP
  46. END_MESSAGE_MAP()
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CSkinToolBar message handlers
  49. BOOL CSkinToolBar::LoadTBImage(UINT uIDRes,COLORREF crBack)
  50. {
  51. CBitmap bmp;
  52. if (m_bmpToolBar.m_hObject) {
  53. bmp.LoadBitmap(uIDRes);
  54. m_bmpToolBar.SetBitmap((HBITMAP)bmp.m_hObject );
  55. return TRUE;
  56. }
  57. else
  58. return m_bmpToolBar.LoadBitmap(uIDRes);
  59. }
  60. void CSkinToolBar::SetSizes( SIZE sizeButton, SIZE sizeImage )
  61. {
  62. int nButtonCount=m_bmpToolBar.GetWidth()/sizeImage.cx ;
  63. m_rcButton.RemoveAll();
  64. for (int j=0;j<m_ptButton.GetCount();j++ ) {
  65. //CRect rcButton;// Õâ¸ö¾Ö²¿±äÁ¿Ã»Óᣠ[7/22/2013 Zero.t]
  66. CSkinButton *pBtn=(CSkinButton *)m_ptButton.GetAt(m_ptButton.FindIndex(j));
  67. pBtn->DestroyWindow();
  68. delete pBtn;
  69. }
  70. m_ptButton.RemoveAll();
  71. for (int i=0;i<nButtonCount;i++) {
  72. CRect rcButton;
  73. rcButton.left =30+ i*sizeButton.cx ;
  74. rcButton.right =rcButton.left+sizeButton.cx;
  75. rcButton.top=2;
  76. rcButton.bottom =sizeButton.cy+2;
  77. CEnBitmap bmpButton;
  78. m_bmpToolBar.DrawImage(bmpButton,i+1,1,nButtonCount,1);
  79. UINT nId=m_ltCommands.GetAt(m_ltCommands.FindIndex(i));
  80. CSkinButton *pBtn=new CSkinButton();
  81. pBtn->Create("",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_NOTIFY,rcButton,this,nId);
  82. pBtn->SetBitmap((HBITMAP)bmpButton.m_hObject );
  83. pBtn->SetStyle(STYLE_TOOLBAR);
  84. pBtn->SetTextColor(m_crText);
  85. m_rcButton.Add(rcButton);
  86. m_ptButton.AddTail(pBtn);
  87. }
  88. RecalcLayout();
  89. }
  90. void CSkinToolBar::RecalcLayout()
  91. {
  92. CPaintDC dc(this);
  93. CSkinButton *pBtn;
  94. CRect rc(0,0,30,0);
  95. for (int i=0;i<m_ptButton.GetCount();i++ )
  96. {
  97. pBtn=(CSkinButton *)m_ptButton.GetAt(m_ptButton.FindIndex(i));
  98. CString strText;
  99. CRect &rcButton=m_rcButton.GetAt(i) ;
  100. UINT nId=m_ltCommands.GetAt(m_ltCommands.FindIndex(i));
  101. strText.LoadString(nId);
  102. TEXTMETRIC tm ;
  103. dc.GetTextMetrics( &tm );
  104. int nWidth=strText.GetLength()* tm.tmAveCharWidth;
  105. rcButton.right = rc.right+rcButton.Width()+nWidth;
  106. rcButton.left =rc.right ;
  107. pBtn->SetWindowPos(NULL, rcButton.left ,rcButton.top ,rcButton.Width() ,rcButton.Height() ,SWP_NOZORDER );
  108. rc=rcButton;
  109. }
  110. }
  111. void CSkinToolBar::SetBasicCommands(CList<UINT,UINT> &ltConmmand)
  112. {
  113. m_ltCommands.RemoveAll ();
  114. m_ltCommands.AddTail (&ltConmmand);
  115. }