📄 ppsetview.cpp
字号:
// PPSetView.cpp: implementation of the CPPSetView class.
//
//////////////////////////////////////////////////////////////////////
#include "PPSetView.h"
#include "PPKeyControl.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CPPSetView::CPPSetView()
{
}
CPPSetView::CPPSetView(CPPGameDoc* pDoc)
{
SetDocument(pDoc);
}
CPPSetView::~CPPSetView()
{
}
bool CPPSetView::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_NULL(m_pBitmap[IDB_FANGKUAI_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]);
CUSTOM_RELEASE(m_pBitmap[IDB_FANGKUAI_INDEX]);
}
END_CHECK
// 将键盘按键全部清空
m_pDoc->GetKeyControl()->InitData();
// 显示第一张菜单背景图
m_bFirsrMenuBg = true;
m_eCurMenu = EMENU_OPEN_SOUND;// 初始化当前菜单为声音开
// 获取图片大小
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;
return true;
}
void CPPSetView::OnStartView()
{
// 初始化对象
if (!OnInitData())
{
Release();
return;
}
m_pDoc->SetCurView(this);
// 将定时器与回调函数关联
CALLBACK_Init(&m_cbTimer, (PFNNOTIFY)HandleTimer, this);
OnSetTimer();
}
void CPPSetView::HandleTimer(void* pView)
{
((CPPSetView* )pView)->OnTimer();
}
void CPPSetView::OnTimer()
{
// 重新计算数据
if (m_pDoc == NULL)
return;
// 在Doc里处理按键事件
if (!m_pDoc->UpdateOptView())
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
}
void CPPSetView::OnSetTimer()
{
// 设置定时器
SetTimer(TIME_VIEW, (PFNNOTIFY)(CPPSetView::HandleTimer));
}
bool CPPSetView::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;
}
boolean CPPSetView::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));
CHECK_ERROR(m_pBitmap[IDB_FANGKUAI_INDEX]->Load(IDB_FANGKUAI));
}
CATCH_CHECK
{
CUSTOM_RELEASE(m_pBitmap[EMAINMENUBACK1_INDEX]);
CUSTOM_RELEASE(m_pBitmap[EMAINMENUBACK2_INDEX]);
CUSTOM_RELEASE(m_pBitmap[EMENUTEXT_INDEX]);
CUSTOM_RELEASE(m_pBitmap[IDB_FANGKUAI_INDEX]);
return false;
}
return true;
}
void CPPSetView::OnDraw()
{
CPPGameApp* pApp = NULL;
BEGIN_CHECK
{
// 取app指针
CHECK_NULL(pApp, (CPPGameApp*) GETAPPINSTANCE());
}
CATCH_CHECK
{
return;
}
END_CHECK
IDISPLAY_ClearScreen(pApp->m_pIDisplay);
// 画背景
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_OPEN_SOUND);
DrawMenu(EMENU_CLOSE_SOUND);
// 根据当前声音配置画标志
if (pApp->GetSoundCfg())// 声音开
{
m_pBitmap[IDB_FANGKUAI_INDEX]->Draw(35, 52, EDD_ALIGN_NONE, AEE_RO_COPY);
}
else
{
m_pBitmap[IDB_FANGKUAI_INDEX]->Draw(35, 77, EDD_ALIGN_NONE, AEE_RO_COPY);
}
m_bFirsrMenuBg = !m_bFirsrMenuBg;
}
void CPPSetView::DrawMenu(SETVIEWMENU eCurMenu)
{
bool bDrawhight = false;// 是否高亮显示
if (m_eCurMenu == eCurMenu)
bDrawhight = true;
int nDrawIndex = 0; // 取菜单位图的对应索引
int nMenuIndex = GetMenuIndex(eCurMenu);// 取得菜单的纵向索引
switch (eCurMenu)
{
case EMENU_OPEN_SOUND:
nDrawIndex = bDrawhight ? OPEN_SOUND_LIGHT : OPEN_SOUND_NORMAL;
break;
case EMENU_CLOSE_SOUND:
nDrawIndex = bDrawhight ? CLOSE_SOUND_LIGHT : CLOSE_SOUND_NORMAL;
break;
default:
break;
}
// 目标坐标横向从26开始,纵向从8开始,位图坐标从(0,0)开始
m_pBitmap[EMENUTEXT_INDEX]->Draw(40, (nMenuIndex - 1)* 25 + 50, m_nMenuWidth, m_nMenuHeight, nDrawIndex * m_nMenuWidth, 0);
}
int CPPSetView::GetMenuIndex(SETVIEWMENU eCurMenu)
{
int nIndex = 0;
switch (eCurMenu)
{
case EMENU_OPEN_SOUND:
nIndex = 1;
break;
case EMENU_CLOSE_SOUND:
nIndex = 2;
break;
default:
break;
}
return nIndex;
}
SETVIEWMENU CPPSetView::GetCurMenu()
{
return m_eCurMenu;
}
void CPPSetView::SetCurMenu(SETVIEWMENU eMenu)
{
m_eCurMenu = eMenu;
}
SETVIEWMENU CPPSetView::GetMenuFromIndex(int nIndex)
{
switch (nIndex)
{
case 1:
return EMENU_OPEN_SOUND;
break;
case 2:
return EMENU_CLOSE_SOUND;
break;
default:
return EMENU_OPEN_SOUND;
break;
}
}
void CPPSetView::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]);
CUSTOM_RELEASE(m_pBitmap[IDB_FANGKUAI_INDEX]);
m_pDoc->SwitchView(nViewID);
}
void CPPSetView::WtriteSoundCfg(bool bOpenSound)
{
IFileMgr* pIFileMgr = NULL; // 文件接口
IFile* pIFile; // 文件操作借口
SOUNDCFG tOpenSound;
tOpenSound.bOpenSound = bOpenSound;
CPPGameApp* pApp = (CPPGameApp*) GETAPPINSTANCE();
if (pApp == NULL)
return;
BEGIN_CHECK
{
// 创建文件接口
CHECK_ERROR(ISHELL_CreateInstance(pApp->m_pIShell, AEECLSID_FILEMGR, (void**)&pIFileMgr));
}
CATCH_CHECK
{
IRELEASE(pIFileMgr, FILEMGR);
return;
}
END_CHECK
// 文件不存在,创建文件
if (IFILEMGR_Test(pIFileMgr, SOUND_CFG_FILE) == SUCCESS)
{
// 打开声音配置文件
pIFile = IFILEMGR_OpenFile(pIFileMgr, SOUND_CFG_FILE, _OFM_READWRITE);
if (pIFile == NULL)
{
IRELEASE(pIFileMgr, FILEMGR);
return;
}
// 写声音配置数据
IFILE_Write(pIFile, &tOpenSound, sizeof(SOUNDCFG));
// 关闭文件
IFILE_Release(pIFile);
}
else
{
pIFile = IFILEMGR_OpenFile(pIFileMgr, SOUND_CFG_FILE, _OFM_CREATE);
if (pIFile == NULL)
{
IRELEASE(pIFileMgr, FILEMGR);
return;
}
IFILE_Write(pIFile, &tOpenSound, sizeof(SOUNDCFG));
// 关闭文件
IFILE_Release(pIFile);
}
IRELEASE(pIFileMgr, FILEMGR);
}
void CPPSetView::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]);
CUSTOM_RELEASE(m_pBitmap[IDB_FANGKUAI_INDEX]);
}
void CPPSetView::OnSuspend()
{
// 结束定时器
CALLBACK_Cancel(&m_cbTimer);
// 释放资源
CPPBaseView::OnSuspend();
}
void CPPSetView::OnResume()
{
CPPBaseView::OnResume();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -