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

📄 ppsetview.cpp

📁 一个点泡泡游戏
💻 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 + -