简单封装的一个彩色进度条原创.docx
- 文档编号:11673760
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:17
- 大小:18.74KB
简单封装的一个彩色进度条原创.docx
《简单封装的一个彩色进度条原创.docx》由会员分享,可在线阅读,更多相关《简单封装的一个彩色进度条原创.docx(17页珍藏版)》请在冰豆网上搜索。
简单封装的一个彩色进度条原创
简单封装的一个彩色进度条【原创】
//=========================================================
//
//Copyright(c)2000-2004iWiseTechnologies,Co.Ltd.
//AllRightsReserved.
//
//Product:
iW988
//File:
GradientProgressCtrl.h
//Created:
天衣有缝
//
//Description:
2004.12.2820:
12:
00
//ValueAddedmainprogramforiW988.
//Contact:
//waterpub@
//
//=========================================================
#pragmaonce
classCGradientProgressCtrl:
publicCProgressCtrl
{
public:
CGradientProgressCtrl();//构造
virtual~CGradientProgressCtrl();//析构
intSetPos(intnPos);//设置位置
intSetStep(intnStep);//设置步进值
voidSetRange(intnLower,intnUpper);//设置范围
intSetText(constchar*pText,BOOLbRepaint=TRUE);//设置显示文字
public:
voidShowPercent(BOOLbShowPercent=TRUE){m_bShowPercent=bShowPercent;} //显示百分比
voidShowText(BOOLbShowText=TRUE){m_bShowText=bShowText;} //显示文字
public:
COLORREFGetTextColor(void){returnm_clrText;}//取得字体颜色
COLORREFGetBkColor(void){returnm_clrBkGround;}//取得背景颜色
COLORREFGetStartColor(void){returnm_clrStart;}//取得开始颜色
COLORREFGetEndColor(void){returnm_clrEnd;}//取得结束颜色
voidSetStartColor(COLORREFcolor){m_clrStart=color;}//设置字体颜色
voidSetEndColor(COLORREFcolor){m_clrEnd=color;}//设置背景颜色
voidSetTextColor(COLORREFcolor){m_clrText=color;}//设置开始颜色
voidSetBkColor(COLORREFcolor) //设置结束颜色
{
m_clrBkGround=color;
m_BKGroundBrush.DeleteObject();
m_BKGroundBrush.CreateSolidBrush(m_clrBkGround);
}
private:
voidDraw(CPaintDC*pDC,constRECT&rectClient,constint&nMaxWidth);
afx_msgvoidOnPaint();
DECLARE_MESSAGE_MAP()
private:
//变量定义
intm_nLower;//最小值
intm_nUpper;//最大值
intm_nStep ;//步进值
intm_nCurPos;//当前值
COLORREFm_clrStart ;//起始颜色
COLORREFm_clrEnd;//结束颜色
COLORREFm_clrBkGround;//背景颜色
COLORREFm_clrText;//文本颜色
BOOLm_bShowPercent;//显示百分比
BOOLm_bShowText;//显示文字
charm_Text[32];//文字:
如显示拷贝速度
charm_Percent[4];//文字:
百分比
CBrushm_BKGroundBrush;//背景刷子
CBrushm_TempBrush; //临时刷子
private:
//内嵌类
classCMemDC:
publicCDC//内存设备环境
{
public:
CMemDC(CDC*pDC):
CDC()
{
ASSERT(pDC!
=NULL);
m_pDC=pDC;
m_pOldBitmap=NULL;
m_bMemDC=!
pDC->IsPrinting();
//图形设备还是打印机设备
if(m_bMemDC)
{
pDC->GetClipBox(&m_rect);
CreateCompatibleDC(pDC);
m_bitmap.CreateCompatibleBitmap(pDC,m_rect.Width(),m_rect.Height());
m_pOldBitmap=SelectObject(&m_bitmap);
SetWindowOrg(m_rect.left,m_rect.top);
}
else//为相关的现有设备准备打印
{
m_bPrinting=pDC->m_bPrinting;
m_hDC=pDC->m_hDC;
m_hAttribDC=pDC->m_hAttribDC;
}
}
virtual~CMemDC()
{
if(m_bMemDC)
{
m_pDC->BitBlt(m_rect.left,
m_rect.top,
m_rect.Width(),
m_rect.Height(),
this,
m_rect.left,
m_rect.top,
SRCCOPY
);
SelectObject(m_pOldBitmap);
}
else
{
m_hDC=m_hAttribDC=NULL;
}
}
CMemDC*operator->()
{
returnthis;
}
operatorCMemDC*()
{
returnthis;
}
private:
CBitmapm_bitmap;
CBitmap*m_pOldBitmap;//
CDC*m_pDC; //
CRectm_rect;//
BOOLm_bMemDC;//
};
};
//=========================================================
//
//Copyright(c)2000-2004iWiseTechnologies,Co.Ltd.
//AllRightsReserved.
//
//Product:
iW988
//File:
GradientProgressCtrl.cpp
//Created:
天衣有缝
//
//Description:
//ValueAddedmainprogramforiW988.
//Contact:
//waterpub@
//
//=========================================================
#include"stdafx.h"
#include"GradientProgressCtrl.h"
CGradientProgressCtrl:
:
CGradientProgressCtrl()
{
//控件初始化
m_nLower =0;
m_nUpper =100 ;
m_nCurPos =0;
m_nStep =1;
//初始化显示颜色
m_clrStart=COLORREF(RGB(255,0,0));
m_clrEnd=COLORREF(RGB(0,0,255));
m_clrBkGround=:
:
GetSysColor(COLOR_3DFACE) ;
m_clrText=COLORREF(RGB(255,255,255));
//显示百分比,文字
m_bShowPercent=TRUE;
m_bShowText=TRUE;
m_BKGroundBrush.CreateSolidBrush(m_clrBkGround);
memset(m_Text,0,32);
}
CGradientProgressCtrl:
:
~CGradientProgressCtrl()
{
m_BKGroundBrush.DeleteObject();
}
BEGIN_MESSAGE_MAP(CGradientProgressCtrl,CProgressCtrl)
ON_WM_PAINT()
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CGradientProgressCtrl消息处理程序
voidCGradientProgressCtrl:
:
SetRange(intnLower,intnUpper)
{
//设置进度条的范围
m_nLower=nLower;
m_nUpper=nUpper;
m_nCurPos=nLower;
CProgressCtrl:
:
SetRange(nLower,nUpper);
CProgressCtrl:
:
SetPos(nLower);
}
intCGradientProgressCtrl:
:
SetStep(intnStep)
{
//设置步进值
m_nStep=nStep;
return(CProgressCtrl:
:
SetStep(nStep));
}
intCGradientProgressCtrl:
:
SetPos(intnPos)
{
//设置进度条位置
m_nCurPos=nPos;
return(CProgressCtrl:
:
SetPos(nPos));
}
intCGradientProgressCtrl:
:
SetText(constchar*pText,BOOLbRepaint)
{
//显示的文字
strcpy(m_Text,pText);
if(bRepaint&&m_bShowText)
{
Invalidate(TRUE);
}
return0;
}
voidCGradientProgressCtrl:
:
OnPaint()
{
CPaintDCdc(this);//设备环境
//TODO:
重画进度条
RECTrectClient;
GetClientRect(&rectClient);
if(m_nCurPos<=m_nLower||m_nCurPos>m_nUpper)
{
//不在范围之内直接以背景色填充
dc.FillRect(&rectClient,&m_BKGroundBrush);
return;
}
//绘制进度条本身
floatmaxWidth((float)m_nCurPos/(float)m_nUpper*(float)rectClient.right);
Draw(&dc,rectClient,(int)maxWidth);
//文字显示
dc.SetTextColor(m_clrText);
dc.SetBkMode(TRANSPARENT);
HGDIOBJhOldFont=:
:
SelectObject(dc.m_hDC,:
:
GetStockObject(DEFAULT_GUI_FONT));
if(m_bShowPercent)
{
//显示进程条百分比
sprintf(m_Percent,"%d%%",(int)(100*(float)m_nCurPos/m_nUpper));
dc.DrawText(m_Percent,&rectClient,DT_VCENTER|DT_CENTER|DT_SINGLELINE);
}
if(m_bShowText)
{
//显示进程条文字
rectClient.left=(rectClient.left+rectClient.right)/2;
dc.DrawText(m_Text,&rectClient,DT_VCENTER|DT_CENTER|DT_SINGLELINE);
}
:
:
SelectObject(dc.m_hDC,hOldFont);
//不要调用CProgressCtrl:
:
OnPaint()
}
voidCGradientProgressCtrl:
:
Draw(CPaintDC*pDC,constRECT&rectClient,constint&nMaxWidth)
{
RECTrectFill;//显示区域
floatfStep;//每一步的幅宽
CMemDCmemDC(pDC);
intr,g,b;
floatrStep,gStep,bStep;
//得到不同颜色并相减,返回颜色之间的最大差值
r=(GetRValue(m_clrEnd)-GetRValue(m_clrStart));
g=(GetGValue(m_clrEnd)-GetGValue(m_clrStart));
b=(GetBValue(m_clrEnd)-GetBValue(m_clrStart));
//使进程条显示的总数等于最大的颜色差值
intnSteps=max(abs(r),max(abs(g),abs(b)));
//确定每一颜色填充多大的矩形区域
fStep=(float)rectClient.right/(float)nSteps;
//设置每一颜色填充的步数
rStep=r/(float)nSteps;
gStep=g/(float)nSteps;
bStep=b/(float)nSteps;
r=GetRValue(m_clrStart);
g=GetGValue(m_clrStart);
b=GetBValue(m_clrStart);
//绘制颜色渐变的进程条
for(intiOnBand=0;iOnBand { : : SetRect(&rectFill,(int)(iOnBand*fStep),0,//填充矩形区域的左上角x,y和右下角x,y (int)((iOnBand+1)*fStep),rectClient.bottom+1); VERIFY(m_TempBrush.CreateSolidBrush(RGB(r+rStep*iOnBand, g+gStep*iOnBand, b+bStep*iOnBand))); memDC.FillRect(&rectFill,&m_TempBrush); VERIFY(m_TempBrush.DeleteObject()); //在结束绘制之前,使用背景色填充乘下的的客户区域 if(rectFill.right>nMaxWidth) { : : SetRect(&rectFill,rectFill.right,0,rectClient.right, rectClient.bottom); VERIFY(m_TempBrush.CreateSolidBrush(m_clrBkGround)); memDC.FillRect(&rectFill,&m_TempBrush); VERIFY(m_TempBrush.DeleteObject()); return; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 封装 一个 彩色 进度条 原创