119 lines
2.2 KiB
C++
Executable File
119 lines
2.2 KiB
C++
Executable File
// BmpProgress.cpp : 实现文件
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "MusicPlayer.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);
|
|
//}
|