时间条控件制作简明教程

转自百度<cb></cb>symbian吧 > 浏览贴子:http://post.baidu.com/f?kz=139962353

<cc></cc> 易智游戏中的时间条,格斗游戏中的血条,相信是大家在制作游戏当中经常遇到的元素.现在用一简单的教程介绍如何用S60自定义控件完成它,该控件可以随意控制大小,控制时间长度.

该控件将用到,窗口,如何制作自定义,时间周期类等知识.

制作之前首先请大家看看NokiaForum关于自定义控件的原理和教程
CPeriodic的类的使用可以参考sdk中
DeveloperLibrary>>APIReference>>C++APIreference>>TimersandTimingServices>>CPeriodic

1.类的定义:
Code:
classCMyTimerContainer:publicCCoeControl
{
public:

voidConstructL (TIntaSecond,TPointaPoint,TSizeaSize);//aSecond初始的秒数,TPoint控件所在位置;TSize控件大小
~CMyTimerContainer();
voidDraw(constTRect&aRect)const;

staticTIntStart__(TAny*aObject);//周期函数
voidStart_();//周期函数
private://data

CPeriodic*iPeriodic;
TIntiLeft;//剩余的时间
TIntiTotal;//总共的时间
TPointiPoint;//控件所在位置,
TSizeiSize;//控件的大小
}


2.周期函数:

Code:
TIntCMyTimerContainer::Start__(TAny*aObject)
{
((CMyTimerContainer*)aObject)->Start_();//cast,andcallnon-staticfunction
return1;
}

voidCMyTimerContainer::Start_()
{
iLeft--;
if(iLeft==0)
{
DrawNow();
iPeriodic->Cancel();
return;
}
DrawNow();
}
3.绘图函数
Code:


voidCMyTimerContainer::Draw(constTRect&aRect)const
{
CWindowGc&gc=SystemGc();

/*画背景*************************/
gc.SetBrushColor(KRgbBlack);
gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
gc.DrawRect(aRect);

/*画进度条*************************/
gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
gc.SetBrushColor(KRgbRed);
gc.SetPenStyle(CGraphicsContext::ENullPen);
gc.DrawRect(TRect(TSize(iLeft*Size().iWidth/iTotal,iSize.iHeight)));
}

4.控件的构造



Code:
voidCMyTimerContainer::ConstructL(TIntaSecond,TPointaPoint,TSizeaSize)
{
CreateWindowL();
iTotal=aSecond;
iLeft=iTotal;
iPoint=aPoint;
iSize=aSize;
iPeriodic=CPeriodic::NewL(CActive::EPriorityIdle);
iPeriodic->Start(0/*8000000*/,1000000/*35714*/,TCallBack(Start__,this));
SetExtent(aPoint,aSize);
ActivateL();
}

5.如何调用该控件



Code:
a,在XXXContainer.h中加入该控件
private://data
CMyTimerContainer*iTimer;

b,在构造函数中构造其,秒数,位置,以及大小
voidCXXXXContainer::ConstructL(constTRect&aRect)
{
CreateWindowL();

iTimer=new(ELeave)CMyTimerContainer;
iTimer->ConstructL(60/*initseconds*/,TPoint(0,100),TSize(176,15),this);

SetRect(aRect);
ActivateL();
}
至此一个时间控件就做好了,大家可以按照以上的步骤做一下.

贴子相关图片:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值