添加按键消息监听
This commit is contained in:
parent
fe192ad78d
commit
27e9825216
|
|
@ -15,7 +15,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
|||
node->setSize(30, 180);
|
||||
scene->add(node);
|
||||
|
||||
auto mouselistener = new EMouseListener(L"listener", [=] {
|
||||
/*auto listener = new EMouseListener([=] {
|
||||
if (!EMouseMsg::isLButtonDown())
|
||||
{
|
||||
if (EMouseMsg::getMsg() == EMouseMsg::MOVE)
|
||||
|
|
@ -23,9 +23,23 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
|||
node->setPos(EMouseMsg::getPos());
|
||||
}
|
||||
}
|
||||
});*/
|
||||
|
||||
auto listener = new EKeyPressListener([=] {
|
||||
if (EKeyMsg::isCapitalLockOn())
|
||||
{
|
||||
if (EKeyMsg::getVal() == EKeyMsg::KEY::LEFT)
|
||||
{
|
||||
node->move(-3, 0);
|
||||
}
|
||||
if (EKeyMsg::getVal() == EKeyMsg::KEY::RIGHT)
|
||||
{
|
||||
node->move(3, 0);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
EMsgManager::addListener(mouselistener);
|
||||
EMsgManager::addListener(listener);
|
||||
|
||||
app.enterScene(scene);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include "..\ebase.h"
|
||||
#include "..\Win\winbase.h"
|
||||
#include "..\emsg.h"
|
||||
#include "..\etools.h"
|
||||
#include <stack>
|
||||
#include <chrono>
|
||||
|
|
@ -456,8 +457,7 @@ void e2d::EApp::_enterNextScene()
|
|||
{
|
||||
// 返回上一场景时,恢复场景上的定时器
|
||||
//Timer::notifyAllSceneTimers(m_pCurrentScene);
|
||||
//MouseMsg::notifyAllSceneListeners(m_pCurrentScene);
|
||||
//KeyMsg::notifyAllSceneListeners(m_pCurrentScene);
|
||||
EMsgManager::notifyAllListenersOnScene(m_pCurrentScene);
|
||||
//ActionManager::notifyAllSceneActions(m_pCurrentScene);
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -195,13 +195,14 @@
|
|||
<ClCompile Include="Base\EApp.cpp" />
|
||||
<ClCompile Include="Base\EObject.cpp" />
|
||||
<ClCompile Include="Base\EScene.cpp" />
|
||||
<ClCompile Include="Msg\EMsgManager.cpp" />
|
||||
<ClCompile Include="Msg\Listener\EKeyListener.cpp" />
|
||||
<ClCompile Include="Msg\Listener\EKeyPressListener.cpp" />
|
||||
<ClCompile Include="Msg\Listener\EListener.cpp" />
|
||||
<ClCompile Include="Msg\Listener\EMouseClickListener.cpp" />
|
||||
<ClCompile Include="Msg\Listener\EMouseDraggedListener.cpp" />
|
||||
<ClCompile Include="Msg\Listener\EMouseListener.cpp" />
|
||||
<ClCompile Include="Node\ENode.cpp" />
|
||||
<ClCompile Include="Tool\EKeyListener.cpp" />
|
||||
<ClCompile Include="Tool\EListener.cpp" />
|
||||
<ClCompile Include="Tool\EMouseClickListener.cpp" />
|
||||
<ClCompile Include="Tool\EMouseDraggedListener.cpp" />
|
||||
<ClCompile Include="Tool\EMouseListener.cpp" />
|
||||
<ClCompile Include="Tool\EMsgManager.cpp" />
|
||||
<ClCompile Include="Tool\EObjectManager.cpp" />
|
||||
<ClCompile Include="Win\winbase.cpp" />
|
||||
</ItemGroup>
|
||||
|
|
@ -210,6 +211,7 @@
|
|||
<ClInclude Include="ebase.h" />
|
||||
<ClInclude Include="ecommon.h" />
|
||||
<ClInclude Include="emacros.h" />
|
||||
<ClInclude Include="emsg.h" />
|
||||
<ClInclude Include="enodes.h" />
|
||||
<ClInclude Include="etools.h" />
|
||||
<ClInclude Include="Win\winbase.h" />
|
||||
|
|
|
|||
|
|
@ -13,8 +13,11 @@
|
|||
<Filter Include="Base">
|
||||
<UniqueIdentifier>{261633d3-3814-40c7-bd6d-201ede6c6ade}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Tool\Listener">
|
||||
<UniqueIdentifier>{bdc55351-669e-4ee5-ba0b-ee0e4b628fea}</UniqueIdentifier>
|
||||
<Filter Include="Msg">
|
||||
<UniqueIdentifier>{cc102a62-b34d-493c-be3c-f3e5dfbe4cf4}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Msg\Listener">
|
||||
<UniqueIdentifier>{b9bb1728-5106-4574-998e-8564b49cb4a1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
@ -36,23 +39,26 @@
|
|||
<ClCompile Include="Base\EScene.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Tool\EMsgManager.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
<ClCompile Include="Msg\EMsgManager.cpp">
|
||||
<Filter>Msg</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Tool\EMouseListener.cpp">
|
||||
<Filter>Tool\Listener</Filter>
|
||||
<ClCompile Include="Msg\Listener\EKeyListener.cpp">
|
||||
<Filter>Msg\Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Tool\EListener.cpp">
|
||||
<Filter>Tool\Listener</Filter>
|
||||
<ClCompile Include="Msg\Listener\EListener.cpp">
|
||||
<Filter>Msg\Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Tool\EKeyListener.cpp">
|
||||
<Filter>Tool\Listener</Filter>
|
||||
<ClCompile Include="Msg\Listener\EMouseClickListener.cpp">
|
||||
<Filter>Msg\Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Tool\EMouseClickListener.cpp">
|
||||
<Filter>Tool\Listener</Filter>
|
||||
<ClCompile Include="Msg\Listener\EMouseDraggedListener.cpp">
|
||||
<Filter>Msg\Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Tool\EMouseDraggedListener.cpp">
|
||||
<Filter>Tool\Listener</Filter>
|
||||
<ClCompile Include="Msg\Listener\EMouseListener.cpp">
|
||||
<Filter>Msg\Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Msg\Listener\EKeyPressListener.cpp">
|
||||
<Filter>Msg\Listener</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
@ -65,5 +71,6 @@
|
|||
<ClInclude Include="ecommon.h" />
|
||||
<ClInclude Include="ebase.h" />
|
||||
<ClInclude Include="easy2d.h" />
|
||||
<ClInclude Include="emsg.h" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#include "..\etools.h"
|
||||
#include "..\..\emsg.h"
|
||||
|
||||
e2d::EKeyListener::EKeyListener()
|
||||
: EListener()
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#include "..\etools.h"
|
||||
#include "..\..\emsg.h"
|
||||
|
||||
e2d::EListener::EListener()
|
||||
: m_bRunning(false)
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
#include "..\..\emsg.h"
|
||||
|
||||
e2d::EMouseClickListener::EMouseClickListener()
|
||||
: EMouseListener()
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EMouseClickListener::EMouseClickListener(EString name)
|
||||
: EMouseListener(name)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EMouseClickListener::EMouseClickListener(const MOUSE_CLICK_LISTENER_CALLBACK & callback)
|
||||
: EMouseListener()
|
||||
, m_callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EMouseClickListener::EMouseClickListener(EString name, const MOUSE_CLICK_LISTENER_CALLBACK & callback)
|
||||
: EMouseListener(name)
|
||||
, m_callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EMouseClickListener::runCallback()
|
||||
{
|
||||
if (EMouseMsg::getMsg() == EMouseMsg::MOUSE_MSG::LBUTTON_DOWN ||
|
||||
EMouseMsg::getMsg() == EMouseMsg::MOUSE_MSG::LBUTTON_DBLCLK)
|
||||
{
|
||||
m_callback(EMouseMsg::getPos());
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMouseClickListener::setCallback(const MOUSE_CLICK_LISTENER_CALLBACK & callback)
|
||||
{
|
||||
m_callback = callback;
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#include "..\etools.h"
|
||||
#include "..\..\emsg.h"
|
||||
|
||||
e2d::EMouseDraggedListener::EMouseDraggedListener()
|
||||
: EMouseListener()
|
||||
|
|
@ -12,20 +12,27 @@ e2d::EMouseDraggedListener::EMouseDraggedListener(EString name)
|
|||
|
||||
e2d::EMouseDraggedListener::EMouseDraggedListener(const MOUSE_DRAG_LISTENER_CALLBACK & callback)
|
||||
: EMouseListener()
|
||||
, m_callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EMouseDraggedListener::EMouseDraggedListener(EString name, const MOUSE_DRAG_LISTENER_CALLBACK & callback)
|
||||
: EMouseListener(name)
|
||||
, m_callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EMouseDraggedListener::runCallback()
|
||||
{
|
||||
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DOWN ||
|
||||
EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DBLCLK)
|
||||
if (EMouseMsg::getMsg() == EMouseMsg::MOUSE_MSG::LBUTTON_DOWN ||
|
||||
EMouseMsg::getMsg() == EMouseMsg::MOUSE_MSG::LBUTTON_DBLCLK)
|
||||
{
|
||||
EMouseListener::runCallback();
|
||||
m_Begin = EMouseMsg::getPos();
|
||||
}
|
||||
else if (EMouseMsg::getMsg() == EMouseMsg::MOUSE_MSG::LBUTTON_UP)
|
||||
{
|
||||
m_End = EMouseMsg::getPos();
|
||||
m_callback(m_Begin, m_End);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#include "..\etools.h"
|
||||
#include "..\..\emsg.h"
|
||||
|
||||
e2d::EMouseListener::EMouseListener()
|
||||
: EListener()
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
#include "..\etools.h"
|
||||
|
||||
e2d::EMouseClickListener::EMouseClickListener()
|
||||
: EMouseListener()
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EMouseClickListener::EMouseClickListener(EString name)
|
||||
: EMouseListener(name)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EMouseClickListener::EMouseClickListener(const MOUSE_LISTENER_CALLBACK & callback)
|
||||
: EMouseListener(callback)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EMouseClickListener::EMouseClickListener(EString name, const MOUSE_LISTENER_CALLBACK & callback)
|
||||
: EMouseListener(name, callback)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EMouseClickListener::runCallback()
|
||||
{
|
||||
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DOWN ||
|
||||
EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DBLCLK)
|
||||
{
|
||||
EMouseListener::runCallback();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,115 +0,0 @@
|
|||
#include "..\etools.h"
|
||||
#include "..\Win\winbase.h"
|
||||
#include <vector>
|
||||
|
||||
|
||||
// 鼠标消息
|
||||
e2d::EMouseMsg mouseMsg;
|
||||
// 鼠标消息监听器
|
||||
std::vector<e2d::EMouseListener*> m_vMouseListeners;
|
||||
// 按键消息监听器
|
||||
//std::vector<e2d::EKeyListener*> m_vKeyListeners;
|
||||
|
||||
|
||||
DWORD e2d::EMouseMsg::getX()
|
||||
{
|
||||
return LOWORD(mouseMsg.m_lParam);
|
||||
}
|
||||
|
||||
DWORD e2d::EMouseMsg::getY()
|
||||
{
|
||||
return HIWORD(mouseMsg.m_lParam);
|
||||
}
|
||||
|
||||
e2d::EPoint e2d::EMouseMsg::getPos()
|
||||
{
|
||||
return EPoint(LOWORD(mouseMsg.m_lParam), HIWORD(mouseMsg.m_lParam));
|
||||
}
|
||||
|
||||
bool e2d::EMouseMsg::isLButtonDown()
|
||||
{
|
||||
return GET_KEYSTATE_WPARAM(mouseMsg.m_wParam) == MK_LBUTTON;
|
||||
}
|
||||
|
||||
bool e2d::EMouseMsg::isMButtonDown()
|
||||
{
|
||||
return GET_KEYSTATE_WPARAM(mouseMsg.m_wParam) == MK_MBUTTON;
|
||||
}
|
||||
|
||||
bool e2d::EMouseMsg::isRButtonDown()
|
||||
{
|
||||
return GET_KEYSTATE_WPARAM(mouseMsg.m_wParam) == MK_RBUTTON;
|
||||
}
|
||||
|
||||
bool e2d::EMouseMsg::isShiftDown()
|
||||
{
|
||||
return GET_KEYSTATE_WPARAM(mouseMsg.m_wParam) == MK_SHIFT;
|
||||
}
|
||||
|
||||
bool e2d::EMouseMsg::isCtrlDown()
|
||||
{
|
||||
return GET_KEYSTATE_WPARAM(mouseMsg.m_wParam) == MK_CONTROL;
|
||||
}
|
||||
|
||||
DWORD e2d::EMouseMsg::getWheelDelta()
|
||||
{
|
||||
return GET_WHEEL_DELTA_WPARAM(mouseMsg.m_wParam);
|
||||
}
|
||||
|
||||
e2d::EMouseMsg::MSG e2d::EMouseMsg::getMsg()
|
||||
{
|
||||
return MSG(mouseMsg.m_nMsg);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void e2d::EMsgManager::MouseProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
// 保存鼠标消息
|
||||
mouseMsg.m_nMsg = message;
|
||||
mouseMsg.m_wParam = wParam;
|
||||
mouseMsg.m_lParam = lParam;
|
||||
// 执行鼠标消息监听函数
|
||||
for (auto mlistener : m_vMouseListeners)
|
||||
{
|
||||
if (mlistener->isRunning())
|
||||
{
|
||||
mlistener->runCallback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::KeyboardProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_KEYDOWN:
|
||||
case WM_KEYUP:
|
||||
case WM_CHAR:
|
||||
break;
|
||||
}
|
||||
|
||||
for (auto mlistener : m_vMouseListeners)
|
||||
{
|
||||
if (mlistener->isRunning())
|
||||
{
|
||||
mlistener->runCallback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::addListener(e2d::EMouseListener * listener)
|
||||
{
|
||||
if (listener)
|
||||
{
|
||||
listener->start();
|
||||
listener->retain();
|
||||
listener->setParentScene(EApp::get()->getLoadingScene());
|
||||
m_vMouseListeners.push_back(listener);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::__exec()
|
||||
{
|
||||
}
|
||||
|
|
@ -19,6 +19,7 @@
|
|||
#include "emacros.h"
|
||||
#include "ecommon.h"
|
||||
#include "ebase.h"
|
||||
#include "emsg.h"
|
||||
#include "enodes.h"
|
||||
#include "etools.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ typedef struct
|
|||
|
||||
typedef std::function<void()> KEY_LISTENER_CALLBACK;
|
||||
typedef std::function<void()> MOUSE_LISTENER_CALLBACK;
|
||||
typedef std::function<void(EPoint mousePos)> MOUSE_CLICK_LISTENER_CALLBACK;
|
||||
typedef std::function<void(EPoint begin, EPoint end)> MOUSE_DRAG_LISTENER_CALLBACK;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,406 @@
|
|||
#pragma once
|
||||
#include "ebase.h"
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
|
||||
class EMsgManager;
|
||||
|
||||
|
||||
// 鼠标消息
|
||||
class EMouseMsg
|
||||
{
|
||||
friend EMsgManager;
|
||||
|
||||
public:
|
||||
// 鼠标消息集合
|
||||
enum class MOUSE_MSG
|
||||
{
|
||||
MOVE = 0x0200, // 鼠标移动
|
||||
LBUTTON_DOWN, // 鼠标左键按下
|
||||
LBUTTON_UP, // 鼠标左键抬起
|
||||
LBUTTON_DBLCLK, // 鼠标左键双击
|
||||
RBUTTON_DOWN, // 鼠标右键按下
|
||||
RBUTTON_UP, // 鼠标右键抬起
|
||||
RBUTTON_DBLCLK, // 鼠标右键双击
|
||||
MBUTTON_DOWN, // 鼠标中键按下
|
||||
MBUTTON_UP, // 鼠标中键抬起
|
||||
MBUTTON_DBLCLK, // 鼠标中键双击
|
||||
WHEEL // 滑动滚轮
|
||||
};
|
||||
|
||||
// 获取鼠标横坐标
|
||||
static DWORD getX();
|
||||
|
||||
// 获取鼠标纵坐标
|
||||
static DWORD getY();
|
||||
|
||||
// 获取鼠标坐标
|
||||
static EPoint getPos();
|
||||
|
||||
// 获取鼠标左键按下状态
|
||||
static bool isLButtonDown();
|
||||
|
||||
// 获取鼠标中键按下状态
|
||||
static bool isMButtonDown();
|
||||
|
||||
// 获取鼠标右键按下状态
|
||||
static bool isRButtonDown();
|
||||
|
||||
// 获取 Shift 按键状态
|
||||
static bool isShiftDown();
|
||||
|
||||
// 获取 Ctrl 按键状态
|
||||
static bool isCtrlDown();
|
||||
|
||||
// 获取鼠标滚轮值
|
||||
static DWORD getWheelDelta();
|
||||
|
||||
// 获取当前鼠标消息
|
||||
static MOUSE_MSG getMsg();
|
||||
|
||||
protected:
|
||||
UINT m_nMsg = 0;
|
||||
WPARAM m_wParam = 0;
|
||||
LPARAM m_lParam = 0;
|
||||
};
|
||||
|
||||
|
||||
// 监听器
|
||||
class EListener :
|
||||
public EObject
|
||||
{
|
||||
public:
|
||||
EListener();
|
||||
|
||||
EListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
// 获取监听器状态
|
||||
bool isRunning() const;
|
||||
|
||||
// 启动监听
|
||||
void start();
|
||||
|
||||
// 停止监听
|
||||
void stop();
|
||||
|
||||
// 进入等待状态
|
||||
void wait();
|
||||
|
||||
// 唤醒
|
||||
void notify();
|
||||
|
||||
// 获取监听器名称
|
||||
EString getName() const;
|
||||
|
||||
// 获取监听器所在场景
|
||||
EScene * getParentScene() const;
|
||||
|
||||
// 设置监听器名称
|
||||
void setName(
|
||||
EString name
|
||||
);
|
||||
|
||||
// 设置监听器所在场景
|
||||
void setParentScene(
|
||||
EScene * scene
|
||||
);
|
||||
|
||||
protected:
|
||||
EString m_sName;
|
||||
bool m_bRunning;
|
||||
bool m_bWaiting;
|
||||
EScene * m_pParentScene;
|
||||
};
|
||||
|
||||
|
||||
// 鼠标消息监听器
|
||||
class EMouseListener :
|
||||
public EListener
|
||||
{
|
||||
public:
|
||||
EMouseListener();
|
||||
|
||||
EMouseListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
EMouseListener(
|
||||
const MOUSE_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EMouseListener(
|
||||
EString name,
|
||||
const MOUSE_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 执行监听器回调函数
|
||||
virtual void runCallback();
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(
|
||||
const MOUSE_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
protected:
|
||||
MOUSE_LISTENER_CALLBACK m_callback;
|
||||
};
|
||||
|
||||
|
||||
// 鼠标点击消息监听器
|
||||
class EMouseClickListener :
|
||||
public EMouseListener
|
||||
{
|
||||
public:
|
||||
EMouseClickListener();
|
||||
|
||||
EMouseClickListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
EMouseClickListener(
|
||||
const MOUSE_CLICK_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EMouseClickListener(
|
||||
EString name,
|
||||
const MOUSE_CLICK_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 执行监听器回调函数
|
||||
virtual void runCallback() override;
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(
|
||||
const MOUSE_CLICK_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
protected:
|
||||
MOUSE_CLICK_LISTENER_CALLBACK m_callback;
|
||||
};
|
||||
|
||||
|
||||
// 鼠标拖动消息监听器
|
||||
class EMouseDraggedListener :
|
||||
public EMouseListener
|
||||
{
|
||||
public:
|
||||
EMouseDraggedListener();
|
||||
|
||||
EMouseDraggedListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
EMouseDraggedListener(
|
||||
const MOUSE_DRAG_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EMouseDraggedListener(
|
||||
EString name,
|
||||
const MOUSE_DRAG_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 执行监听器回调函数
|
||||
virtual void runCallback() override;
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(
|
||||
const MOUSE_DRAG_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
protected:
|
||||
EPoint m_Begin;
|
||||
EPoint m_End;
|
||||
MOUSE_DRAG_LISTENER_CALLBACK m_callback;
|
||||
};
|
||||
|
||||
|
||||
// 按键消息
|
||||
class EKeyMsg
|
||||
{
|
||||
friend EMsgManager;
|
||||
|
||||
public:
|
||||
// 按键消息类型集合
|
||||
enum class KEYBOARD_MSG
|
||||
{
|
||||
KEY_DOWN = 0x0100, // 按下
|
||||
KEY_UP // 抬起
|
||||
};
|
||||
|
||||
// 按键键值集合
|
||||
enum class KEY
|
||||
{
|
||||
A = 'A', B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, // 字母键值
|
||||
NUM0 = '0', NUM1, NUM2, NUM3, NUM4, NUM5, NUM6, NUM7, NUM8, NUM9, // 数字键值
|
||||
NUMPAD0 = 0x60, NUMPAD1, NUMPAD2, NUMPAD3, NUMPAD4, NUMPAD5, NUMPAD6, NUMPAD7, NUMPAD8, NUMPAD9, // 数字小键盘键值
|
||||
F1 = 0x70, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, // F键键值
|
||||
MULTIPLY, // 乘号键键值
|
||||
ADD, // 加号键键值
|
||||
SEPARATOR, // 分割键键值
|
||||
SUBTRACT, // 减号键键值
|
||||
DECIMAL, // 小数点键键值
|
||||
DIVIDE, // 除号键键值
|
||||
TAB = 0x09, // TAB 键键值
|
||||
ENTER = 0x0D, // 回车键键值
|
||||
SHIFT, CTRL, // SHIFT 键键值
|
||||
ESC = 0x1B, // ESCAPE 键键值
|
||||
SPACE = 0x20, // 空格键键值
|
||||
PAGE_UP, // PageUp 键键值
|
||||
PAGE_DOWN, // PageDown 键键值
|
||||
END, // End 键键值
|
||||
HOME, // Home 键键值
|
||||
LEFT, // 左键键值
|
||||
UP, // 上键键值
|
||||
RIGHT, // 右键键值
|
||||
DOWN // 下键键值
|
||||
};
|
||||
|
||||
// 获取按键消息类型
|
||||
static KEYBOARD_MSG getMsg();
|
||||
|
||||
// 获取键值
|
||||
static KEY getVal();
|
||||
|
||||
// 获取按键消息的计数
|
||||
static DWORD getCount();
|
||||
|
||||
// 获取特定按键的状态
|
||||
static bool isKeyDown(
|
||||
KEY key
|
||||
);
|
||||
|
||||
// 获取大小写锁定状态
|
||||
static bool isCapitalLockOn();
|
||||
|
||||
// 获取数字小键盘锁定状态
|
||||
static bool isNumpadLockOn();
|
||||
|
||||
// 获取滑动锁定状态
|
||||
static bool isScrollLockOn();
|
||||
|
||||
protected:
|
||||
UINT m_nMsg = 0;
|
||||
WPARAM m_wParam = 0;
|
||||
LPARAM m_lParam = 0;
|
||||
};
|
||||
|
||||
|
||||
// 按键消息监听器
|
||||
class EKeyListener :
|
||||
public EListener
|
||||
{
|
||||
public:
|
||||
EKeyListener();
|
||||
|
||||
EKeyListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
EKeyListener(
|
||||
const KEY_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EKeyListener(
|
||||
EString name,
|
||||
const KEY_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 执行监听器回调函数
|
||||
virtual void runCallback();
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(
|
||||
const KEY_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
protected:
|
||||
KEY_LISTENER_CALLBACK m_callback;
|
||||
};
|
||||
|
||||
|
||||
// 按键按下消息监听
|
||||
class EKeyPressListener :
|
||||
public EKeyListener
|
||||
{
|
||||
public:
|
||||
EKeyPressListener();
|
||||
|
||||
EKeyPressListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
EKeyPressListener(
|
||||
const KEY_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EKeyPressListener(
|
||||
EString name,
|
||||
const KEY_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 执行监听器回调函数
|
||||
virtual void runCallback() override;
|
||||
};
|
||||
|
||||
|
||||
// 消息管理器
|
||||
class EMsgManager
|
||||
{
|
||||
friend EApp;
|
||||
|
||||
public:
|
||||
// 添加鼠标消息监听器
|
||||
static void addListener(
|
||||
EMouseListener * listener,
|
||||
EScene * pParentScene
|
||||
);
|
||||
|
||||
// 添加按键消息监听器
|
||||
static void addListener(
|
||||
EKeyListener * listener,
|
||||
EScene * pParentScene
|
||||
);
|
||||
|
||||
// 启动具有相同名称的监听器
|
||||
static void startListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
// 停止具有相同名称的监听器
|
||||
static void stopListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
// 删除具有相同名称的监听器
|
||||
static void delListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
// 挂起场景上的所有监听器
|
||||
static void waitAllListenersOnScene(
|
||||
EScene * scene
|
||||
);
|
||||
|
||||
// 重启场景上的所有监听器
|
||||
static void notifyAllListenersOnScene(
|
||||
EScene * scene
|
||||
);
|
||||
|
||||
private:
|
||||
static void MouseProc(
|
||||
UINT message,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam
|
||||
);
|
||||
|
||||
static void KeyboardProc(
|
||||
UINT message,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam
|
||||
);
|
||||
};
|
||||
|
||||
}
|
||||
275
Easy2D/etools.h
275
Easy2D/etools.h
|
|
@ -4,9 +4,7 @@
|
|||
namespace e2d
|
||||
{
|
||||
|
||||
class EMsgManager;
|
||||
|
||||
|
||||
// 对象管理器
|
||||
class EObjectManager
|
||||
{
|
||||
friend EApp;
|
||||
|
|
@ -25,275 +23,4 @@ private:
|
|||
static void __flush();
|
||||
};
|
||||
|
||||
|
||||
class EMouseMsg
|
||||
{
|
||||
friend EMsgManager;
|
||||
|
||||
public:
|
||||
// 鼠标消息集合
|
||||
enum MSG
|
||||
{
|
||||
MOVE = 0x0200, // 鼠标移动
|
||||
LBUTTON_DOWN, // 鼠标左键按下
|
||||
LBUTTON_UP, // 鼠标左键抬起
|
||||
LBUTTON_DBLCLK, // 鼠标左键双击
|
||||
RBUTTON_DOWN, // 鼠标右键按下
|
||||
RBUTTON_UP, // 鼠标右键抬起
|
||||
RBUTTON_DBLCLK, // 鼠标右键双击
|
||||
MBUTTON_DOWN, // 鼠标中键按下
|
||||
MBUTTON_UP, // 鼠标中键抬起
|
||||
MBUTTON_DBLCLK, // 鼠标中键双击
|
||||
WHEEL // 滑动滚轮
|
||||
};
|
||||
|
||||
// 获取鼠标横坐标
|
||||
static DWORD getX();
|
||||
|
||||
// 获取鼠标纵坐标
|
||||
static DWORD getY();
|
||||
|
||||
// 获取鼠标坐标
|
||||
static EPoint getPos();
|
||||
|
||||
// 获取鼠标左键按下状态
|
||||
static bool isLButtonDown();
|
||||
|
||||
// 获取鼠标中键按下状态
|
||||
static bool isMButtonDown();
|
||||
|
||||
// 获取鼠标右键按下状态
|
||||
static bool isRButtonDown();
|
||||
|
||||
// 获取 Shift 按键状态
|
||||
static bool isShiftDown();
|
||||
|
||||
// 获取 Ctrl 按键状态
|
||||
static bool isCtrlDown();
|
||||
|
||||
// 获取鼠标滚轮值
|
||||
static DWORD getWheelDelta();
|
||||
|
||||
// 获取当前鼠标消息
|
||||
static MSG getMsg();
|
||||
|
||||
protected:
|
||||
UINT m_nMsg = 0;
|
||||
WPARAM m_wParam = 0;
|
||||
LPARAM m_lParam = 0;
|
||||
};
|
||||
|
||||
|
||||
class EListener :
|
||||
public EObject
|
||||
{
|
||||
public:
|
||||
EListener();
|
||||
|
||||
EListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
// 获取监听器状态
|
||||
bool isRunning() const;
|
||||
|
||||
// 启动监听
|
||||
void start();
|
||||
|
||||
// 停止监听
|
||||
void stop();
|
||||
|
||||
// 进入等待状态
|
||||
void wait();
|
||||
|
||||
// 唤醒
|
||||
void notify();
|
||||
|
||||
// 获取监听器名称
|
||||
EString getName() const;
|
||||
|
||||
// 获取监听器所在场景
|
||||
EScene * getParentScene() const;
|
||||
|
||||
// 设置监听器名称
|
||||
void setName(
|
||||
EString name
|
||||
);
|
||||
|
||||
// 设置监听器所在场景
|
||||
void setParentScene(
|
||||
EScene * scene
|
||||
);
|
||||
|
||||
protected:
|
||||
EString m_sName;
|
||||
bool m_bRunning;
|
||||
bool m_bWaiting;
|
||||
EScene * m_pParentScene;
|
||||
};
|
||||
|
||||
|
||||
class EMouseListener :
|
||||
public EListener
|
||||
{
|
||||
public:
|
||||
EMouseListener();
|
||||
|
||||
EMouseListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
EMouseListener(
|
||||
const MOUSE_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EMouseListener(
|
||||
EString name,
|
||||
const MOUSE_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 执行监听器回调函数
|
||||
virtual void runCallback();
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(const MOUSE_LISTENER_CALLBACK &callback);
|
||||
|
||||
protected:
|
||||
MOUSE_LISTENER_CALLBACK m_callback;
|
||||
};
|
||||
|
||||
|
||||
class EMouseClickListener :
|
||||
public EMouseListener
|
||||
{
|
||||
public:
|
||||
EMouseClickListener();
|
||||
|
||||
EMouseClickListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
EMouseClickListener(
|
||||
const MOUSE_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EMouseClickListener(
|
||||
EString name,
|
||||
const MOUSE_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 执行监听器回调函数
|
||||
virtual void runCallback() override;
|
||||
};
|
||||
|
||||
|
||||
class EMouseDraggedListener :
|
||||
public EMouseListener
|
||||
{
|
||||
public:
|
||||
EMouseDraggedListener();
|
||||
|
||||
EMouseDraggedListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
EMouseDraggedListener(
|
||||
const MOUSE_DRAG_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EMouseDraggedListener(
|
||||
EString name,
|
||||
const MOUSE_DRAG_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 执行监听器回调函数
|
||||
virtual void runCallback() override;
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(const MOUSE_DRAG_LISTENER_CALLBACK &callback);
|
||||
|
||||
protected:
|
||||
EPoint m_Begin;
|
||||
EPoint m_End;
|
||||
MOUSE_DRAG_LISTENER_CALLBACK m_callback;
|
||||
};
|
||||
|
||||
|
||||
class EKeyMsg
|
||||
{
|
||||
public:
|
||||
// 鼠标消息集合
|
||||
enum MESSAGE
|
||||
{
|
||||
MOVE = 0x0200, // 鼠标移动
|
||||
LBUTTON_DOWN, // 鼠标左键按下
|
||||
LBUTTON_UP, // 鼠标左键抬起
|
||||
LBUTTON_DBLCLK, // 鼠标左键双击
|
||||
RBUTTON_DOWN, // 鼠标右键按下
|
||||
RBUTTON_UP, // 鼠标右键抬起
|
||||
RBUTTON_DBLCLK, // 鼠标右键双击
|
||||
MBUTTON_DOWN, // 鼠标中键按下
|
||||
MBUTTON_UP, // 鼠标中键抬起
|
||||
MBUTTON_DBLCLK, // 鼠标中键双击
|
||||
WHEEL // 滑动滚轮
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class EKeyListener :
|
||||
public EListener
|
||||
{
|
||||
public:
|
||||
EKeyListener();
|
||||
|
||||
EKeyListener(
|
||||
EString name
|
||||
);
|
||||
|
||||
EKeyListener(
|
||||
const KEY_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EKeyListener(
|
||||
EString name,
|
||||
const KEY_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 执行监听器回调函数
|
||||
void runCallback();
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(const KEY_LISTENER_CALLBACK &callback);
|
||||
|
||||
protected:
|
||||
KEY_LISTENER_CALLBACK m_callback;
|
||||
};
|
||||
|
||||
|
||||
class EMsgManager
|
||||
{
|
||||
friend EApp;
|
||||
|
||||
public:
|
||||
static void MouseProc(
|
||||
UINT message,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam
|
||||
);
|
||||
|
||||
static void KeyboardProc(
|
||||
UINT message,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam
|
||||
);
|
||||
|
||||
static void addListener(
|
||||
EMouseListener * listener
|
||||
);
|
||||
|
||||
private:
|
||||
|
||||
static void __exec();
|
||||
};
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue