Chinaunix首页 | 论坛 | 博客
  • 博客访问: 368097
  • 博文数量: 715
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:46
文章分类

全部博文(715)

文章存档

2011年(1)

2008年(714)

我的朋友

分类:

2008-10-13 16:39:48

位图进度条

作者:




图一 例子效果

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

这个类的名字叫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---------------------

阅读(165) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~