vckbase 位图进度条及我个人修改

位图进度条

作者:徐云飞

下载本文示例源代码


玩过破天的朋友知道,游戏更新时进度是用位图表示的,我觉的挺漂亮的,于是自己动手做了一个类来实现那种效果。

这个类的名字叫CBmpProgCtrl,继承于CStatic,使用方法如下。

1、首先要将BmpProgCtrl.h和BmpProgCtrl.cpp添加到工程中。

2、导入两幅位图,作为前景和背景。资源标识分别为IDB_FORE和IDB_BACK.

3、在对话框上,放置一个"Static Text"控件,修改其ID,只要不是默认的IDC_STATIC就可以了。

4、让这个控件和一个Control类型的变量关联,如变量名可以叫m_bmpprog。

5、找到该变量定义的地方,应该是CStatic m_bmpprog,修改CStatic为CBmpProgCtrl。并将头文件BmpProgCtrl.h包含进来。

6、调用该类的方法。

类成员方法介绍

void GetRange(int &lower,int &upper)返回进度条范围。
int GetPos()获得当前位置
int StepIt( )以当前步长使进度条增长
int SetStep( int nStep )设置步长
int SetPos( int nPos )设置位置
void SetRange( int nLower, int nUpper )设置进度条范围。

具体的可以看源代码。你可以修改它以符合自己的需要。你可能觉的这些方法很熟悉,是的,我参考了CProgressCtrl的方法名。

结束语

这个东西,比较简单,你可以很容易就使用。




原类有个bug:就是在显示滚动的时候会闪烁,这是因为背景图片放入了OnPaint内不断地刷新。

可以把背景放入OnEraseBkgnd内实现,并且最后reuturn true; 前景在OnPaint内实现,即可解决! ( fireway2008 发表于 2009-7-13 11:22:00)
 
尊敬的用户:
您好!

代码之音「http://www.code1234567.com/」——全球开放源代码搜寻中心,为软件开发人员提供最全面、最准确的软件源代码搜寻服务。搜寻内容涉及ASP,PHP,.NET,JSP,JAVA,VC,VB,Delphi,PB等领域。 


代码之音「http://www.code1234567.com/」敬上! 
( code1234567 发表于 2009-6-10 17:39:00)
 
为什么我调用的时候第一次可以,第二次点ButtonStart却没有了呢?图片是第一次跑完的图片!~
////////////////////////////////////////////shizhixin:这个我尝试,没成功
void CBmpProgressDemoDlg::OnButtonStart() 
{
GetDlgItem(IDC_BUTTON_START)->EnableWindow(FALSE); // 开始无效

m_Progress = 0;
m_TotProgress = 5;
m_Static_BmpPro.SetRange(m_Progress, m_TotProgress);
m_Static_BmpPro.SetPos(0);
m_Static_BmpPro.StepIt();

AfxBeginThread((AFX_THREADPROC)InitProgress, this);
}

DWORD InitProgress(LPVOID pParam)
{
CBmpProgressDemoDlg * pDlg = (CBmpProgressDemoDlg *)pParam;

pDlg->ProgressControl();

return TRUE;
}

void CBmpProgressDemoDlg::ProgressControl()
{
for (UINT i=0; i<m_TotProgress; i++)
{
Sleep(300);
AddProgress();
}

GetDlgItem(IDC_BUTTON_START)->EnableWindow(TRUE); // 开始有效
}

void CBmpProgressDemoDlg::AddProgress()
{
if ((++m_Progress) <= m_TotProgress)
{
m_Static_BmpPro.SetPos(m_Progress);
m_Static_BmpPro.StepIt();
}
}

 


///////////////////////////////

shizhixin:

为什么我调用的时候第一次可以,第二次点ButtonStart却没有了呢?图片是第一次跑完的图片!~

再次调用的时候要初始化图片以及pos

 

void CBmpProgCtrl::InitProg()
{
 m_nLower = 1;
 m_nUpper = 100;
 m_nStep = 1;
 m_nPos = 0;
 bmpBack.Detach();//如果不附加再次loadbitmap会有问题,没有释放bitmap!!
 bmpFore.Detach();
 bmpBack.LoadBitmap(IDB_BACK);
 bmpFore.LoadBitmap(IDB_FORE);
 Invalidate();
 m_nBackCor=1;
}

你可能感兴趣的:(.net,jsp,asp,vb,button,Delphi)