// BmpProgress.cpp : 实现文件 // #include "stdafx.h" #include "MediaPlayer.h" #include "BmpProgress.h" // CBmpProgress IMPLEMENT_DYNAMIC(CBmpProgress, CProgressCtrl) CBmpProgress::CBmpProgress() { m_NormalID = 0; m_DownID = 0; m_Min = 0; m_Max = 0; } CBmpProgress::~CBmpProgress() { m_BackDC.DeleteDC(); m_FrontDC.DeleteDC(); } BEGIN_MESSAGE_MAP(CBmpProgress, CProgressCtrl) ON_WM_PAINT() ON_WM_ERASEBKGND() // ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() // CBmpProgress 消息处理程序 void CBmpProgress::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CProgressCtrl::OnPaint() if (m_NormalID && m_DownID) { dc.BitBlt(0,0,m_Pos,m_bmpSize.cy,&m_FrontDC,0,0,SRCCOPY); dc.BitBlt(m_Pos,0,m_bmpSize.cx - m_Pos + 1,m_bmpSize.cy,&m_BackDC,m_Pos,0,SRCCOPY); } } BOOL CBmpProgress::OnEraseBkgnd(CDC* pDC) { // TODO: 在此添加消息处理程序代码和/或调用默认值 return FALSE; //return CProgressCtrl::OnEraseBkgnd(pDC); } void CBmpProgress::LoadBitmap(int iNormal, int iDown) { m_NormalID = iNormal; m_DownID = iDown; CBitmap bmpBackground; BITMAP bmpInfo; bmpBackground.LoadBitmap(m_NormalID); bmpBackground.GetBitmap(&bmpInfo); m_BackDC.CreateCompatibleDC(NULL); m_BackDC.SelectObject(&bmpBackground); m_bmpSize.cx = bmpInfo.bmWidth; m_bmpSize.cy = bmpInfo.bmHeight; bmpBackground.DeleteObject(); bmpBackground.LoadBitmap(m_DownID); m_FrontDC.CreateCompatibleDC(NULL); m_FrontDC.SelectObject(&bmpBackground); bmpBackground.DeleteObject(); } void CBmpProgress::SetPos(int nPos) { if (m_Max - m_Min > 0) { m_Pos = nPos * m_bmpSize.cx/(m_Max - m_Min); Invalidate(); } else { m_Max = m_Min = 0; } Invalidate(); } void CBmpProgress::SetRange(int nMin, int nMax) { m_Max = nMax; m_Min = nMin; } //void CBmpProgress::OnLButtonDown(UINT nFlags, CPoint point) //{ // // TODO: 在此添加消息处理程序代码和/或调用默认值 // CRect rc; // GetClientRect(&rc); // // int iPos = (point.x * (m_Max - m_Min)) / (rc.right - rc.left); // // SetPos(iPos); // // CProgressCtrl::OnLButtonDown(nFlags, point); //}