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

📄 ppkeycontrol.cpp

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

#include "PPKeyControl.h"

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

CPPKeyControl::CPPKeyControl()
{

}

CPPKeyControl::~CPPKeyControl()
{

}

CPPKeyControl* CPPKeyControl::CreateInstance(CPPGameDoc* pDoc)
{
	// 创建新的CBControl实例
	CPPKeyControl* pObj = new CPPKeyControl;

	// 如果实例创建成功,调用初始化函数
	if (pObj)
	{
		// 设置关联文档
		pObj->SetDocument(pDoc);
		// 初始化对象
		if (!pObj->InitData())
		{
			pObj->Release();
			pObj = NULL;
		}
	}

	// 返回实例指针
	return pObj;
}

bool CPPKeyControl::InitData()
{
	for (int i =0; i < 7; i++)
		m_nKeyPress[i] = 0;

	m_nAnyKeyStatus = 0;
	
	return true;
}

void CPPKeyControl::FreeData()
{
	for (int i =0; i < 7; i++)
		m_nKeyPress[i] = 0;
	
	m_nAnyKeyStatus = 0;
}

void CPPKeyControl::Release()
{
	FreeData();
	if (this)
		delete this;
}

uint16 CPPKeyControl::GetKeyHitCounts(EKEYCODE eKey)
{
	int nCount = m_nKeyPress[eKey];

	return nCount;
}

bool CPPKeyControl::HandleKeyPress(AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	// 只要有键,就记录状态
	m_nAnyKeyStatus |= eCode;

	switch ((AVKType)wParam)
	{
	// 0,1,3,7,9,*,#键缺省处理,不作任何响应
	case AVK_0:
	case AVK_1:
	case AVK_3:
	case AVK_7:
	case AVK_9:
	case AVK_STAR:
	case AVK_POUND:
		return TRUE;
	// 2,向上键——标记向上
	case AVK_2:
	case AVK_UP:
		SetKeyPress(EKEY_UP);
		return TRUE;
	// 8,向下键——标记向下
	case AVK_8:
	case AVK_DOWN:
		SetKeyPress(EKEY_DOWN);
		return TRUE;
	// 4,向左键——标记向左
	case AVK_4:
	case AVK_LEFT:
		SetKeyPress(EKEY_LEFT);
		return TRUE;
	// 6,向右键——标记向右
	case AVK_6:
	case AVK_RIGHT:
		SetKeyPress(EKEY_RIGHT);
		return TRUE;
	// 5,选择键——标记确定、选择、FIRE
	case AVK_5:
	case AVK_SELECT:
		SetKeyPress(EKEY_SELECT);
		return TRUE;
	// 左软键——标记左软键
	case AVK_SOFT1:
		SetKeyPress(EKEY_LEFTSOFT);
		return TRUE;
	// 右软键——标记右软键
	case AVK_SOFT2:
		SetKeyPress(EKEY_RIGHTSOFT);
		return TRUE;
	// 缺省标记没有处理
	default:
		break;
	};

	// 没有处理事件
	return true;
}

boolean CPPKeyControl::IsAnyKeyPress()
{
	boolean bRes = false;
	bRes = (m_nAnyKeyStatus == 0) ? false : true;

	m_nAnyKeyStatus = 0;
	
	return bRes;
}

void CPPKeyControl::SetKeyPress(EKEYCODE eKey)
{
	m_nKeyPress[eKey]++;
}

void CPPKeyControl::ReleaseKeyPress(EKEYCODE eKey, int nHitCount)
{
	if (m_nKeyPress[eKey] > nHitCount)
		m_nKeyPress[eKey] -= nHitCount;
	else
		m_nKeyPress[eKey] = 0;
}

⌨️ 快捷键说明

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