diff --git a/Demo/Demo.vcxproj b/Demo/Demo.vcxproj index b89fc721..76d54104 100644 --- a/Demo/Demo.vcxproj +++ b/Demo/Demo.vcxproj @@ -42,7 +42,7 @@ Application true - v141 + v140 Unicode diff --git a/Demo/main.cpp b/Demo/main.cpp index 22db1191..bb40b03c 100644 --- a/Demo/main.cpp +++ b/Demo/main.cpp @@ -15,6 +15,18 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine node->setSize(30, 180); scene->add(node); + auto mouselistener = new EMouseListener(L"listener", [=] { + if (!EMouseMsg::isLButtonDown()) + { + if (EMouseMsg::getMsg() == EMouseMsg::MOVE) + { + node->setPos(EMouseMsg::getPos()); + } + } + }); + + EMsgManager::addListener(mouselistener); + app.enterScene(scene); app.run(); diff --git a/Easy2D/Base/EApp.cpp b/Easy2D/Base/EApp.cpp index 622ae220..84c5f732 100644 --- a/Easy2D/Base/EApp.cpp +++ b/Easy2D/Base/EApp.cpp @@ -99,7 +99,7 @@ bool e2d::EApp::init(e2d::EString title, UINT32 width, UINT32 height, bool bShow GetHWnd() = CreateWindow( L"E2DApp", m_sTitle.c_str(), - WS_OVERLAPPEDWINDOW, + WS_OVERLAPPEDWINDOW | CS_DBLCLKS, CW_USEDEFAULT, CW_USEDEFAULT, static_cast(ceil(width * dpiX / 96.f)), @@ -595,7 +595,16 @@ LRESULT e2d::EApp::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam case WM_MOUSEMOVE: case WM_MOUSEWHEEL: { - EMsgManager::setMouseMsg(message); + EMsgManager::MouseProc(message, wParam, lParam); + } + result = 0; + break; + + case WM_KEYDOWN: + case WM_KEYUP: + case WM_CHAR: + { + EMsgManager::KeyboardProc(message, wParam, lParam); } result = 0; break; diff --git a/Easy2D/Easy2D.vcxproj b/Easy2D/Easy2D.vcxproj index f6173c2e..ee4a59fd 100644 --- a/Easy2D/Easy2D.vcxproj +++ b/Easy2D/Easy2D.vcxproj @@ -42,7 +42,7 @@ StaticLibrary true - v141 + v140 Unicode @@ -196,6 +196,10 @@ + + + + diff --git a/Easy2D/Easy2D.vcxproj.filters b/Easy2D/Easy2D.vcxproj.filters index cdc50456..60b62fee 100644 --- a/Easy2D/Easy2D.vcxproj.filters +++ b/Easy2D/Easy2D.vcxproj.filters @@ -1,57 +1,69 @@ - - - - - {2f0f3d30-bfc2-4aea-a170-258bbaacaa79} - - - {42d46a92-c043-4667-8c20-358319e5c313} - - - {51864c81-02ee-4043-bf09-9ce3cbe5b6da} - - - {261633d3-3814-40c7-bd6d-201ede6c6ade} - - - {bdc55351-669e-4ee5-ba0b-ee0e4b628fea} - - - - - Win - - - Base - - - Base - - - Node - - - Tool - - - Base - - - Tool - - - Tool\Listener - - - - - Win - - - - - - - - + + + + + {2f0f3d30-bfc2-4aea-a170-258bbaacaa79} + + + {42d46a92-c043-4667-8c20-358319e5c313} + + + {51864c81-02ee-4043-bf09-9ce3cbe5b6da} + + + {261633d3-3814-40c7-bd6d-201ede6c6ade} + + + {bdc55351-669e-4ee5-ba0b-ee0e4b628fea} + + + + + Win + + + Base + + + Base + + + Node + + + Tool + + + Base + + + Tool + + + Tool\Listener + + + Tool\Listener + + + Tool\Listener + + + Tool\Listener + + + Tool\Listener + + + + + Win + + + + + + + + \ No newline at end of file diff --git a/Easy2D/Node/ENode.cpp b/Easy2D/Node/ENode.cpp index 10b7b256..d787542b 100644 --- a/Easy2D/Node/ENode.cpp +++ b/Easy2D/Node/ENode.cpp @@ -93,22 +93,22 @@ e2d::ERect e2d::ENode::getRect() const void e2d::ENode::setX(int x) { - m_Rect.TopLeft().x = x; + m_Rect.MoveToX(x); } void e2d::ENode::setY(int y) { - m_Rect.TopLeft().y = y; + m_Rect.MoveToY(y); } void e2d::ENode::setPos(int x, int y) { - m_Rect.TopLeft().SetPoint(x, y); + m_Rect.MoveToXY(x, y); } void e2d::ENode::setPos(EPoint p) { - m_Rect.TopLeft() = p; + m_Rect.MoveToXY(p.x, p.y); } void e2d::ENode::move(int x, int y) @@ -137,7 +137,7 @@ void e2d::ENode::setSize(UINT32 width, UINT32 height) setHeight(height); } -void e2d::ENode::setSize(e2d::ESize size) +void e2d::ENode::setSize(ESize size) { setSize(size.cx, size.cy); } @@ -153,7 +153,7 @@ void e2d::ENode::setRect(EPoint leftTop, EPoint rightBottom) m_Rect.BottomRight() = rightBottom; } -void e2d::ENode::setRect(e2d::ERect rect) +void e2d::ENode::setRect(ERect rect) { m_Rect = rect; } @@ -168,7 +168,7 @@ void e2d::ENode::setZOrder(int z) m_nZOrder = z; } -void e2d::ENode::setParent(e2d::ENode * parent) +void e2d::ENode::setParent(ENode * parent) { m_pParent = parent; } @@ -183,7 +183,7 @@ e2d::EScene * &e2d::ENode::getParentScene() return m_pParentScene; } -void e2d::ENode::setParentScene(e2d::EScene * scene) +void e2d::ENode::setParentScene(EScene * scene) { m_pParentScene = scene; } diff --git a/Easy2D/Tool/EKeyListener.cpp b/Easy2D/Tool/EKeyListener.cpp new file mode 100644 index 00000000..ba3d68b5 --- /dev/null +++ b/Easy2D/Tool/EKeyListener.cpp @@ -0,0 +1,33 @@ +#include "..\etools.h" + +e2d::EKeyListener::EKeyListener() + : EListener() +{ +} + +e2d::EKeyListener::EKeyListener(EString name) + : EListener(name) +{ +} + +e2d::EKeyListener::EKeyListener(const KEY_LISTENER_CALLBACK & callback) + : EListener() +{ + m_callback = callback; +} + +e2d::EKeyListener::EKeyListener(EString name, const KEY_LISTENER_CALLBACK & callback) + : EListener(name) +{ + m_callback = callback; +} + +void e2d::EKeyListener::runCallback() +{ + m_callback(); +} + +void e2d::EKeyListener::setCallback(const KEY_LISTENER_CALLBACK & callback) +{ + m_callback = callback; +} diff --git a/Easy2D/Tool/EListener.cpp b/Easy2D/Tool/EListener.cpp new file mode 100644 index 00000000..c6cc5149 --- /dev/null +++ b/Easy2D/Tool/EListener.cpp @@ -0,0 +1,60 @@ +#include "..\etools.h" + +e2d::EListener::EListener() + : m_bRunning(false) + , m_bWaiting(false) + , m_sName(L"") + , m_pParentScene(nullptr) +{ +} + +e2d::EListener::EListener(EString name) + : EListener() +{ + m_sName = name; +} + +bool e2d::EListener::isRunning() const +{ + return m_bRunning && !m_bWaiting; +} + +void e2d::EListener::start() +{ + m_bRunning = true; +} + +void e2d::EListener::stop() +{ + m_bRunning = false; +} + +void e2d::EListener::wait() +{ + m_bWaiting = true; +} + +void e2d::EListener::notify() +{ + m_bWaiting = false; +} + +e2d::EString e2d::EListener::getName() const +{ + return m_sName; +} + +e2d::EScene * e2d::EListener::getParentScene() const +{ + return m_pParentScene; +} + +void e2d::EListener::setName(EString name) +{ + m_sName = name; +} + +void e2d::EListener::setParentScene(EScene * scene) +{ + if (scene != nullptr) m_pParentScene = scene; +} diff --git a/Easy2D/Tool/EMouseClickListener.cpp b/Easy2D/Tool/EMouseClickListener.cpp new file mode 100644 index 00000000..3840f94f --- /dev/null +++ b/Easy2D/Tool/EMouseClickListener.cpp @@ -0,0 +1,30 @@ +#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/EMouseDraggedListener.cpp b/Easy2D/Tool/EMouseDraggedListener.cpp new file mode 100644 index 00000000..ebea49e6 --- /dev/null +++ b/Easy2D/Tool/EMouseDraggedListener.cpp @@ -0,0 +1,35 @@ +#include "..\etools.h" + +e2d::EMouseDraggedListener::EMouseDraggedListener() + : EMouseListener() +{ +} + +e2d::EMouseDraggedListener::EMouseDraggedListener(EString name) + : EMouseListener(name) +{ +} + +e2d::EMouseDraggedListener::EMouseDraggedListener(const MOUSE_DRAG_LISTENER_CALLBACK & callback) + : EMouseListener() +{ +} + +e2d::EMouseDraggedListener::EMouseDraggedListener(EString name, const MOUSE_DRAG_LISTENER_CALLBACK & callback) + : EMouseListener(name) +{ +} + +void e2d::EMouseDraggedListener::runCallback() +{ + if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DOWN || + EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DBLCLK) + { + EMouseListener::runCallback(); + } +} + +void e2d::EMouseDraggedListener::setCallback(const MOUSE_DRAG_LISTENER_CALLBACK & callback) +{ + m_callback = callback; +} diff --git a/Easy2D/Tool/EMouseListener.cpp b/Easy2D/Tool/EMouseListener.cpp index 84e514a1..9001d9b9 100644 --- a/Easy2D/Tool/EMouseListener.cpp +++ b/Easy2D/Tool/EMouseListener.cpp @@ -1,69 +1,33 @@ #include "..\etools.h" e2d::EMouseListener::EMouseListener() - : m_bRunning(false) - , m_bWaiting(false) - , m_sName(L"") - , m_callback([] {}) - , m_pParentScene(nullptr) + : EListener() { } e2d::EMouseListener::EMouseListener(EString name) - : EMouseListener() + : EListener(name) { - m_sName = name; } -e2d::EMouseListener::EMouseListener(const MOUSE_CALLBACK & callback) - : EMouseListener() +e2d::EMouseListener::EMouseListener(const MOUSE_LISTENER_CALLBACK & callback) + : EListener() { m_callback = callback; } -e2d::EMouseListener::EMouseListener(EString name, const MOUSE_CALLBACK & callback) - : EMouseListener() +e2d::EMouseListener::EMouseListener(EString name, const MOUSE_LISTENER_CALLBACK & callback) + : EListener(name) { - m_sName = name; m_callback = callback; } -bool e2d::EMouseListener::isRunnint() const -{ - return m_bRunning && !m_bWaiting; -} - -void e2d::EMouseListener::start() -{ - m_bRunning = true; -} - -void e2d::EMouseListener::stop() -{ - m_bRunning = false; -} - -void e2d::EMouseListener::wait() -{ - m_bWaiting = true; -} - -void e2d::EMouseListener::notify() -{ - m_bWaiting = false; -} - void e2d::EMouseListener::runCallback() { m_callback(); } -e2d::EString e2d::EMouseListener::getName() const +void e2d::EMouseListener::setCallback(const MOUSE_LISTENER_CALLBACK & callback) { - return m_sName; + m_callback = callback; } - -e2d::EScene * e2d::EMouseListener::getParentScene() -{ - return m_pParentScene; -} \ No newline at end of file diff --git a/Easy2D/Tool/EMsgManager.cpp b/Easy2D/Tool/EMsgManager.cpp index 99f0cf95..3dc06cad 100644 --- a/Easy2D/Tool/EMsgManager.cpp +++ b/Easy2D/Tool/EMsgManager.cpp @@ -2,81 +2,110 @@ #include "..\Win\winbase.h" #include -static POINT p; -static e2d::EMouseMsg mouseMsg; +// Êó±êÏûÏ¢ +e2d::EMouseMsg mouseMsg; +// Êó±êÏûÏ¢¼àÌýÆ÷ std::vector m_vMouseListeners; +// °´¼üÏûÏ¢¼àÌýÆ÷ +//std::vector m_vKeyListeners; -void e2d::EMsgManager::setMouseMsg(UINT message) + +DWORD e2d::EMouseMsg::getX() { - mouseMsg.m_nMsg = message; + 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_LBUTTONUP: - mouseMsg.m_bLButtonDown = false; - break; - - case WM_LBUTTONDOWN: - mouseMsg.m_bLButtonDown = true; - break; - - case WM_LBUTTONDBLCLK: - mouseMsg.m_bLButtonDown = true; - break; - - case WM_MBUTTONUP: - mouseMsg.m_bMButtonDown = false; - break; - - case WM_MBUTTONDOWN: - mouseMsg.m_bMButtonDown = true; - break; - - case WM_MBUTTONDBLCLK: - mouseMsg.m_bMButtonDown = true; - break; - - case WM_RBUTTONUP: - mouseMsg.m_bRButtonDown = false; - break; - - case WM_RBUTTONDOWN: - mouseMsg.m_bRButtonDown = true; - break; - - case WM_RBUTTONDBLCLK: - mouseMsg.m_bRButtonDown = true; - break; - - case WM_MOUSEMOVE: - { - GetCursorPos(&p); - ScreenToClient(GetHWnd(), &p); - mouseMsg.m_Pos = p; - break; - } - - case WM_MOUSEWHEEL: + case WM_KEYDOWN: + case WM_KEYUP: + case WM_CHAR: break; } for (auto mlistener : m_vMouseListeners) { - //mlistener-> - } -} - -e2d::EMouseMsg::MESSAGE e2d::EMsgManager::getMouseMsg() -{ - return e2d::EMouseMsg::MESSAGE(mouseMsg.m_nMsg); + 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); } } diff --git a/Easy2D/ecommon.h b/Easy2D/ecommon.h index dbbbbb9f..690d4702 100644 --- a/Easy2D/ecommon.h +++ b/Easy2D/ecommon.h @@ -9,9 +9,6 @@ namespace e2d typedef std::wstring EString; -//typedef std::function KEY_CALLBACK; -typedef std::function MOUSE_CALLBACK; - typedef CSize ESize; typedef CPoint EPoint; @@ -26,6 +23,11 @@ typedef struct } ESize_F; +typedef std::function KEY_LISTENER_CALLBACK; +typedef std::function MOUSE_LISTENER_CALLBACK; +typedef std::function MOUSE_DRAG_LISTENER_CALLBACK; + + class EColor { public: diff --git a/Easy2D/enodes.h b/Easy2D/enodes.h index 859266a1..a19b6782 100644 --- a/Easy2D/enodes.h +++ b/Easy2D/enodes.h @@ -7,6 +7,8 @@ namespace e2d class ENode : public EObject { + friend EScene; + public: ENode(); @@ -52,7 +54,7 @@ public: virtual e2d::ENode* &getParent(); // »ñÈ¡½ÚµãËùÔÚ³¡¾° - e2d::EScene * &getParentScene(); + EScene * &getParentScene(); // ÉèÖýڵãÊÇ·ñÏÔʾ virtual void setVisiable( @@ -138,19 +140,18 @@ public: // ÉèÖø¸½Úµã virtual void setParent( - e2d::ENode* parent + ENode* parent ); // ÉèÖýڵãËùÔÚ³¡¾° void setParentScene( - e2d::EScene * scene + EScene * scene ); protected: - friend e2d::EScene; int m_nZOrder; bool m_bVisiable; - e2d::ERect m_Rect; + ERect m_Rect; EScene * m_pParentScene; ENode * m_pParent; diff --git a/Easy2D/etools.h b/Easy2D/etools.h index 73911f72..c9409f5f 100644 --- a/Easy2D/etools.h +++ b/Easy2D/etools.h @@ -27,6 +27,199 @@ private: 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: // Êó±êÏûÏ¢¼¯ºÏ @@ -44,73 +237,36 @@ public: MBUTTON_DBLCLK, // Êó±êÖмüË«»÷ WHEEL // »¬¶¯¹öÂÖ }; - -public: - EPoint m_Pos; - UINT m_nMsg = 0; - bool m_bLButtonDown = false; - bool m_bRButtonDown = false; - bool m_bMButtonDown = false; }; -class EMouseListener : - public EObject +class EKeyListener : + public EListener { - friend EMsgManager; - public: - EMouseListener(); + EKeyListener(); - EMouseListener( + EKeyListener( EString name - ); + ); - EMouseListener( - const MOUSE_CALLBACK &callback - ); + EKeyListener( + const KEY_LISTENER_CALLBACK &callback + ); - EMouseListener( + EKeyListener( EString name, - const MOUSE_CALLBACK &callback - ); - - // »ñÈ¡¼àÌýÆ÷״̬ - bool isRunnint() const; - - // Æô¶¯¼àÌý - void start(); - - // Í£Ö¹¼àÌý - void stop(); - - // ½øÈëµÈ´ý״̬ - void wait(); - - // »½ÐÑ - void notify(); + const KEY_LISTENER_CALLBACK &callback + ); // Ö´ÐмàÌýÆ÷»Øµ÷º¯Êý void runCallback(); - // »ñÈ¡¼àÌýÆ÷Ãû³Æ - EString getName() const; - - // »ñÈ¡¼àÌýÆ÷ËùÔÚ³¡¾° - EScene * getParentScene(); - - // ÉèÖüàÌýÆ÷Ãû³Æ - void setName(EString name); - // ÉèÖüàÌýÆ÷»Øµ÷º¯Êý - void setCallback(const MOUSE_CALLBACK &callback); + void setCallback(const KEY_LISTENER_CALLBACK &callback); protected: - EString m_sName; - bool m_bRunning; - bool m_bWaiting; - MOUSE_CALLBACK m_callback; - EScene * m_pParentScene; + KEY_LISTENER_CALLBACK m_callback; }; @@ -119,11 +275,17 @@ class EMsgManager friend EApp; public: - static void setMouseMsg( - UINT message + static void MouseProc( + UINT message, + WPARAM wParam, + LPARAM lParam ); - static e2d::EMouseMsg::MESSAGE getMouseMsg(); + static void KeyboardProc( + UINT message, + WPARAM wParam, + LPARAM lParam + ); static void addListener( EMouseListener * listener