实现方法:
1、创建一个计时器,请将其打开
2、写计时器活动对类似的回调函数,在回调函数中刷新屏幕
实现代码如下:
创建计时器活动对类似并且打开定时器:
iPeriodicTimer=CPeriodic::NewL(CActive::EPriorityStandard);//创建活动对类似
StartTimer();//打开定时器
打开定时器代码:
1if(!iPeriodicTimer->IsActive())
2{
3iPeriodicTimer->Start(1,1000000,
4TCallBack(CFirewallContainerState::Period,this));
5}
6第3行中的1000000是将频率设置成1秒,单位是微秒
回调函数Period()代码:
1TIntCFirewallContainerState::Period(TAny*aPtr)
2{
3(static_cast<CFirewallContainerState*>(aPtr))->DoPeriodTask();
4returnETrue;
5}
6
DoPeriodTask()函数代码:
1voidCFirewallContainerState::DoPeriodTask()
2{
3
4for(TIntcount=0;count<iPointSet.Count();count )
5{
6iPointSet[count]->iX =4;
7}
8if(iPointSet.Count()>100)
9{
10iPointSet.Reset();
11}
12TRectrect=Rect();
13TInty=GetRandY(rect.iBr.iY/2);
14//设置曲线的Y值的最大值
15TPoint*p=new(ELeave)TPoint(0,y);
16iPointSet.Append(p);
17
18//Updatethescreen
19CWindowGc&gc=SystemGc();
20gc.Activate(*DrawableWindow());
21UpdateDisplay();
22gc.Deactivate();
23}
24
刷屏函数UpdateDispaly()代码:
voidCFirewallContainerState::UpdateDisplay()const
{
CWindowGc&gc=SystemGc();
gc.Clear();
gc.SetPenStyle(CGraphicsContext::ENullPen);
gc.SetBrushColor(KRgbBlack);
gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
TRectrect=TRect(Rect().iTl.iX,Rect().iTl.iY,Rect().iBr.iX,Rect().iBr.iY/2);
gc.DrawRect(rect);
TSizePenSize(1,1);
gc.SetPenSize(PenSize);
gc.SetPenColor(KRgbGreen);
gc.SetPenStyle(CGraphicsContext::ESolidPen);
TIntRowCount=rect.iBr.iY/KRowWidth 1;
TIntColCount=rect.iBr.iX/KColWidth 1;
//画横线
for(TIntcount=0;count<RowCount;count )
{
TPointp1(0,count*KRowWidth);
TPointp2(rect.iBr.iX,count*KRowWidth);
gc.DrawLine(p1,p2);
}
//画最下面的横线
TPointpBl(rect.iTl.iX,rect.iBr.iY);
TPointpBr(rect.iBr.iX,rect.iBr.iY);
gc.DrawLine(pBl,pBr);
//画竖线
for(TIntcount=0;count<ColCount;count )
{
TPointp1(count*KColWidth,0);
TPointp2(count*KColWidth,rect.iBr.iY);
gc.DrawLine(p1,p2);
}
//画右边的竖线
TPointpTr(rect.iBr.iX,rect.iTl.iY);
gc.DrawLine(pTr,pBr);
//画曲线
gc.SetPenColor(KRgbYellow);
TIntcount;
for(count=0;count<iPointSet.Count()-1;count )
{
gc.DrawLine(*iPointSet[count],*iPointSet[count 1]);
if(iPointSet.Count()==100)count=0;
}
//显示状态信息
//显示当前流量信息
gc.SetPenColor(KRgbBlack);
gc.UseFont(iCoeEnv->NormalFont());
gc.SetPenColor(KRgbBlack);
TNamemsgCurrStorm;
CEikonEnv::Static()->ReadResource(msgCurrStorm,R_STR_MSG_STATE_CURRENT_FLOW);
if(iPointSet.Count()>0)
{
msgCurrStorm.AppendNum(Rect().iBr.iY/2-iPointSet[count]->iY);
msgCurrStorm.Append(_L("KB"));
}
//将当前点的纵坐标作为模仿流量值显示
gc.DrawText(msgCurrStorm,TPoint(Rect().iTl.iX 10,Rect().iBr.iY/2 30));
//判断是否设置了实时监控功能
TNamemsgRealtime;
if(iUi->iSettingData->iIsRealtime)
{
CEikonEnv::Static()->ReadResource(msgRealtime,R_STR_MSG_STATE_REALTIME_ON);
}
else
{
CEikonEnv::Static()->ReadResource(msgRealtime,R_STR_MSG_STATE_REALTIME_OFF);
}
gc.DrawText(msgRealtime,TPoint(Rect().iTl.iX 10,Rect().iBr.iY/2 60));
//无规则匹配时,默认的动作
TNamemsgDefaultaction;
//gc.UseFont(iCoeEnv->NormalFont());
switch(iUi->iSettingData->iDefaultAction)
{
case0:
CEikonEnv::Static()->ReadResource(msgDefaultaction,R_STR_MSG_STATE_DEFAULTACTION_0);
break;
case1:
CEikonEnv::Static()->ReadResource(msgDefaultaction,R_STR_MSG_STATE_DEFAULTACTION_1);
break;
case2:
CEikonEnv::Static()->ReadResource(msgDefaultaction,R_STR_MSG_STATE_DEFAULTACTION_2);
break;
default:
break;
}
gc.DrawText(msgDefaultaction,TPoint(Rect().iTl.iX 10,Rect().iBr.iY/2 90));
}

RSS订阅