网络流量曲线图代码

实现方法:

1、创建一个计时器,请将其打开
2、写计时器活动对象的回调函数,在回调函数中刷新屏幕

实现代码如下:

创建计时器活动对象并且打开定时器:

iPeriodicTimer = CPeriodic::NewL( CActive::EPriorityStandard );//创建活动对象
StartTimer();//打开定时器




打开定时器代码:

1     if ( !iPeriodicTimer->IsActive() )
2       {
3       iPeriodicTimer->Start( 1, 1000000,
4                                TCallBack( CFirewallContainerState::Period, this ) );
5       }
6
第3行中的1000000是将频率设置成1秒,单位是微秒

回调函数Period()代码:

1 TInt CFirewallContainerState::Period( TAny* aPtr)
2     {
3     ( static_cast<CFirewallContainerState*>( aPtr ) )->DoPeriodTask();
4     return ETrue;
5     }  
6


DoPeriodTask()函数代码:

1 void CFirewallContainerState::DoPeriodTask()
2     {
3
4     for ( TInt count = 0;count < iPointSet.Count();count++ )
5       {
6       iPointSet[count]->iX += 4;
7       }
8     if(iPointSet.Count() > 100)
9       {
10       iPointSet.Reset() ;
11       }
12     TRect rect = Rect();
13     TInt y = GetRandY( rect.iBr.iY / 2 );       
14       //设置曲线的Y值的最大值
15     TPoint* p = new(ELeave)TPoint(0,y);
16     iPointSet.Append(p);
17    
18     // Update the screen
19     CWindowGc& gc = SystemGc();
20     gc.Activate( *DrawableWindow() );
21     UpdateDisplay();
22     gc.Deactivate();
23     }
24


刷屏函数UpdateDispaly()代码:

void CFirewallContainerState::UpdateDisplay() const
    {
      
       CWindowGc& gc = SystemGc();
       gc.Clear();
       gc.SetPenStyle( CGraphicsContext::ENullPen );
       gc.SetBrushColor( KRgbBlack );
       gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
       TRect rect = TRect(Rect().iTl.iX, Rect().iTl.iY, Rect().iBr.iX, Rect().iBr.iY / 2);
       gc.DrawRect(rect);
       TSize PenSize(1,1);

       gc.SetPenSize(PenSize);
       gc.SetPenColor(KRgbGreen);
       gc.SetPenStyle(CGraphicsContext::ESolidPen);
       TInt RowCount = rect.iBr.iY / KRowWidth + 1;
       TInt ColCount = rect.iBr.iX / KColWidth + 1;
       //画横线
       for(TInt count = 0; count < RowCount; count++)
         {
         TPoint p1(0,count*KRowWidth);
         TPoint p2(rect.iBr.iX,count*KRowWidth);
         gc.DrawLine(p1,p2);
         }
       //画最下面的横线
       TPoint pBl(rect.iTl.iX,rect.iBr.iY);
       TPoint pBr(rect.iBr.iX,rect.iBr.iY);
       gc.DrawLine(pBl,pBr);
      
      
       //画竖线
       for(TInt count = 0; count < ColCount; count++)
         {
         TPoint p1(count*KColWidth,0);
         TPoint p2(count*KColWidth,rect.iBr.iY);
         gc.DrawLine(p1,p2);
         }
       //画右边的竖线
       TPoint pTr(rect.iBr.iX, rect.iTl.iY);
       gc.DrawLine(pTr, pBr);
      
       //画曲线
       gc.SetPenColor(KRgbYellow);
       TInt count ;
       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);
       TName msgCurrStorm ;
       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)) ;
      
       //判断是否设置了实时监控功能
       TName msgRealtime ;
       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)) ;
       //无规则匹配时,默认的动作
       TName msgDefaultaction ;
//        gc.UseFont( iCoeEnv->NormalFont() );
       switch (iUi->iSettingData->iDefaultAction)
         {
         case 0:
            CEikonEnv::Static()->ReadResource(msgDefaultaction , R_STR_MSG_STATE_DEFAULTACTION_0 );
            break ;
         case 1:
            CEikonEnv::Static()->ReadResource(msgDefaultaction , R_STR_MSG_STATE_DEFAULTACTION_1 );
            break ;
         case 2:
            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)) ;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值