添加按键消息监听

This commit is contained in:
Nomango 2017-10-13 20:16:31 +08:00
parent fe192ad78d
commit 27e9825216
15 changed files with 507 additions and 450 deletions

View File

@ -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);

View File

@ -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

View File

@ -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" />

View File

@ -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>

View File

@ -1,4 +1,4 @@
#include "..\etools.h"
#include "..\..\emsg.h"
e2d::EKeyListener::EKeyListener()
: EListener()

View File

@ -1,4 +1,4 @@
#include "..\etools.h"
#include "..\..\emsg.h"
e2d::EListener::EListener()
: m_bRunning(false)

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -1,4 +1,4 @@
#include "..\etools.h"
#include "..\..\emsg.h"
e2d::EMouseListener::EMouseListener()
: EListener()

View File

@ -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();
}
}

View File

@ -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()
{
}

View File

@ -19,6 +19,7 @@
#include "emacros.h"
#include "ecommon.h"
#include "ebase.h"
#include "emsg.h"
#include "enodes.h"
#include "etools.h"

View File

@ -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;

406
Easy2D/emsg.h Normal file
View File

@ -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
);
};
}

View File

@ -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();
};
}