J2ME之家

匿名投稿 投稿指南 RSS订阅 J2ME通告:
搜索: 您的位置主页>Symbian>网络编程>

网络流量曲线图代码

2008-8-21 00:21:32 来源:j2me之家整理 责任编辑:本站整理 【 点击: 我要投稿 [进入论坛]

[J2ME之家-Symbian网络编程]效果图如下:


实现方法:

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));

}

Tag:代码 曲线 流量 网络 count Rect // -> ReadResource
责任编辑:本站整理
  • 用户名: (新注册)密码: 匿名:  请文明参与讨论,禁止漫骂攻击。
    评论总数: [ 查看全部 ] 网友评论
    关于我们 - 联系我们 - 广告服务 - 法律声明 - RSS订阅 - 网站地图 - 返回顶部