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

📄 ggballappview.cpp

📁 一个symbian上成熟的小游戏源码
💻 CPP
字号:
/* Copyright (c) 2008, Nokia. All rights reserved */

#include "GGBallAppView.h"
#include "GGBall.rsg"
//#include "GGBallEnv.h"
#include "GGBallAppUi.h"

CGGBallAppView* CGGBallAppView::NewL(const TRect& aRect,CGGBallAppUi* aAppui)
    {
    CGGBallAppView* self = NewLC(aRect,aAppui);
    CleanupStack::Pop();
    return self;
    }

CGGBallAppView* CGGBallAppView::NewLC(const TRect& aRect,CGGBallAppUi* aAppui)
    {
    CGGBallAppView* self = new (ELeave) CGGBallAppView;
    CleanupStack::PushL(self);
    self->ConstructL(aRect,aAppui);
    return self;
    }

void CGGBallAppView::ConstructL(const TRect& aRect,CGGBallAppUi* aAppui)
    {
    CreateWindowL();
    SetRect(aRect);

	iAppUi=aAppui;

	TSize sCreenSize=iAppUi->ScreenSize();

	TRect titleRect(0,0,sCreenSize.iWidth,22);
	iTitle=CTitle::NewL(titleRect);
	iTitle->SetText(R_STR_CAPTION);
	iTitle->SetFont(iAppUi->Font());

	TRect cbaRect(0,sCreenSize.iHeight-22,sCreenSize.iWidth,sCreenSize.iHeight);
	iCbaButton=CCbaButton::NewL(cbaRect);
	iCbaButton->SetLeftCmd(R_STR_OPTIONS,EFun_Option);
	iCbaButton->SetRightCmd(R_STR_BACK,EFun_Exit);
	iCbaButton->SetFont(iAppUi->Font());

	TRect menuRect(0,sCreenSize.iHeight-22,sCreenSize.iWidth/3,sCreenSize.iHeight-22);
	iMenu=CMenu::NewL(menuRect);
	iMenu->SetMenuItemHeight(iAppUi->MenuItemHeight());
	iMenu->SetFont(iAppUi->Font());
	iMenu->AddCmdL(R_STR_ADD,EFun_AddBall);
	iMenu->AddCmdL(R_STR_DELETE,EFun_RemoveBall);
	iMenu->AddCmdL(R_STR_EXIT,EFun_Exit);

	iBallEngine=CBallEngine::NewL();
	iBallEngine->SetRect(TRect(0,iAppUi->PaneHeigth(),
						iAppUi->ScreenSize().iWidth,
						iAppUi->ScreenSize().iHeight-iAppUi->PaneHeigth()));
	iBallEngine->CreateBall();

	iTimer=CPeriodic::NewL(CActive::EPriorityStandard);
	iTimer->Start(10000,10000,TCallBack(CallBack,this));

    ActivateL();
    }

CGGBallAppView::CGGBallAppView()
    {
    }

CGGBallAppView::~CGGBallAppView()
    {
		delete iTitle;
		delete iCbaButton;
		delete iMenu;
		delete iBallEngine;
		iTimer->Cancel();
		delete iTimer;
		delete iConfirmDlg;
    }

void CGGBallAppView::Draw(const TRect& /*aRect*/) const
{
    // Clear the screen
    CWindowGc& gc = SystemGc();
    gc.Clear(Rect());
	
	//画标题区
	iTitle->Draw(gc);
	//画按钮区
	iCbaButton->Draw(gc);
	
	iBallEngine->Draw(gc);
	iMenu->Draw(gc);
	
	if (iConfirmDlg)
	{
		iConfirmDlg->Draw(gc);
	}
}

TKeyResponse CGGBallAppView::OfferKeyEventL( const TKeyEvent &aKeyEvent, TEventCode aType )
{
	TKeyResponse response=EKeyWasNotConsumed;
	TFunction fun=EFun_None;

	if (aType==EEventKeyDown)
	{
		if ( 164 == aKeyEvent.iScanCode)
		{
			if (iMenu->Visible())
			{
				fun=iMenu->CurrentFunction();
			}
			else 
			{
				fun=iCbaButton->LeftCmdFunction();
			}
			response=EKeyWasConsumed;
		}
		else if ( 165 == aKeyEvent.iScanCode )
		{
			fun=iCbaButton->RightCmdFunction();
			response=EKeyWasConsumed;
		}
		else if (aKeyEvent.iScanCode==EStdKeyUpArrow)
		{
			if (iMenu->Visible())
			{
				fun=EFun_MenuUp;
				response=EKeyWasConsumed;
			}
		}
		else if (aKeyEvent.iScanCode==EStdKeyDownArrow)
		{
			if (iMenu->Visible())
			{
				fun=EFun_MenuDown;
				response=EKeyWasConsumed;
			}
		}
		else if (aKeyEvent.iScanCode==EStdKeyDevice3)
		{
			if (iMenu->Visible())
			{
				fun=iMenu->CurrentFunction();
				response=EKeyWasConsumed;
			}
		}
	}

	if (response==EKeyWasConsumed)
	{
		ProcessKeyEvent(fun);
	}

	return response;	
}

void CGGBallAppView::ShowMenu(TBool aShow)
{
	if (aShow)
	{
		iMenu->Show();
		iCbaButton->SetLeftCmd(R_STR_SELECT,EFun_Select);
		iCbaButton->SetRightCmd(R_STR_CANCEL,EFun_Cancel);
	}
	else
	{
		iMenu->Hide();
		iCbaButton->SetLeftCmd(R_STR_OPTIONS,EFun_Option);
		iCbaButton->SetRightCmd(R_STR_BACK,EFun_Exit);
	}
}

void CGGBallAppView::ProcessKeyEvent( TFunction aFun )
{
	switch(aFun)
	{
	case EFun_AddBall:
		iBallEngine->CreateBall();
		ShowMenu(EFalse);
		break;
	case EFun_RemoveBall:
		iBallEngine->RemoveBall();
		ShowMenu(EFalse);
		break;
	case EFun_Exit:
	case EFun_Back:
		ShowMenu(EFalse);
		DrawConfirmDlg();
	    break;
	case EFun_Cancel:
		ShowMenu(EFalse);
		break;
	case EFun_Option:
		ShowMenu();
		break;
	case EFun_MenuUp:
		iMenu->Pre();
		break;
	case EFun_MenuDown:
		iMenu->Next();
		break;
	case EFun_Exit_Yes:
		iAppUi->Quit();
		break;
	case EFun_Exit_No:
		DrawConfirmDlg(EFalse);
		break;
	}

	if (aFun!=EFun_None)
	{
		DrawNow();
	}
}

TInt CGGBallAppView::CallBack( TAny* aAny )
{
	CGGBallAppView* p=static_cast<CGGBallAppView*>(aAny);
	p->DrawNow();
	
	return  KErrNone;
}

void CGGBallAppView::DrawConfirmDlg(TBool aShow)
{
	if (aShow)
	{
		TSize s=iAppUi->ScreenSize();
		iConfirmDlg=CBaseControl::NewL(TRect(0,s.iHeight-iAppUi->PaneHeigth()-50,
											s.iWidth,s.iHeight-iAppUi->PaneHeigth()));
		iConfirmDlg->SetFont(iAppUi->Font());
		iConfirmDlg->SetText(R_STR_EXIT_CONFIRM);

		iCbaButton->SetLeftCmd(R_STR_YES,EFun_Exit_Yes);
		iCbaButton->SetRightCmd(R_STR_NO,EFun_Exit_No);
	}
	else
	{
		delete iConfirmDlg;
		iConfirmDlg=NULL;

		iCbaButton->SetLeftCmd(R_STR_OPTIONS,EFun_Option);
		iCbaButton->SetRightCmd(R_STR_BACK,EFun_Exit);
	}
}

⌨️ 快捷键说明

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