Magic_Game/Easy2D/emsg.h

510 lines
8.9 KiB
C++
Raw Blame History

#pragma once
#include "ebase.h"
namespace e2d
{
class ENode;
class EMsgManager;
// 報炎<E5A0B1>
class EMouseMsg
{
friend EMsgManager;
public:
// 報炎<E5A0B1>連鹿栽
enum 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();
// 資函輝念報炎<E5A0B1>
static MOUSE_MSG getMsg();
protected:
UINT m_nMsg = 0;
WPARAM m_wParam = 0;
LPARAM m_lParam = 0;
};
// 梓囚<E6A293>
class EKeyMsg
{
friend EMsgManager;
public:
// 梓囚<E6A293>連窃侏鹿栽
enum 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 // 和囚囚峙
};
// 資函梓囚<E6A293>連窃侏
static KEYBOARD_MSG getMsg();
// 資函囚峙
static KEY getVal();
// 資函梓囚<E6A293>連議柴方
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 EListener :
public EObject
{
friend EMsgManager;
public:
EListener();
EListener(
EString name
);
// 資函酌油匂彜蓑
bool isRunning() const;
// 資函酌油匂航軟彜蓑
bool isWaiting() const;
// 尼強酌油
void start();
// 唯峭酌油
void stop();
// 序秘吉棋彜蓑
void wait();
// 蚕佰
void notify();
// 資函酌油匂兆各
EString getName() const;
// 資函酌油匂侭壓魁尚
EScene * getParentScene() const;
// 資函酌油匂侭壓准泣
ENode * getParentNode() const;
// 譜崔酌油匂兆各
void setName(
EString name
);
// 鰯協酌油匂欺魁尚
virtual void bindWith(
EScene * pParentScene
) = 0;
// 鰯協酌油匂欺准泣
virtual void bindWith(
ENode * pParentNode
) = 0;
protected:
EString m_sName;
bool m_bRunning;
bool m_bWaiting;
EScene * m_pParentScene;
ENode * m_pParentNode;
};
// 報炎<E5A0B1>連酌油匂
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
);
// 鰯協酌油匂欺魁尚
virtual void bindWith(
EScene * pParentScene
) override;
// 鰯協酌油匂欺准泣
virtual void bindWith(
ENode * pParentNode
) override;
protected:
MOUSE_LISTENER_CALLBACK m_callback;
};
// 報炎泣似<E6B3A3>連酌油匂
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;
};
// 報炎溶強<E6BAB6>連酌油匂
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;
};
// 梓囚<E6A293>連酌油匂
class EKeyboardListener :
public EListener
{
public:
EKeyboardListener();
EKeyboardListener(
EString name
);
EKeyboardListener(
const KEY_LISTENER_CALLBACK &callback
);
EKeyboardListener(
EString name,
const KEY_LISTENER_CALLBACK &callback
);
// 峇佩酌油匂指距痕方
virtual void runCallback();
// 譜崔酌油匂指距痕方
void setCallback(
const KEY_LISTENER_CALLBACK &callback
);
// 鰯協酌油匂欺魁尚
virtual void bindWith(
EScene * pParentScene
) override;
// 鰯協酌油匂欺准泣
virtual void bindWith(
ENode * pParentNode
) override;
protected:
KEY_LISTENER_CALLBACK m_callback;
};
// 梓囚梓和<E6A293>連酌油
class EKeyPressListener :
public EKeyboardListener
{
public:
EKeyPressListener();
EKeyPressListener(
EString name
);
EKeyPressListener(
const KEY_LISTENER_CALLBACK &callback
);
EKeyPressListener(
EString name,
const KEY_LISTENER_CALLBACK &callback
);
// 峇佩酌油匂指距痕方
virtual void runCallback() override;
};
// <20>連砿尖匂
class EMsgManager
{
friend EApp;
public:
// 鰯協報炎<E5A0B1>連酌油匂欺魁尚
static void bindListenerWith(
EMouseListener * listener,
EScene * pParentScene
);
// 鰯協報炎<E5A0B1>連酌油匂欺魁尚
static void bindListenerWith(
EKeyboardListener * listener,
EScene * pParentScene
);
// 鰯協梓囚<E6A293>連酌油匂欺准泣
static void bindListenerWith(
EMouseListener * listener,
ENode * pParentNode
);
// 鰯協梓囚<E6A293>連酌油匂欺准泣
static void bindListenerWith(
EKeyboardListener * listener,
ENode * pParentNode
);
// 尼強醤嗤<E986A4>揖兆各議酌油匂
static void startListener(
EString name
);
// 唯峭醤嗤<E986A4>揖兆各議酌油匂
static void stopListener(
EString name
);
// 評茅醤嗤<E986A4>揖兆各議酌油匂
static void delListener(
EString name
);
// 尼強侭嗤報炎<E5A0B1>連酌油匂
static void startAllMouseListener();
// 唯峭侭嗤報炎<E5A0B1>連酌油匂
static void stopAllMouseListener();
// 賠茅侭嗤報炎<E5A0B1>連酌油匂
static void clearAllMouseListeners();
// 尼強侭嗤梓囚<E6A293>連酌油匂
static void startAllKeyboardListener();
// 唯峭侭嗤梓囚<E6A293>連酌油匂
static void stopAllKeyboardListener();
// 賠茅侭嗤梓囚<E6A293>連酌油匂
static void clearAllKeyboardListeners();
// 尼強鰯協壓魁尚貧議侭嗤報炎<E5A0B1>連酌油匂
static void startAllMouseListenersBindWithScene(
EScene * pParentScene
);
// 嶷尼鰯協壓魁尚貧議侭嗤報炎<E5A0B1>連酌油匂
static void stopAllMouseListenersBindWithScene(
EScene * pParentScene
);
// 尼強鰯協壓魁尚貧議侭嗤梓囚<E6A293>連酌油匂
static void startAllKeyboardListenersBindWithScene(
EScene * pParentScene
);
// 嶷尼鰯協壓魁尚貧議侭嗤梓囚<E6A293>連酌油匂
static void stopAllKeyboardListenersBindWithScene(
EScene * pParentScene
);
// 航軟鰯協壓魁尚貧議侭嗤酌油匂
static void waitAllListenersBindWithScene(
EScene * pParentScene
);
// 嶷尼鰯協壓魁尚貧議侭嗤酌油匂
static void notifyAllListenersBindWithScene(
EScene * pParentScene
);
// 賠腎鰯協壓魁尚貧議侭嗤酌油匂
static void clearAllListenersBindWithScene(
EScene * pParentScene
);
// 航軟鰯協壓准泣貧議侭嗤酌油匂
static void waitAllListenersBindWithNode(
ENode * pParentNode
);
// 嶷尼鰯協壓准泣貧議侭嗤酌油匂
static void notifyAllListenersBindWithNode(
ENode * pParentNode
);
// 賠腎鰯協壓准泣貧議侭嗤酌油匂
static void clearAllListenersBindWithNode(
ENode * pParentNode
);
private:
static void MouseProc(
UINT message,
WPARAM wParam,
LPARAM lParam
);
static void KeyboardProc(
UINT message,
WPARAM wParam,
LPARAM lParam
);
};
}