// SkinStatusBar.cpp : implementation file // #include "stdafx.h" //#include "dialog.h" #include "SkinStatusBar.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSkinStatusBar CSkinStatusBar::CSkinStatusBar() { } CSkinStatusBar::~CSkinStatusBar() { ClearMemory(); } /************************************************************************/ /* 函数:清除栈; */ /************************************************************************/ void CSkinStatusBar::ClearMemory() { int nCount = m_ptButton.GetCount(); if( nCount == -1 ) return; for (int i(0); iDestroyWindow(); delete pBtn; } m_ptButton.RemoveAll(); } BEGIN_MESSAGE_MAP(CSkinStatusBar, CSkinStatic) //{{AFX_MSG_MAP(CSkinStatusBar) ON_WM_SIZE() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSkinStatusBar message handlers BOOL CSkinStatusBar::LoadBKImage(LPCTSTR szImagePath) { return m_bmpBK.LoadImage(szImagePath); } BOOL CSkinStatusBar::LoadSBImage(LPCTSTR szImagePath) { // 加载前,先清除原有的按钮 [7/22/2013 Zero.t] m_bmpStatusBar.LoadImage(szImagePath); for (int j=0;jDestroyWindow(); delete pBtn; } m_ptButton.RemoveAll(); // 删除了原来的,加载新的 [7/22/2013 Zero.t] CRect rcClient; GetClientRect(&rcClient); int cx=rcClient.Width(); for (int i=0;i<3;i++) { CRect rcButton; rcButton.right =rcClient.right+21*(3-i); rcButton.left =rcButton.right-21 ; rcButton.top=0; rcButton.bottom =30; CEnBitmap bmpButton; m_bmpStatusBar.DrawImage(bmpButton,1,i+1,1,3); UINT nId=m_ltCommands.GetAt(m_ltCommands.FindIndex(i)); CSkinButton *pBtn=new CSkinButton(); // 内存泄漏 [7/22/2013 Zero.t] pBtn->Create("",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,rcButton,this,nId); pBtn->SetBitmap((HBITMAP)bmpButton.m_hObject ); m_ptButton.AddTail(pBtn); } for (int i=0;iSetWindowPos(NULL, cx-(4-i)*21 ,3,21 ,20 ,SWP_NOZORDER ); } return TRUE; } void CSkinStatusBar::SetBasicCommands(CList <Conmmand) { m_ltCommands.RemoveAll (); m_ltCommands.AddTail (<Conmmand); } void CSkinStatusBar::OnSize(UINT nType, int cx, int cy) { CStatic::OnSize(nType, cx, cy); for (int i=0;iSetWindowPos(NULL, cx-(4-i)*21 ,3,21 ,20 ,SWP_NOZORDER ); } }