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

📄 ppmenuview.cpp

📁 一个点泡泡游戏
💻 CPP
字号:
// PPMenuView.cpp: implementation of the CPPMenuView class.
//
//////////////////////////////////////////////////////////////////////

#include "PPMenuView.h"
#include "PPBitmap.h"
#include "PPKeyControl.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CPPMenuView::CPPMenuView()
{

}

CPPMenuView::CPPMenuView(CPPGameDoc* pDoc)
{
	SetDocument(pDoc);
}

CPPMenuView::~CPPMenuView()
{

}

bool CPPMenuView::OnInitData()
{
	BEGIN_CHECK
	{
		CHECK_NULL(m_pBitmap[EMAINMENUBACK1_INDEX], CPPBitmap::CreateInstance());
		CHECK_NULL(m_pBitmap[EMAINMENUBACK2_INDEX], CPPBitmap::CreateInstance());
		CHECK_NULL(m_pBitmap[EMENUTEXT_INDEX], CPPBitmap::CreateInstance());
		
		CHECK_FALSE(LoadMenuBmpRes());
	}
	CATCH_CHECK
	{
		CUSTOM_RELEASE(m_pBitmap[EMAINMENUBACK1_INDEX]);
		CUSTOM_RELEASE(m_pBitmap[EMAINMENUBACK2_INDEX]);
		CUSTOM_RELEASE(m_pBitmap[EMENUTEXT_INDEX]);
	}
	END_CHECK

	// 将键盘按键全部清空
	m_pDoc->GetKeyControl()->InitData();

//	m_pDoc->SetExitTimer(false);

	// 显示第一张菜单背景图
	m_bFirsrMenuBg = true;
	m_eCurMenu = EMENU_START;// 初始化当前菜单为开始

	// 获取图片大小
	int nReturn;
	AEEBitmapInfo bmpInfo;
	nReturn = m_pBitmap[EMENUTEXT_INDEX]->GetBMPInfo(bmpInfo);
	if (nReturn != SUCCESS)
		return false;
	
	// 每个菜单文字的宽度
	m_nMenuWidth = bmpInfo.cx / MENU_TEXT_NUM;
	m_nMenuHeight = bmpInfo.cy;

	m_nTimeCount = 0;	// 计数器清零

	return true;
}

void CPPMenuView::OnStartView()
{
	// 初始化对象
	if (!OnInitData())
	{
		Release();
		return;
	}

	m_pDoc->SetCurView(this);
//	m_pDoc->SetExitTimer(false);

	// 设置定时器
	CALLBACK_Init(&m_cbTimer, (PFNNOTIFY)HandleTimer, this);

	OnSetTimer();
}

void CPPMenuView::HandleTimer(void* pView)
{
	((CPPMenuView* )pView)->OnTimer();
}

void CPPMenuView::OnTimer()
{
	// 重新计算数据
	if (m_pDoc == NULL)
		return;

	// 在Doc里处理按键事件
	if (!m_pDoc->UpdateMenuView())
		return;

	// 获取应用程序指针
	CPPGameApp* pApp = (CPPGameApp*) GETAPPINSTANCE();
	if (pApp == NULL)
	{
		return;
	}

	OnDraw();

	BEGIN_CHECK
	{
		// 取app指针
		CHECK_NULL(pApp, (CPPGameApp*) GETAPPINSTANCE());
		CHECK_ERROR(ISHELL_SetTimerEx(pApp->m_pIShell, TIME_VIEW, &m_cbTimer));
	}
	CATCH_CHECK
	{
		return;
	}
	END_CHECK

	m_nTimeCount++;
}

void CPPMenuView::OnSetTimer()
{
	// 设置定时器
	SetTimer(TIME_VIEW, (PFNNOTIFY)(CPPMenuView::HandleTimer));
}

void CPPMenuView::OnDraw()
{
	CPPGameApp* pApp = NULL;
	
	BEGIN_CHECK
	{
		// 取app指针
		CHECK_NULL(pApp, (CPPGameApp*) GETAPPINSTANCE());
	}
	CATCH_CHECK
	{
		return;
	}
	END_CHECK

	// 画背景
	if (m_bFirsrMenuBg)
		m_pBitmap[EMAINMENUBACK1_INDEX]->Draw(0, 0, EDD_ALIGN_TOP | EDD_ALIGN_LEFT);
	else
		m_pBitmap[EMAINMENUBACK2_INDEX]->Draw(0, 0, EDD_ALIGN_TOP | EDD_ALIGN_LEFT);

	// 画菜单
	DrawMenu(EMENU_START);
	DrawMenu(EMENU_DEMO);
	DrawMenu(EMENU_SET);
	DrawMenu(EMENU_HELP);
	DrawMenu(EMENU_ABOUT);
	DrawMenu(EMENU_STOP);

	m_bFirsrMenuBg = !m_bFirsrMenuBg;
}

boolean CPPMenuView::LoadMenuBmpRes()
{
	BEGIN_CHECK
	{
		// 加载位图资源
		CHECK_ERROR(m_pBitmap[EMAINMENUBACK1_INDEX]->Load(IDB_MAINMENUBACK1));
		CHECK_ERROR(m_pBitmap[EMAINMENUBACK2_INDEX]->Load(IDB_MAINMENUBACK2));
		CHECK_ERROR(m_pBitmap[EMENUTEXT_INDEX]->Load(IDB_MENUTEXT));
	}
	CATCH_CHECK
	{
		CUSTOM_RELEASE(m_pBitmap[EMAINMENUBACK1_INDEX]);
		CUSTOM_RELEASE(m_pBitmap[EMAINMENUBACK2_INDEX]);
		CUSTOM_RELEASE(m_pBitmap[EMENUTEXT_INDEX]);
		return false;
	}

//	int nReturn;
//	NativeColor color;
//	nReturn = IBITMAP_GetPixel(m_pBitmap[EMENUTEXT_INDEX]->m_pIBitmap, 0, 0, &color);
//	IBITMAP_SetTransparencyColor(m_pBitmap[EMENUTEXT_INDEX]->m_pIBitmap, color);

	return true;
}

bool CPPMenuView::SetTimer(int32 dwInterval, PFNNOTIFY pfnCallback)
{
	CPPGameApp* pApp = NULL;
	
	BEGIN_CHECK
	{
		// 取app指针
		CHECK_NULL(pApp, (CPPGameApp*) GETAPPINSTANCE());
		CHECK_ERROR(ISHELL_SetTimerEx(pApp->m_pIShell, dwInterval, &m_cbTimer));
	}
	CATCH_CHECK
	{
		return false;
	}
	END_CHECK
		
		return true;
}

void CPPMenuView::DrawMenu(MAINMENU eCurMenu)
{
	bool bDrawhight = false;// 是否高亮显示
	
	if (m_eCurMenu == eCurMenu)
		bDrawhight = true;
	
	int nDrawIndex = 0;	// 取菜单位图的对应索引
	int nMenuIndex = GetMenuIndex(eCurMenu);// 取得菜单的纵向索引
	
	switch (eCurMenu)
	{
	case EMENU_START:
		nDrawIndex = bDrawhight ? START_LIGHT : START_NORMAL;
		break;
	case EMENU_DEMO:
		nDrawIndex = bDrawhight ? DEMO_LIGHT : DEMO_NORMAL;
		break;
	case EMENU_SET:
		nDrawIndex = bDrawhight ? SET_LIGHT : SET_NORMAL;
		break;
	case EMENU_HELP:
		nDrawIndex = bDrawhight ? HELP_LIGHT : HELP_NORMAL;
		break;
	case EMENU_ABOUT:
		nDrawIndex = bDrawhight ? ABOUT_LIGHT : ABOUT_NORMAL;
		break;
	case EMENU_STOP:
		nDrawIndex = bDrawhight ? EXIT_LIGHT : EXIT_NORMAL;
		break;
	default:
		break;
	}
	
	// 目标坐标横向从26开始,纵向从8开始,位图坐标从(0,0)开始
	m_pBitmap[EMENUTEXT_INDEX]->Draw(36, (nMenuIndex - 1)* 15 +25, m_nMenuWidth, m_nMenuHeight, nDrawIndex * m_nMenuWidth, 0);
}

MAINMENU CPPMenuView::GetCurMenu()
{
	return m_eCurMenu;
}

int CPPMenuView::GetMenuIndex(MAINMENU eCurMenu)
{
	int nIndex = 0;
	
	switch (eCurMenu)
	{
	case EMENU_START:
		nIndex = 1;
		break;
	case EMENU_DEMO:
		nIndex = 2;
		break;
	case EMENU_SET:
		nIndex = 3;
		break;
	case EMENU_HELP:
		nIndex = 4;
		break;
	case EMENU_ABOUT:
		nIndex = 5;
		break;
	case EMENU_STOP:
		nIndex = 6;
		break;
	default:
		break;
	}
	
	return nIndex;
}

void CPPMenuView::SetCurMenu(MAINMENU eMenu)
{
	m_eCurMenu = eMenu;
}

MAINMENU CPPMenuView::GetMenuFromIndex(int nIndex)
{
	switch (nIndex)
	{
	case 1:
		return EMENU_START;
		break;
	case 2:
		return EMENU_DEMO;
		break;
	case 3:
		return EMENU_SET;
		break;
	case 4:
		return EMENU_HELP;
		break;
	case 5:
		return EMENU_ABOUT;
		break;
	case 6:
		return EMENU_STOP;
		break;
	default:
		return EMENU_START;
		break;
	}
}

void CPPMenuView::ExitView(int nViewID)
{
	CPPGameApp* pApp = NULL;

	pApp = (CPPGameApp*) GETAPPINSTANCE();

	// 设置定时器结束标志
	m_pDoc->SetExitTimer(true);

	// 结束定时器
	CALLBACK_Cancel(&m_cbTimer);
	
	// 释放位图资源
	CUSTOM_RELEASE(m_pBitmap[EMAINMENUBACK1_INDEX]);
	CUSTOM_RELEASE(m_pBitmap[EMAINMENUBACK2_INDEX]);
	CUSTOM_RELEASE(m_pBitmap[EMENUTEXT_INDEX]);

	if (nViewID != ID_VIEW_STOP)
		m_pDoc->SwitchView(nViewID);
	else
		ISHELL_CloseApplet(pApp->m_pIShell, false);
}

int CPPMenuView::GetTimeCount()
{
	return m_nTimeCount;
}

void CPPMenuView::RevertTimeCount()
{
	m_nTimeCount = 0;
}

void CPPMenuView::FreeResourse()
{
	// 设置定时器结束标志
	m_pDoc->SetExitTimer(true);
	
	// 结束定时器
	CALLBACK_Cancel(&m_cbTimer);
	
	// 释放位图资源
	CUSTOM_RELEASE(m_pBitmap[EMAINMENUBACK1_INDEX]);
	CUSTOM_RELEASE(m_pBitmap[EMAINMENUBACK2_INDEX]);
	CUSTOM_RELEASE(m_pBitmap[EMENUTEXT_INDEX]);
}

void CPPMenuView::OnSuspend()
{
	// 结束定时器
	CALLBACK_Cancel(&m_cbTimer);
	
	// 释放资源
}

void CPPMenuView::OnResume()
{
	CPPBaseView::OnResume();
}

⌨️ 快捷键说明

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