diff --git a/Demo/main.cpp b/Demo/main.cpp index bb40b03c..73a4bb5c 100644 --- a/Demo/main.cpp +++ b/Demo/main.cpp @@ -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); diff --git a/Easy2D/Base/EApp.cpp b/Easy2D/Base/EApp.cpp index 84c5f732..9aa75a0a 100644 --- a/Easy2D/Base/EApp.cpp +++ b/Easy2D/Base/EApp.cpp @@ -1,5 +1,6 @@ #include "..\ebase.h" #include "..\Win\winbase.h" +#include "..\emsg.h" #include "..\etools.h" #include #include @@ -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 diff --git a/Easy2D/Easy2D.vcxproj b/Easy2D/Easy2D.vcxproj index ee4a59fd..f3d4b807 100644 --- a/Easy2D/Easy2D.vcxproj +++ b/Easy2D/Easy2D.vcxproj @@ -195,13 +195,14 @@ + + + + + + + - - - - - - @@ -210,6 +211,7 @@ + diff --git a/Easy2D/Easy2D.vcxproj.filters b/Easy2D/Easy2D.vcxproj.filters index 60b62fee..c796646e 100644 --- a/Easy2D/Easy2D.vcxproj.filters +++ b/Easy2D/Easy2D.vcxproj.filters @@ -13,8 +13,11 @@ {261633d3-3814-40c7-bd6d-201ede6c6ade} - - {bdc55351-669e-4ee5-ba0b-ee0e4b628fea} + + {cc102a62-b34d-493c-be3c-f3e5dfbe4cf4} + + + {b9bb1728-5106-4574-998e-8564b49cb4a1} @@ -36,23 +39,26 @@ Base - - Tool + + Msg - - Tool\Listener + + Msg\Listener - - Tool\Listener + + Msg\Listener - - Tool\Listener + + Msg\Listener - - Tool\Listener + + Msg\Listener - - Tool\Listener + + Msg\Listener + + + Msg\Listener @@ -65,5 +71,6 @@ + \ No newline at end of file diff --git a/Easy2D/Tool/EKeyListener.cpp b/Easy2D/Msg/Listener/EKeyListener.cpp similarity index 90% rename from Easy2D/Tool/EKeyListener.cpp rename to Easy2D/Msg/Listener/EKeyListener.cpp index ba3d68b5..214995ed 100644 --- a/Easy2D/Tool/EKeyListener.cpp +++ b/Easy2D/Msg/Listener/EKeyListener.cpp @@ -1,4 +1,4 @@ -#include "..\etools.h" +#include "..\..\emsg.h" e2d::EKeyListener::EKeyListener() : EListener() diff --git a/Easy2D/Tool/EListener.cpp b/Easy2D/Msg/Listener/EListener.cpp similarity index 90% rename from Easy2D/Tool/EListener.cpp rename to Easy2D/Msg/Listener/EListener.cpp index c6cc5149..1de028d5 100644 --- a/Easy2D/Tool/EListener.cpp +++ b/Easy2D/Msg/Listener/EListener.cpp @@ -1,4 +1,4 @@ -#include "..\etools.h" +#include "..\..\emsg.h" e2d::EListener::EListener() : m_bRunning(false) diff --git a/Easy2D/Msg/Listener/EMouseClickListener.cpp b/Easy2D/Msg/Listener/EMouseClickListener.cpp new file mode 100644 index 00000000..e324b338 --- /dev/null +++ b/Easy2D/Msg/Listener/EMouseClickListener.cpp @@ -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; +} diff --git a/Easy2D/Tool/EMouseDraggedListener.cpp b/Easy2D/Msg/Listener/EMouseDraggedListener.cpp similarity index 59% rename from Easy2D/Tool/EMouseDraggedListener.cpp rename to Easy2D/Msg/Listener/EMouseDraggedListener.cpp index ebea49e6..b944baed 100644 --- a/Easy2D/Tool/EMouseDraggedListener.cpp +++ b/Easy2D/Msg/Listener/EMouseDraggedListener.cpp @@ -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); } } diff --git a/Easy2D/Tool/EMouseListener.cpp b/Easy2D/Msg/Listener/EMouseListener.cpp similarity index 90% rename from Easy2D/Tool/EMouseListener.cpp rename to Easy2D/Msg/Listener/EMouseListener.cpp index 9001d9b9..f44910f6 100644 --- a/Easy2D/Tool/EMouseListener.cpp +++ b/Easy2D/Msg/Listener/EMouseListener.cpp @@ -1,4 +1,4 @@ -#include "..\etools.h" +#include "..\..\emsg.h" e2d::EMouseListener::EMouseListener() : EListener() diff --git a/Easy2D/Tool/EMouseClickListener.cpp b/Easy2D/Tool/EMouseClickListener.cpp deleted file mode 100644 index 3840f94f..00000000 --- a/Easy2D/Tool/EMouseClickListener.cpp +++ /dev/null @@ -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(); - } -} diff --git a/Easy2D/Tool/EMsgManager.cpp b/Easy2D/Tool/EMsgManager.cpp deleted file mode 100644 index 3dc06cad..00000000 --- a/Easy2D/Tool/EMsgManager.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include "..\etools.h" -#include "..\Win\winbase.h" -#include - - -// 鼠标消息 -e2d::EMouseMsg mouseMsg; -// 鼠标消息监听器 -std::vector m_vMouseListeners; -// 按键消息监听器 -//std::vector 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() -{ -} diff --git a/Easy2D/easy2d.h b/Easy2D/easy2d.h index 0114b253..c3b80997 100644 --- a/Easy2D/easy2d.h +++ b/Easy2D/easy2d.h @@ -19,6 +19,7 @@ #include "emacros.h" #include "ecommon.h" #include "ebase.h" +#include "emsg.h" #include "enodes.h" #include "etools.h" diff --git a/Easy2D/ecommon.h b/Easy2D/ecommon.h index 690d4702..9c2a306d 100644 --- a/Easy2D/ecommon.h +++ b/Easy2D/ecommon.h @@ -25,6 +25,7 @@ typedef struct typedef std::function KEY_LISTENER_CALLBACK; typedef std::function MOUSE_LISTENER_CALLBACK; +typedef std::function MOUSE_CLICK_LISTENER_CALLBACK; typedef std::function MOUSE_DRAG_LISTENER_CALLBACK; diff --git a/Easy2D/emsg.h b/Easy2D/emsg.h new file mode 100644 index 00000000..bc487ef3 --- /dev/null +++ b/Easy2D/emsg.h @@ -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 + ); +}; + +} \ No newline at end of file diff --git a/Easy2D/etools.h b/Easy2D/etools.h index c9409f5f..37f0d50d 100644 --- a/Easy2D/etools.h +++ b/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(); -}; - } \ No newline at end of file