⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s60uiexampleplaycontainer.cpp

📁 《Symbian S60第3版手机程序开发与实用教程》光盘源代码
💻 CPP
字号:
// Copyright (c) 2006 Nokia Corporation.

#include "S60UIExamplePlayContainer.h"
#include "S60UIExampleModel.h"
#include <aknutils.h>
#include <eikspane.h>
#include <aknnavi.h>
#include <aknnavide.h>
#include <aknViewAppUi.h>
#include <akniconutils.h>
#include <S60UIExample.mbg>

// -----------------------------------------------------------------------------
// CS60UIExamplePlayContainer::NewL()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CS60UIExamplePlayContainer* CS60UIExamplePlayContainer::
	NewL(const TRect& aRect, CS60UIExampleModel& aModel)
    {
    CS60UIExamplePlayContainer* self = 
            CS60UIExamplePlayContainer::NewLC(aRect, aModel);
    CleanupStack::Pop(self);
    return self;
    }

// -----------------------------------------------------------------------------
// CS60UIExamplePlayContainer::NewLC()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CS60UIExamplePlayContainer* CS60UIExamplePlayContainer::
	NewLC(const TRect& aRect, CS60UIExampleModel& aModel)
    {
    CS60UIExamplePlayContainer* self = 
            new (ELeave) CS60UIExamplePlayContainer(aModel);
    CleanupStack::PushL(self);
    self->ConstructL(aRect);
    return self;
    }

// -----------------------------------------------------------------------------
// CS60UIExamplePalyContainer::CS60UIExamplePlayContainer()
// First stage constructor
// -----------------------------------------------------------------------------
//
CS60UIExamplePlayContainer::
    CS60UIExamplePlayContainer(CS60UIExampleModel& aModel) 
    : iModel(aModel)
    {
    }

// -----------------------------------------------------------------------------
// CS60UIExamplePlayContainer::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CS60UIExamplePlayContainer::ConstructL(const TRect& aRect)
    {
    CreateWindowL();
    
    // Get pointer to the navipane
    CEikStatusPane* statusPane = iAvkonViewAppUi->StatusPane();
    iNaviPane = (CAknNavigationControlContainer*) 
        statusPane->ControlL(TUid::Uid(EEikStatusPaneUidNavi));
    
    // Update navipane with latest level and score
    UpdateNaviPaneL();
    
    // Get background graphic
    _LIT(KSvgFile,"z:\\resource\\apps\\S60UIExample.mif");
    iBkgBitmap = AknIconUtils::CreateIconL(KSvgFile, EMbmS60uiexampleGame_bkg);
    
    // Resize layout
    SetRect(aRect);
    
    ActivateL();
    }

// -----------------------------------------------------------------------------
// CS60UIExamplePlayContainer::~CS60UIExamplePlayContainer()
// Destructor
// -----------------------------------------------------------------------------
//
CS60UIExamplePlayContainer::~CS60UIExamplePlayContainer()
    {
    delete iNaviDecorator;
    delete iBkgBitmap;
    }

// -----------------------------------------------------------------------------
// CS60UIExamplePlayContainer::SizeChanged()
// Handles necessary size changes, in this case resizing the bitmap.
// -----------------------------------------------------------------------------
//
void CS60UIExamplePlayContainer::SizeChanged()
    {
    TRect rect = Rect();
    TInt error = AknIconUtils::SetSize(iBkgBitmap, 
                                       rect.Size(), 
                                       EAspectRatioNotPreserved);    
    }

// -----------------------------------------------------------------------------
// CS60UIExamplePlayContainer::HandleResourceChange()
// Called by framework when screen size changes. Use to cause necessary
// resizing to be performed.
// -----------------------------------------------------------------------------
//
void CS60UIExamplePlayContainer::HandleResourceChange(TInt aType)
    {
    CCoeControl::HandleResourceChange(aType);
    if (aType == KEikDynamicLayoutVariantSwitch)
        {
        TRect rect;
        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect);
        SetRect(rect);
        }
    }

// -----------------------------------------------------------------------------
// CS60UIExamplePlayContainer::Draw() const
// Draws the display
// -----------------------------------------------------------------------------
//
void CS60UIExamplePlayContainer::Draw(const TRect& aRect) const
    {
    CWindowGc& gc = SystemGc();
    gc.BitBlt(TPoint(0,0), iBkgBitmap);
    
    if (iModel.IsGamePaused())
        {
        _LIT(KPausedText,"Game Paused");
        gc.SetPenStyle(CGraphicsContext::ESolidPen);
        gc.SetPenColor(KRgbBlack);
        gc.UseFont(AknLayoutUtils::FontFromId(EAknLogicalFontTitleFont));
        TPoint textPos(aRect.iBr.iX/4, aRect.iBr.iY/2);
        gc.DrawText(KPausedText, textPos);
        gc.DiscardFont();
        }
    }

// ----------------------------------------------------------------------------
// CS60UIExamplePlayContainer::OfferKeyEventL()
// Handles the key events.
// ----------------------------------------------------------------------------
//
TKeyResponse CS60UIExamplePlayContainer::OfferKeyEventL(const TKeyEvent& 
                                                        aKeyEvent,
                                                        TEventCode aType)
    {
    // Is not key event?
    if (aType != EEventKey)
        {
        return EKeyWasNotConsumed;
        }

    // Is game running?    
    if (!iModel.IsGameStarted() || iModel.IsGamePaused())
        {
        return EKeyWasNotConsumed;
        }

    // The key event code is ...
    switch (aKeyEvent.iCode)
        {
        case '1': 
        case '2': 
        case '3': 
        case '4': 
        case '5': 
        case '6': 
        case '7': 
        case '8': 
        case '9': 
            {
            // Number key pressed. add to score and adjust level
            TInt keyNum = aKeyEvent.iCode - '0';
            TInt score = iModel.Score() + keyNum;
            iModel.SetScore(score);
            TInt level = iModel.LevelNumber();
            if (score > level *100)
                {
                iModel.SetLevelNumber(level + 1);
                }
                
            // Update navipane with new level and score
            UpdateNaviPaneL();
            break;
            }

        default:
            return EKeyWasNotConsumed;
        }
        
    return EKeyWasConsumed;
    }

// ----------------------------------------------------------------------------
// CS60UIExamplePlayContainer::UpdateNaviPaneL()
// Handles the key events.
// ----------------------------------------------------------------------------
//
void CS60UIExamplePlayContainer::UpdateNaviPaneL()
    {
    if (iNaviDecorator)
        {
        iNaviPane->Pop(iNaviDecorator);
        delete iNaviDecorator;
        iNaviDecorator = NULL;
        }
        
    TBuf<100> naviText;
    _LIT(KNaviText,"Level %d  Score %d");
    naviText.Format(KNaviText,iModel.LevelNumber(), iModel.Score());
    
    iNaviDecorator = iNaviPane->CreateNavigationLabelL(naviText);
    iNaviPane->PushL(*iNaviDecorator);
    }

// End of File

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -