www.pudn.com > MediaPlayer.rar > BmpProgCtrl.cpp
// BmpProgCtrl.cpp : implementation file
//
/*
*/
#include "stdafx.h"
#include "BmpProgCtrl.h"
#include "resource.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CBmpProgCtrl
CBmpProgCtrl::CBmpProgCtrl()
{
m_nLower = 1;
m_nUpper = 100;
m_nStep = 1;
m_nPos = 0;
pDCBack = new CDC;
pDCFore = new CDC;
bmpBack.LoadBitmap(IDB_BACK);
bmpFore.LoadBitmap(IDB_FORE);
Prog=FALSE;
}
CBmpProgCtrl::~CBmpProgCtrl()
{
delete pDCBack;
delete pDCFore;
}
BEGIN_MESSAGE_MAP(CBmpProgCtrl, CStatic)
//{{AFX_MSG_MAP(CBmpProgCtrl)
ON_WM_PAINT()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBmpProgCtrl message handlers
void CBmpProgCtrl::SetRange(int nLower, int nUpper)
{
if(nUpper > nLower)
{
m_nLower = nLower;
m_nUpper = nUpper;
}
else
{
m_nLower = nUpper;
m_nUpper = nLower;
}
}
int CBmpProgCtrl::SetPos(int nPos)
{
if(m_nLower <= nPos && m_nUpper >= nPos)
{
m_nPos = nPos;
return 1;
}
return 0;
}
int CBmpProgCtrl::OffsetPos(int nPos)
{
CRect tempRect = m_rect;
tempRect.left =(long)(m_length*m_rect.Width());
m_nPos += nPos;
if(m_nPos>m_nUpper)
{
m_nPos = m_nUpper;
InvalidateRect(&tempRect);
return 0;
}
InvalidateRect(&tempRect);
return 1;
}
int CBmpProgCtrl::SetStep(int nStep)
{
if(nStep>0)
{
m_nStep = nStep;
return 1;
}
return 0;
}
int CBmpProgCtrl::StepIt()
{
CRect tempRect = m_rect;
tempRect.left = (long)(m_length*m_rect.Width());
m_nPos += m_nStep;
///////////////////////////////////////////////////
/* m_length = (float)m_nPos/(m_nUpper-m_nLower);
CPaintDC dc(this);
GetClientRect(&m_rect);
pDCBack->CreateCompatibleDC(&dc);
pDCFore->CreateCompatibleDC(&dc);
bmpBack.GetBitmap(&bmback);
bmpFore.GetBitmap(&bmfore);
pDCBack->SelectObject(bmpBack);
dc.StretchBlt(0,0,m_rect.Width(),m_rect.Height(),pDCBack,0,0,bmback.bmWidth,bmback.bmHeight,SRCCOPY);
if(Prog)
{
(CBitmap*)pDCFore->SelectObject(bmpFore);
dc.StretchBlt(0,0,(int)(m_rect.Width()*m_length),m_rect.Height(),pDCFore,0,0,(int)(bmfore.bmWidth*m_length),bmfore.bmHeight,SRCCOPY);
}
pDCBack->DeleteDC();
pDCFore->DeleteDC();*/
/////////////////////////////////////////////////////////
if(m_nPos>m_nUpper)
{
m_nPos = m_nUpper;
InvalidateRect(&tempRect);
return 0;
}
InvalidateRect(&tempRect);
return 1;
}
void CBmpProgCtrl::OnPaint()
{
m_length = (float)m_nPos/(m_nUpper-m_nLower);
CPaintDC dc(this);
GetClientRect(&m_rect);
pDCBack->CreateCompatibleDC(&dc);
pDCFore->CreateCompatibleDC(&dc);
bmpBack.GetBitmap(&bmback);
bmpFore.GetBitmap(&bmfore);
pDCBack->SelectObject(bmpBack);
dc.StretchBlt(0,0,m_rect.Width(),m_rect.Height(),pDCBack,0,0,bmback.bmWidth,bmback.bmHeight,SRCCOPY);
if(Prog)
{
(CBitmap*)pDCFore->SelectObject(bmpFore);
dc.StretchBlt(0,0,(int)(m_rect.Width()*m_length),m_rect.Height(),pDCFore,0,0,(int)(bmfore.bmWidth*m_length),bmfore.bmHeight,SRCCOPY);
}
pDCBack->DeleteDC();
pDCFore->DeleteDC();
}
int CBmpProgCtrl::GetPos()
{
return m_nPos;
}
void CBmpProgCtrl::GetRange(int &lower, int &upper)
{
lower = m_nLower;
upper = m_nUpper;
}
void CBmpProgCtrl::RoolBack(BOOL Progress)
{
Prog = Progress;
InvalidateRect(&m_rect);
}
BOOL CBmpProgCtrl::OnEraseBkgnd(CDC *pDC)
{
return TRUE;
}
void CBmpProgCtrl::SetText(CString Text)
{
SetWindowText(Text);
}