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