网络流量曲线图,代码+效果图

http://www.cnblogs.com/jason-jiang/archive/2006/12/03/580870.html

 

实现方法:

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

实现代码如下:

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

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

 


打开定时器代码:

1      if  (  ! iPeriodicTimer -> IsActive() )
2          {
3        iPeriodicTimer->Start( 11000000
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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值