Symbian項目進展]網絡流量曲線圖,代碼+效果圖

 效果圖如下:
o_Firewall-flow.jpg

實現方法:

1、創建一個計時器,請將其打開
2、寫計時器活動對象的回調函數,在回調函數中刷新屏幕

實現代碼如下:

創建計時器活動對象並且打開定時器:
    iPeriodicTimer = CPeriodic::NewL( CActive::EPriorityStandard );//創建活動對象
    StartTimer();//打開定時器

 

打開定時器代碼:
1None.gif    if ( !iPeriodicTimer->IsActive() )
2ExpandedBlockStart.gif        {
3InBlock.gif        iPeriodicTimer->Start( 11000000
4InBlock.gif                               TCallBack( CFirewallContainerState::Period, this ) );
5ExpandedBlockEnd.gif        }

6None.gif
第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()代碼:
None.gifvoid CFirewallContainerState::UpdateDisplay() const
ExpandedBlockStart.gif    
{
InBlock.gif        
InBlock.gif        CWindowGc
& gc = SystemGc();
InBlock.gif        gc.Clear();
InBlock.gif        gc.SetPenStyle( CGraphicsContext::ENullPen );
InBlock.gif        gc.SetBrushColor( KRgbBlack );
InBlock.gif        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
InBlock.gif        TRect rect 
= TRect(Rect().iTl.iX, Rect().iTl.iY, Rect().iBr.iX, Rect().iBr.iY / 2);
InBlock.gif        gc.DrawRect(rect);
InBlock.gif        TSize PenSize(
1,1);
InBlock.gif
InBlock.gif        gc.SetPenSize(PenSize);
InBlock.gif        gc.SetPenColor(KRgbGreen);
InBlock.gif        gc.SetPenStyle(CGraphicsContext::ESolidPen);
InBlock.gif        TInt RowCount 
= rect.iBr.iY / KRowWidth + 1;
InBlock.gif        TInt ColCount 
= rect.iBr.iX / KColWidth + 1;
InBlock.gif        
//畫橫線
InBlock.gif
        for(TInt count = 0; count < RowCount; count++)
ExpandedSubBlockStart.gif            
{
InBlock.gif            TPoint p1(
0,count*KRowWidth);
InBlock.gif            TPoint p2(rect.iBr.iX,count
*KRowWidth);
InBlock.gif            gc.DrawLine(p1,p2);
ExpandedSubBlockEnd.gif            }

InBlock.gif        
//畫最下面的橫線
InBlock.gif
        TPoint pBl(rect.iTl.iX,rect.iBr.iY);
InBlock.gif        TPoint pBr(rect.iBr.iX,rect.iBr.iY);
InBlock.gif        gc.DrawLine(pBl,pBr);
InBlock.gif        
InBlock.gif        
InBlock.gif        
//畫豎線
InBlock.gif
        for(TInt count = 0; count < ColCount; count++)
ExpandedSubBlockStart.gif            
{
InBlock.gif            TPoint p1(count
*KColWidth,0);
InBlock.gif            TPoint p2(count
*KColWidth,rect.iBr.iY);
InBlock.gif            gc.DrawLine(p1,p2);
ExpandedSubBlockEnd.gif            }

InBlock.gif        
//畫右邊的豎線
InBlock.gif
        TPoint pTr(rect.iBr.iX, rect.iTl.iY);
InBlock.gif        gc.DrawLine(pTr, pBr);
InBlock.gif        
InBlock.gif        
//畫曲線
InBlock.gif
        gc.SetPenColor(KRgbYellow);
InBlock.gif        TInt count ;
InBlock.gif        
for(count=0;count < iPointSet.Count()-1;count++)
ExpandedSubBlockStart.gif            
{
InBlock.gif            gc.DrawLine(
*iPointSet[count],*iPointSet[count+1]);
InBlock.gif            
if (iPointSet.Count() == 100) count = 0 ;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
InBlock.gif        
//顯示狀態信息
InBlock.gif        
//顯示當前流量信息
InBlock.gif
        gc.SetPenColor(KRgbBlack);
InBlock.gif        gc.UseFont( iCoeEnv
->NormalFont() );
InBlock.gif        gc.SetPenColor(KRgbBlack);
InBlock.gif        TName msgCurrStorm ;
InBlock.gif        CEikonEnv::Static()
->ReadResource(msgCurrStorm , R_STR_MSG_STATE_CURRENT_FLOW );
InBlock.gif        
if (iPointSet.Count() > 0
ExpandedSubBlockStart.gif            
{
InBlock.gif            msgCurrStorm.AppendNum(Rect().iBr.iY 
/ 2 - iPointSet[count]->iY) ;
InBlock.gif            msgCurrStorm.Append(_L(
" KB")) ;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
//將當前點的縱座標作爲模擬流量值顯示
InBlock.gif
        
InBlock.gif        gc.DrawText( msgCurrStorm, TPoint(Rect().iTl.iX 
+ 10,Rect().iBr.iY / 2 + 30)) ;
InBlock.gif        
InBlock.gif        
//判斷是否設置了實時監控功能
InBlock.gif
        TName msgRealtime ;
InBlock.gif        
if (iUi->iSettingData->iIsRealtime)
ExpandedSubBlockStart.gif            
{
InBlock.gif            CEikonEnv::Static()
->ReadResource(msgRealtime , R_STR_MSG_STATE_REALTIME_ON );
ExpandedSubBlockEnd.gif            }

InBlock.gif        
else
ExpandedSubBlockStart.gif            
{
InBlock.gif            CEikonEnv::Static()
->ReadResource(msgRealtime , R_STR_MSG_STATE_REALTIME_OFF );
ExpandedSubBlockEnd.gif            }

InBlock.gif        gc.DrawText( msgRealtime, TPoint(Rect().iTl.iX 
+ 10,Rect().iBr.iY / 2 + 60)) ;
InBlock.gif        
//無規則匹配時,默認的動作
InBlock.gif
        TName msgDefaultaction ;
InBlock.gif
//        gc.UseFont( iCoeEnv->NormalFont() );
InBlock.gif
        switch (iUi->iSettingData->iDefaultAction)
ExpandedSubBlockStart.gif            
{
InBlock.gif            
case 0:
InBlock.gif                CEikonEnv::Static()
->ReadResource(msgDefaultaction , R_STR_MSG_STATE_DEFAULTACTION_0 );
InBlock.gif                
break ;
InBlock.gif            
case 1:
InBlock.gif                CEikonEnv::Static()
->ReadResource(msgDefaultaction , R_STR_MSG_STATE_DEFAULTACTION_1 );
InBlock.gif                
break ;
InBlock.gif            
case 2:
InBlock.gif                CEikonEnv::Static()
->ReadResource(msgDefaultaction , R_STR_MSG_STATE_DEFAULTACTION_2 );
InBlock.gif                
break ;
InBlock.gif            
default:
InBlock.gif                
break ;
ExpandedSubBlockEnd.gif            }

InBlock.gif        gc.DrawText( msgDefaultaction, TPoint(Rect().iTl.iX 
+ 10,Rect().iBr.iY / 2 + 90)) ;
InBlock.gif
ExpandedBlockEnd.gif    }

None.gif
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章