📄 ppmenuview.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 + -