位图进度条
作者:
图一 例子效果
玩过破天的朋友知道,游戏更新时进度是用位图表示的,我觉的挺漂亮的,于是自己动手做了一个类来实现那种效果。
这个类的名字叫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的方法名。
结束语
这个东西,比较简单,你可以很容易就使用。
--------------------next---------------------
为什么我调用的时候第一次可以,第二次点ButtonStart却没有了呢?图片是第一次跑完的图片!~
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
{
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();
}
}
( SwordHChen 发表于 2007-8-21 10:40:00)
是不是可不只用其中一张图就可以实现(将图画成反相) ( jcfly 发表于 2004-10-29 16:35:00)
.......................................................
--------------------next---------------------