添加按键消息监听
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