📄 asl_input.h
字号:
//-----------------------------------------------------------------------------
//
// ____ Azure Star Game Engine 蓝星游戏引擎 ____
//
// Copyright (c) 2006, 蓝星工作室
// All rights reserved.
//
// 文件名称: asl_input.h
// 摘 要: 输入控制类定义
//
// 当前版本: 1.0
// 作 者: 汤 祺
// 创建日期: 2006-7-21
//
//-----------------------------------------------------------------------------
#ifndef ASL_INPUT_INCLUDE
#define ASL_INPUT_INCLUDE
#pragma once
#include "asl_utils.h"
#include <queue>
//-----------------------------------------------------------------------------
namespace ASL
{
// 取全局唯一实例
#define INPUT ASLInput::Instance()
// 功能键状态结构定义
struct ShiftState
{
bool ssCtrl;
bool ssShift;
bool ssAlt;
};
// 鼠标按钮枚举定义
enum MouseButton
{
mbLeft,
mbRight,
mbMiddle
};
//-----------------------------------------------------------------------------
// ASLInput 输入控制类定义
// 本类是简单的输入控制类, 提供处理键盘和鼠标输入的能力. 本类通过定时更新
// 维护一份键盘鼠标状态表. 用户可以随时取得当前的键盘鼠标状态.
//-----------------------------------------------------------------------------
class ASLInput
{
// 常量定义
private:
static const int BUF_SIZE = 256; // 键盘缓冲区大小
// 私有构造函数, 析构函数. 仅在Instance()函数中创建
private:
ASLInput(void);
~ASLInput(void);
// 公有函数
public:
// 取全局唯一实例
static ASLInput& Instance(void);
// 初始化
void Init(HWND hWnd) { m_hWnd = hWnd; }
// 消息处理函数, 需在主窗口的消息处理函数中调用
void MsgProc(UINT message, WPARAM wParam, LPARAM lParam);
// 更新函数
void Update(void);
// 按键函数
public:
// 指定键是否刚被按下(相对于上一次调用Update())
bool IsKeyJustDown(DWORD dwKey)
{ return (m_vKeyState[dwKey] & 0x80) && !(m_vKeyStateOld[dwKey] & 0x80); }
// 指定键是否刚被松开(相对于上一次调用Update())
bool IsKeyJustUp(DWORD dwKey)
{ return !(m_vKeyState[dwKey] & 0x80) && (m_vKeyStateOld[dwKey] & 0x80); }
// 取按键状态 若按下则返回true
bool GetKeyState(DWORD dwKey) { return (m_vKeyState[dwKey] & 0x80) != 0; }
// 取功能键状态
ShiftState GetShiftState(void) { return m_ShiftState; }
// 自上次调用Update()后被按下的键
std::queue<DWORD> GetKeyDown(void) { return m_qKeyDownSave; }
// 自上次调用Update()后被松开的键
std::queue<DWORD> GetKeyUp(void) { return m_qKeyUpSave; }
// 自上次调用Update()后得到的字符
std::queue<char> GetChar(void) { return m_qCharSave; }
// 鼠标按钮函数
public:
// 指定鼠标按钮是否刚被按下
bool IsMouseJustDown(MouseButton mb);
// 指定鼠标按钮是否刚被松开
bool IsMouseJustUp(MouseButton mb);
// 取鼠标按钮状态 若按下则返回true
bool GetMouseState(MouseButton mb);
// 取鼠标滚轮滚动数
int GetMouseWheel(void) { return m_nWheelSave; }
// 鼠标位置函数
public:
// 取鼠标位置
POINT GetMousePos(void) { return m_ptMousePos; }
// 取鼠标X坐标
int GetMousePosX(void) { return m_ptMousePos.x; }
// 取鼠标Y坐标
int GetMousePosY(void) { return m_ptMousePos.y; }
// 设置鼠标位置
void SetMousePos(POINT pt);
// 鼠标是否移动(相对于上一次调用Update())
bool IsMouseMoved(void);
// 成员变量
private:
HWND m_hWnd; // 主窗口句柄
BYTE m_vKeyState[BUF_SIZE]; // 键盘缓冲
BYTE m_vKeyStateOld[BUF_SIZE]; // 前次键盘缓冲
ShiftState m_ShiftState; // 功能键状态
POINT m_ptMousePos; // 鼠标位置
POINT m_ptMousePosOld; // 前次鼠标位置
std::queue<DWORD> m_qKeyDown; // 被按下键队列
std::queue<DWORD> m_qKeyUp; // 被松开键队列
std::queue<char> m_qChar; // 字符队列
std::queue<DWORD> m_qKeyDownSave; // 保存的被按下键队列
std::queue<DWORD> m_qKeyUpSave; // 保存的被松开键队列
std::queue<char> m_qCharSave; // 保存的字符队列
int m_nWheel; // 鼠标滚轮滚动数
int m_nWheelSave; // 保存的鼠标滚轮滚动数
}; // ASLInput类定义结束
} // namespace ASL
#endif // ASL_INPUT_INCLUDE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -