| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | #include "..\easy2d.h"
 | 
					
						
							|  |  |  |  | #include "..\EasyX\easyx.h"
 | 
					
						
							|  |  |  |  | #include <conio.h>
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | static std::vector<KeyMsg*> s_vListeners; | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
 | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::A = 'A'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::B = 'B'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::C = 'C'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::D = 'D'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::E = 'E'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F = 'F'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::G = 'G'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::H = 'H'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::I = 'I'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::J = 'J'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::K = 'K'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::L = 'L'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::M = 'M'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::N = 'N'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::O = 'O'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::P = 'P'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::Q = 'Q'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::R = 'R'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::S = 'S'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::T = 'T'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::U = 'U'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::V = 'V'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::W = 'W'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::X = 'X'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::Y = 'Y'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::Z = 'Z'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUM_0 = '0'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUM_1 = '1'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUM_2 = '2'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUM_3 = '3'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUM_4 = '4'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUM_5 = '5'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUM_6 = '6'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUM_7 = '7'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUM_8 = '8'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUM_9 = '9'; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUMPAD_0 = VK_NUMPAD0; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUMPAD_1 = VK_NUMPAD1; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUMPAD_2 = VK_NUMPAD2; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUMPAD_3 = VK_NUMPAD3; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUMPAD_4 = VK_NUMPAD4; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUMPAD_5 = VK_NUMPAD5; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUMPAD_6 = VK_NUMPAD6; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUMPAD_7 = VK_NUMPAD7; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUMPAD_8 = VK_NUMPAD8; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::NUMPAD_9 = VK_NUMPAD9; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::Enter = VK_RETURN; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::Space = VK_SPACE; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::Ctrl = VK_CONTROL; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::LCtrl = VK_LCONTROL; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::RCtrl = VK_RCONTROL; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::Shift = VK_SHIFT; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::LShift = VK_LSHIFT; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::RShift = VK_RSHIFT; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::Up = VK_UP; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::Down = VK_DOWN; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::Left = VK_LEFT; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::Right = VK_RIGHT; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::Esc = VK_ESCAPE; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F1 = VK_F1; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F2 = VK_F2; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F3 = VK_F3; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F4 = VK_F4; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F5 = VK_F5; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F6 = VK_F6; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F7 = VK_F7; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F8 = VK_F8; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F9 = VK_F9; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F10 = VK_F10; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F11 = VK_F11; | 
					
						
							|  |  |  |  | const VK_KEY KeyMsg::F12 = VK_F12; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | static VK_KEY convert(int ascii); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-06 02:32:33 +08:00
										 |  |  |  | KeyMsg::KeyMsg(TString name, const KEY_CALLBACK & callback) : | 
					
						
							|  |  |  |  | 	m_sName(name), | 
					
						
							|  |  |  |  | 	m_callback(callback), | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 	m_pParentScene(nullptr), | 
					
						
							| 
									
										
										
										
											2017-10-08 12:30:45 +08:00
										 |  |  |  | 	m_bRunning(true), | 
					
						
							|  |  |  |  | 	m_bWaiting(false) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | KeyMsg::~KeyMsg() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void KeyMsg::onKbHit(VK_KEY key) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_callback(key); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | void KeyMsg::start() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_bRunning = true; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void KeyMsg::stop() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_bRunning = false; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-08 12:30:45 +08:00
										 |  |  |  | void KeyMsg::wait() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_bWaiting = true; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void KeyMsg::notify() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_bWaiting = false; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | void KeyMsg::__exec() | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | 	if (_kbhit())						// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ް<EFBFBD><DEB0><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | 		VK_KEY key = convert(_getch());	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 		for (auto l : s_vListeners)		// <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2017-10-08 12:30:45 +08:00
										 |  |  |  | 			if (!l->m_bWaiting && l->m_bRunning) | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 			{ | 
					
						
							|  |  |  |  | 				l->onKbHit(key);		// ִ<>а<EFBFBD><D0B0><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-05 00:53:03 +08:00
										 |  |  |  | void KeyMsg::addListener(TString name, const KEY_CALLBACK & callback) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>µļ<C2B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 	auto listener = new KeyMsg(name, callback); | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-10-08 12:30:45 +08:00
										 |  |  |  | 	listener->m_pParentScene = App::getLoadingScene(); | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>µİ<C2B5><C4B0><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 	s_vListeners.push_back(listener); | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | void KeyMsg::startListener(TString name) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	for (auto l : s_vListeners) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-10-08 12:30:45 +08:00
										 |  |  |  | 		if (l->m_sName == name) | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			l->start(); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void KeyMsg::stopListener(TString name) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	for (auto l : s_vListeners) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-10-08 12:30:45 +08:00
										 |  |  |  | 		if (l->m_sName == name) | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			l->stop(); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void KeyMsg::delListener(TString name) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	std::vector<KeyMsg*>::iterator iter; | 
					
						
							|  |  |  |  | 	// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 	for (iter = s_vListeners.begin(); iter != s_vListeners.end();) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>Ƶļ<C6B5><C4BC><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-10-08 12:30:45 +08:00
										 |  |  |  | 		if ((*iter)->m_sName == name) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			// ɾ<><C9BE><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>
 | 
					
						
							|  |  |  |  | 			delete (*iter); | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 			iter = s_vListeners.erase(iter); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			iter++; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-08 12:30:45 +08:00
										 |  |  |  | void KeyMsg::notifyAllSceneListeners(Scene * scene) | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	for (auto l : s_vListeners) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		if (l->m_pParentScene == scene) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2017-10-08 12:30:45 +08:00
										 |  |  |  | 			l->notify(); | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-08 12:30:45 +08:00
										 |  |  |  | void KeyMsg::waitAllSceneListeners(Scene * scene) | 
					
						
							| 
									
										
										
										
											2017-10-06 02:32:33 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 	for (auto l : s_vListeners) | 
					
						
							| 
									
										
										
										
											2017-10-06 02:32:33 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 		if (l->m_pParentScene == scene) | 
					
						
							| 
									
										
										
										
											2017-10-06 02:32:33 +08:00
										 |  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2017-10-08 12:30:45 +08:00
										 |  |  |  | 			l->wait(); | 
					
						
							| 
									
										
										
										
											2017-10-06 02:32:33 +08:00
										 |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void KeyMsg::clearAllSceneListeners(Scene * scene) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	std::vector<KeyMsg*>::iterator iter; | 
					
						
							|  |  |  |  | 	// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-10-08 23:07:34 +08:00
										 |  |  |  | 	for (iter = s_vListeners.begin(); iter != s_vListeners.end();) | 
					
						
							| 
									
										
										
										
											2017-10-06 02:32:33 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>Ƶļ<C6B5><C4BC><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		if ((*iter)->m_pParentScene == scene) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			// ɾ<><C9BE><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>
 | 
					
						
							|  |  |  |  | 			delete (*iter); | 
					
						
							| 
									
										
										
										
											2017-10-08 23:07:34 +08:00
										 |  |  |  | 			iter = s_vListeners.erase(iter); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			iter++; | 
					
						
							| 
									
										
										
										
											2017-10-06 02:32:33 +08:00
										 |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-20 14:52:50 +08:00
										 |  |  |  | void KeyMsg::clearAllListeners() | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 	for (auto l : s_vListeners) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 		delete l; | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-10-06 16:40:10 +08:00
										 |  |  |  | 	s_vListeners.clear(); | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | bool KeyMsg::isKeyDown(VK_KEY key) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	// <20><>ȡ key <20>İ<EFBFBD><C4B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	return (GetAsyncKeyState(key) & 0x8000); | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | VK_KEY convert(int ascii) | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-20 14:52:50 +08:00
										 |  |  |  | 	// <20><>ĸ<EFBFBD><C4B8>
 | 
					
						
							|  |  |  |  | 	if (ascii >= 'a' && ascii <= 'z') | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return VK_KEY(ascii - ('a' - 'A')); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else if (ascii >= 'A' && ascii <= 'Z') | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return VK_KEY(ascii); | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-09-20 14:52:50 +08:00
										 |  |  |  | 	// <20><><EFBFBD>ּ<EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | 	else if (ascii >= '0' && ascii <= '9') | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return VK_KEY(ascii); | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-09-20 14:52:50 +08:00
										 |  |  |  | 	// <20>س<EFBFBD><D8B3><EFBFBD><EFBFBD>ո<EFBFBD><D5B8><EFBFBD>Esc<73><63>
 | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | 	else if (ascii == 0x0D || ascii == 0x20 || ascii == 0x1B) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return VK_KEY(ascii); | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-09-20 14:52:50 +08:00
										 |  |  |  | 	// <20><><EFBFBD>ܼ<EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | 	else if (ascii == 0 || ascii == 0xE0) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		switch (_getch()) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 		case 72: | 
					
						
							|  |  |  |  | 			return KeyMsg::Up; | 
					
						
							|  |  |  |  | 		case 75: | 
					
						
							|  |  |  |  | 			return KeyMsg::Left; | 
					
						
							|  |  |  |  | 		case 77: | 
					
						
							|  |  |  |  | 			return KeyMsg::Right; | 
					
						
							|  |  |  |  | 		case 80: | 
					
						
							|  |  |  |  | 			return KeyMsg::Down; | 
					
						
							|  |  |  |  | 		case 59: | 
					
						
							|  |  |  |  | 			return KeyMsg::F1; | 
					
						
							|  |  |  |  | 		case 60: | 
					
						
							|  |  |  |  | 			return KeyMsg::F2; | 
					
						
							|  |  |  |  | 		case 61: | 
					
						
							|  |  |  |  | 			return KeyMsg::F3; | 
					
						
							|  |  |  |  | 		case 62: | 
					
						
							|  |  |  |  | 			return KeyMsg::F4; | 
					
						
							|  |  |  |  | 		case 63: | 
					
						
							|  |  |  |  | 			return KeyMsg::F5; | 
					
						
							|  |  |  |  | 		case 64: | 
					
						
							|  |  |  |  | 			return KeyMsg::F6; | 
					
						
							|  |  |  |  | 		case 65: | 
					
						
							|  |  |  |  | 			return KeyMsg::F7; | 
					
						
							|  |  |  |  | 		case 66: | 
					
						
							|  |  |  |  | 			return KeyMsg::F8; | 
					
						
							|  |  |  |  | 		case 67: | 
					
						
							|  |  |  |  | 			return KeyMsg::F9; | 
					
						
							|  |  |  |  | 		case 133: | 
					
						
							|  |  |  |  | 			return KeyMsg::F10; | 
					
						
							|  |  |  |  | 		case 134: | 
					
						
							|  |  |  |  | 			return KeyMsg::F11; | 
					
						
							|  |  |  |  | 		default: | 
					
						
							|  |  |  |  | 			return 0; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	return 0; | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | } |