Magic_Game/Easy2D/Msg/MouseMsg.cpp

196 lines
3.3 KiB
C++
Raw Normal View History

2017-09-10 23:56:52 +08:00
#include "..\easy2d.h"
#include "..\EasyX\easyx.h"
2017-09-16 23:09:11 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static std::vector<MouseMsg*> s_vMouseMsg;
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
static MouseMsg s_mouseMsg = MouseMsg();
// <20><> EasyX <20><> MOUSEMSG ת<><D7AA>Ϊ MouseMsg
static void ConvertMsg(MOUSEMSG msg);
2017-09-16 23:09:11 +08:00
void MouseMsg::__exec()
2017-09-10 23:56:52 +08:00
{
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
while (MouseHit())
{
// ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
ConvertMsg(GetMouseMsg());
// ִ<>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-09-12 12:53:34 +08:00
App::get()->getCurrentScene()->_exec();
2017-09-16 23:09:11 +08:00
// ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
for (auto m : s_vMouseMsg) // ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
m->onMouseMsg(s_mouseMsg); // ִ<>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
}
}
}
MouseMsg::MouseMsg()
{
}
MouseMsg::MouseMsg(tstring name, const MOUSE_CALLBACK & callback)
{
m_sName = name;
m_callback = callback;
}
MouseMsg::~MouseMsg()
{
}
void MouseMsg::onMouseMsg(MouseMsg mouse)
{
m_callback(mouse);
}
void MouseMsg::addListener(tstring name, const MOUSE_CALLBACK & callback)
{
// <20><><EFBFBD><EFBFBD><EFBFBD>µļ<C2B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
auto mouse = new MouseMsg(name, callback);
// <20><><EFBFBD><EFBFBD><EFBFBD>µİ<C2B5><C4B0><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
s_vMouseMsg.push_back(mouse);
}
2017-09-18 23:59:08 +08:00
bool MouseMsg::deleteListener(tstring name)
2017-09-16 23:09:11 +08:00
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::vector<MouseMsg*>::iterator iter;
// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
for (iter = s_vMouseMsg.begin(); iter != s_vMouseMsg.end(); iter++)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>Ƶļ<C6B5><C4BC><EFBFBD><EFBFBD><EFBFBD>
if ((*iter)->m_sName == name)
{
// ɾ<><C9BE><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>
delete (*iter);
s_vMouseMsg.erase(iter);
return true;
}
}
// <20><>δ<EFBFBD>ҵ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>Ƶļ<C6B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> false
return false;
}
void MouseMsg::clearAllListener()
{
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
for (auto m : s_vMouseMsg)
{
delete m;
2017-09-10 23:56:52 +08:00
}
2017-09-16 23:09:11 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s_vMouseMsg.clear();
2017-09-10 23:56:52 +08:00
}
MouseMsg MouseMsg::getMsg()
{
return s_mouseMsg; // <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isLButtonDown()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.mkLButton;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isRButtonDown()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.mkRButton;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isMButtonDown()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.mkMButton;
}
int MouseMsg::getMouseX()
{
return s_mouseMsg.x;
}
int MouseMsg::getMouseY()
{
return s_mouseMsg.y;
}
int MouseMsg::getMouseWheel()
{
return s_mouseMsg.wheel;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isOnMouseMoved()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.uMsg == WM_MOUSEMOVE;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isOnLButtonDBClicked()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.uMsg == WM_LBUTTONDBLCLK;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isOnLButtonDown()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.uMsg == WM_LBUTTONDOWN;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isOnLButtonUp()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.uMsg == WM_LBUTTONUP;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isOnRButtonDBClicked()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.uMsg == WM_RBUTTONDBLCLK;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isOnRButtonDown()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.uMsg == WM_RBUTTONDOWN;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isOnRButtonUp()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.uMsg == WM_LBUTTONUP;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isOnMButtonDBClicked()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.uMsg == WM_MBUTTONDBLCLK;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isOnMButtonDown()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.uMsg == WM_MBUTTONDOWN;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isOnMButtonUp()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.uMsg == WM_MBUTTONUP;
}
2017-09-12 12:53:34 +08:00
bool MouseMsg::isOnWheel()
2017-09-10 23:56:52 +08:00
{
return s_mouseMsg.uMsg == WM_MOUSEWHEEL;
}
void MouseMsg::resetMouseMsg()
{
s_mouseMsg.uMsg = 0;
}
void ConvertMsg(MOUSEMSG msg)
{
// <20><> MOUSEMSG ת<><D7AA>Ϊ MouseMsg
/// <20><>Ȼ MOUSEMSG <20><> MouseMsg <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
2017-09-12 12:53:34 +08:00
/// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʵ<EFBFBD><CAB5> Easy2D <20><> EasyX <20>ķ<EFBFBD><C4B7><EFBFBD><EBA3AC><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> MouseMsg
2017-09-10 23:56:52 +08:00
s_mouseMsg.uMsg = msg.uMsg;
s_mouseMsg.mkLButton = msg.mkLButton;
s_mouseMsg.mkMButton = msg.mkMButton;
s_mouseMsg.mkRButton = msg.mkRButton;
s_mouseMsg.wheel = msg.wheel;
s_mouseMsg.x = msg.x;
s_mouseMsg.y = msg.y;
}