[Symbian项目进展]网络流量曲线图,代码+效果图

效果图如下:
 

实现方法:

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

    }

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值