⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myprogressctrl.cpp

📁 windows mobile下自绘的进度条
💻 CPP
字号:
// WEProgressCtrl.cpp : 实现文件
//

#include "stdafx.h"
#include "MyProgressCtrl.h"
#include "Proccessbar.h"

// CMyProgressCtrl

IMPLEMENT_DYNAMIC(CMyProgressCtrl, CProgressCtrl)
CMyProgressCtrl::CMyProgressCtrl()
{
	m_nRangeMin	= 0;	//变化范围的最小值
	m_nRangeMax	= 0;	//变化范围的最大值
	m_nPos		= 0;	//当前位置

	m_bmpProgress.LoadBitmap(IDB_BITMAP);
	m_bmpProgress.GetBitmap(&m_bmpData);

	m_isStart = false;
}

CMyProgressCtrl::~CMyProgressCtrl()
{
}

void CMyProgressCtrl::SetRange(int nMin, int nMax)
{
	m_nRangeMin	= nMin;	//变化范围的最小值
	m_nRangeMax	= nMax;	//变化范围的最大值
}

void CMyProgressCtrl::SetPos(int nPos)
{
	m_nPos=nPos;
	Invalidate();
}

void CMyProgressCtrl::DrawPicture(CDC* pDC, CRect rect)
{
	CBitmap		*pOldBitmap;
	CDC*		pMemDC = new CDC;

	//读位图到内存
	pMemDC->CreateCompatibleDC(pDC);
	pOldBitmap = pMemDC->SelectObject(&m_bmpProgress);
	pDC->StretchBlt(rect.left, rect.top, rect.Width(), rect.Height(), pMemDC, 0, 0, m_bmpData.bmWidth, m_bmpData.bmHeight, SRCCOPY);
	pMemDC->SelectObject(pOldBitmap);

	//释放内存
	ReleaseDC(pMemDC);
	delete	pMemDC;
}
BEGIN_MESSAGE_MAP(CMyProgressCtrl, CProgressCtrl)
	ON_WM_PAINT()
	ON_WM_ERASEBKGND()
	//ON_WM_NCPAINT()
END_MESSAGE_MAP()


void CMyProgressCtrl::Start()
{	
	//m_isStart = true;
	while (m_isStart)
	{
		static	int i=0;
		i++;
		if(i>m_nRangeMax)
			i=0;

		Sleep(500);

		SetPos(i);
	}	
}


void CMyProgressCtrl::Stop()
{
	m_isStart = false;
}




void CMyProgressCtrl::OnPaint()
{
	CRect		rectProgress, rectClient;
	float		fPercent;
	int			nLength;
	CPaintDC	dc(this);
	CDC*		pMemDC=new CDC;
	CBitmap		bitmapTemp, *pOldBitmap;

	//获取并计算相关数据
	GetClientRect(rectClient);
	fPercent	= (float)(m_nPos-m_nRangeMin)/(m_nRangeMax-m_nRangeMin);
	nLength		= int(rectClient.Width()*fPercent);
	rectProgress.SetRect(0, 0, nLength, rectClient.Height());

	//创建位图内存
	bitmapTemp.CreateCompatibleBitmap(&dc, rectClient.Width(), rectClient.Height());
	pMemDC->CreateCompatibleDC(&dc);
	pOldBitmap=pMemDC->SelectObject(&bitmapTemp);

	//填充客户区
	pMemDC->FillSolidRect(&rectClient, RGB(240, 240, 240));
	DrawPicture(pMemDC, rectProgress);

	dc.BitBlt(0, 0, rectClient.Width(), rectClient.Height(), pMemDC, 0, 0, SRCCOPY);
	pMemDC->SelectObject(pOldBitmap);

	ReleaseDC(pMemDC);
	delete	pMemDC;
}

BOOL CMyProgressCtrl::OnEraseBkgnd(CDC* pDC)
{
	CRect	rectProgress;
	CBrush	brushFrame;
	CDC*	pDC2= GetWindowDC();

	//设置编辑框的区域
	GetWindowRect(rectProgress);
	ScreenToClient(rectProgress);
	rectProgress.OffsetRect(CSize(1, 1));

	//创建画笔
	brushFrame.CreateSolidBrush(RGB(100, 100, 100));

	//画边框
	pDC2->FrameRect(rectProgress, &brushFrame);

	ReleaseDC(pDC2);

	return true;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -