Magic_Game/Easy2D/easy2d.h

952 lines
20 KiB
C
Raw Normal View History

2017-09-10 23:56:52 +08:00
/******************************************************
* Easy2D Game Engine (v1.0.0)
* http://www.easy2d.cn
*
* Depends on EasyX (Ver:20170827(beta))
******************************************************/
#pragma once
#ifndef __cplusplus
#error Easy2D is only for C++
#endif
2017-09-12 12:53:34 +08:00
#if _MSC_VER < 1600
#error Do Visual Studio 2010/2013/2015/2017 specific stuff
#endif
2017-09-10 23:56:52 +08:00
// String macros
#ifdef UNICODE
#define tstring std::wstring
#else
#define tstring std::string
#endif
// Safe macros
#define SAFE_DELETE(p) { delete (p); (p) = nullptr; }
#define SAFE_DELETE_ARRAY(p) { if (p) { delete[] (p); (p) = nullptr; } }
#define SAFE_RELEASE(p) { if (p) p->release(); }
#include <windows.h>
#include <tchar.h>
#include <atlimage.h>
#include <vector>
#include <stack>
#include <functional>
#if defined(UNICODE) && (_DEBUG)
#pragma comment(lib,"Easy2Ddw.lib")
#elif !defined(UNICODE) && (_DEBUG)
#pragma comment(lib,"Easy2Dd.lib")
#elif defined(UNICODE)
#pragma comment(lib,"Easy2Dw.lib")
#elif !defined(UNICODE)
#pragma comment(lib,"Easy2D.lib")
#endif
// Class Declare
namespace easy2d {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-09-12 12:53:34 +08:00
class App;
2017-09-10 23:56:52 +08:00
class Scene;
class KeyMsg;
class MouseMsg;
class FreePool;
// <20><>ʽ<EFBFBD><CABD>
class Color;
class FontStyle;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class Timer;
class MusicUtils;
class FileUtils;
// <20><><EFBFBD><EFBFBD>
class Object;
class Node;
class BatchNode;
class MouseNode;
class Image;
class Text;
class Shape;
class Rect;
class Circle;
class Button;
class TextButton;
class ImageButton;
typedef unsigned int VK_KEY;
typedef std::function<void()> CLICK_CALLBACK;
typedef std::function<void()> TIMER_CALLBACK;
typedef std::function<void(VK_KEY)> KEY_CALLBACK;
2017-09-12 12:53:34 +08:00
class App
2017-09-10 23:56:52 +08:00
{
protected:
tstring m_sTitle;
Scene* m_currentScene;
Scene* m_nextScene;
std::stack<Scene*> m_sceneStack;
LARGE_INTEGER m_nAnimationInterval;
int m_nWidth;
int m_nHeight;
int m_nWindowMode;
bool m_bRunning;
bool m_bPause;
bool m_bSaveScene;
protected:
void _initGraph();
void _mainLoop();
void _enterNextScene();
public:
2017-09-12 12:53:34 +08:00
App();
~App();
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD>ڿ<EFBFBD>ѡģʽ
enum { SHOW_CONSOLE = 1, NO_CLOSE = 2, NO_MINI_MIZE = 4 };
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
2017-09-12 12:53:34 +08:00
static App * get();
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
static void setOrigin(int originX, int originY);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int getOriginX();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int getOriginY();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int run();
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
void pause();
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
void quit();
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
void end();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
void createWindow(int width, int height, int mode = 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
void createWindow(tstring title, int width, int height, int mode = 0);
2017-09-12 12:53:34 +08:00
// <20>رմ<D8B1><D5B4><EFBFBD>
void close();
2017-09-10 23:56:52 +08:00
// <20>޸Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
void setWindowSize(int width, int height);
// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
void setWindowText(tstring title);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
int getWidth() const;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڸ߶<DAB8>
int getHeight() const;
// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
void enterScene(Scene *scene, bool save = true);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
void backScene();
2017-09-12 12:53:34 +08:00
// <20>޸Ĵ<DEB8><C4B4>ڱ<EFBFBD><DAB1><EFBFBD>ɫ
void setBkColor(COLORREF color);
2017-09-10 23:56:52 +08:00
// <20><>Ϸ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool isRunning();
// <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>
void setFPS(DWORD fps);
// <20><><EFBFBD>û<EFBFBD>ͼ<EFBFBD><CDBC>ʽΪĬ<CEAA><C4AC>ֵ
void reset();
// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>Դ
void free();
// <20><><EFBFBD>ٸö<D9B8><C3B6><EFBFBD>
void destory();
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
Scene * getCurrentScene();
// <20><>ȡ Easy2D <20><EFBFBD><E6B1BE>
LPCTSTR getVersion();
};
class FreePool
{
2017-09-12 12:53:34 +08:00
friend class App;
2017-09-10 23:56:52 +08:00
private:
static void __flush();
public:
// <20><>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷų<CDB7>
static void add(Object * nptr);
};
class Scene
{
2017-09-12 12:53:34 +08:00
friend class App;
2017-09-10 23:56:52 +08:00
friend class MouseMsg;
protected:
std::vector<Node*> m_vChildren;
protected:
void _exec();
void _onDraw();
public:
Scene();
~Scene();
// <20><><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void add(Node * child, int zOrder = 0);
// ɾ<><C9BE><EFBFBD>ӳ<EFBFBD>Ա
bool del(Node * child);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ա
void clearAllChildren();
};
class MouseMsg
{
2017-09-12 12:53:34 +08:00
friend class App;
2017-09-10 23:56:52 +08:00
private:
static void __exec();
public:
UINT uMsg; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
bool mkLButton; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
bool mkMButton; // <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
bool mkRButton; // <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD><D2BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
short x; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD> x <20><><EFBFBD><EFBFBD>
short y; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD> y <20><><EFBFBD><EFBFBD>
short wheel; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>ֵ (120 <20>ı<EFBFBD><C4B1><EFBFBD>)
public:
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
static MouseMsg getMsg();
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
2017-09-12 12:53:34 +08:00
static bool isLButtonDown();
2017-09-10 23:56:52 +08:00
// <20>Ҽ<EFBFBD><D2BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
2017-09-12 12:53:34 +08:00
static bool isRButtonDown();
2017-09-10 23:56:52 +08:00
// <20>м<EFBFBD><D0BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
2017-09-12 12:53:34 +08:00
static bool isMButtonDown();
2017-09-10 23:56:52 +08:00
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>
static int getMouseX();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD>
static int getMouseY();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
static int getMouseWheel();
// <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>Ϣ
2017-09-12 12:53:34 +08:00
static bool isOnMouseMoved();
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>Ϣ
2017-09-12 12:53:34 +08:00
static bool isOnLButtonDBClicked();
2017-09-10 23:56:52 +08:00
// <20>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
2017-09-12 12:53:34 +08:00
static bool isOnLButtonDown();
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
2017-09-12 12:53:34 +08:00
static bool isOnLButtonUp();
2017-09-10 23:56:52 +08:00
// <20>Ҽ<EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>Ϣ
2017-09-12 12:53:34 +08:00
static bool isOnRButtonDBClicked();
2017-09-10 23:56:52 +08:00
// <20>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
2017-09-12 12:53:34 +08:00
static bool isOnRButtonDown();
2017-09-10 23:56:52 +08:00
// <20>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
2017-09-12 12:53:34 +08:00
static bool isOnRButtonUp();
2017-09-10 23:56:52 +08:00
// <20>м<EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>Ϣ
2017-09-12 12:53:34 +08:00
static bool isOnMButtonDBClicked();
2017-09-10 23:56:52 +08:00
// <20>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
2017-09-12 12:53:34 +08:00
static bool isOnMButtonDown();
2017-09-10 23:56:52 +08:00
// <20>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
2017-09-12 12:53:34 +08:00
static bool isOnMButtonUp();
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>Ϣ
2017-09-12 12:53:34 +08:00
static bool isOnWheel();
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
static void resetMouseMsg();
};
class KeyMsg
{
2017-09-12 12:53:34 +08:00
friend class App;
2017-09-10 23:56:52 +08:00
public:
// <20><>ĸ<EFBFBD><C4B8>ֵ
static const VK_KEY 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;
// <20><><EFBFBD>ּ<EFBFBD>ֵ
static const VK_KEY NUM_1, NUM_2, NUM_3, NUM_4, NUM_5, NUM_6, NUM_7, NUM_8, NUM_9, NUM_0;
// С<><D0A1><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>ֵ
static const VK_KEY NUMPAD_1, NUMPAD_2, NUMPAD_3, NUMPAD_4, NUMPAD_5, NUMPAD_6, NUMPAD_7, NUMPAD_8, NUMPAD_9, NUMPAD_0, Decimal;
// <20><><EFBFBD>Ƽ<EFBFBD>ֵ
static const VK_KEY Enter, Space, Up, Down, Left, Right, Esc, Shift, LShift, RShift, Ctrl, LCtrl, RCtrl;
// F <20><>ֵ
static const VK_KEY F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12;
private:
static void __exec();
protected:
tstring m_sName;
KEY_CALLBACK m_callback;
public:
KeyMsg(tstring name, const KEY_CALLBACK& callback);
~KeyMsg();
// ִ<>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
void onKbHit(VK_KEY key);
// <20><><EFBFBD>Ӽ<EFBFBD><D3BC>̼<EFBFBD><CCBC><EFBFBD>
static void addListener(tstring name, const KEY_CALLBACK& callback);
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD><CCBC><EFBFBD>
static bool delListener(tstring name);
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC>̼<EFBFBD><CCBC><EFBFBD>
static void clearAllListener();
// <20>жϼ<D0B6><CFBC>Ƿ񱻰<C7B7><F1B1BBB0>£<EFBFBD><C2A3><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>true
static bool isKeyDown(VK_KEY key);
};
class FileUtils
{
public:
// <20>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>Сд<D0A1><D0B4>
static tstring getFileExtension(const tstring& filePath);
/**
* <EFBFBD>򿪱<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD>򣬵õ<EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>
*/
static bool getSaveFilePath(tstring& path, LPCTSTR title = _T("<EFBFBD><EFBFBD><EFBFBD>"), LPCTSTR defExt = NULL);
};
class MusicUtils
{
public:
// <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void playBackgroundMusic(tstring pszFilePath, bool bLoop = false);
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void stopBackgroundMusic(bool bReleaseData = false);
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void pauseBackgroundMusic();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void resumeBackgroundMusic();
// <20><>ͷ<EFBFBD><CDB7><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void rewindBackgroundMusic();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>
static bool isBackgroundMusicPlaying();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
static unsigned int playMusic(tstring pszFilePath, bool loop = false);
// ֹͣ<CDA3><D6B9>Ч
static void stopMusic(unsigned int nSoundId);
// Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
static void preloadMusic(tstring pszFilePath);
// <20><>ͣ<EFBFBD><CDA3>Ч
static void pauseMusic(unsigned int nSoundId);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
static void resumeMusic(unsigned int nSoundId);
// ж<><D0B6><EFBFBD><EFBFBD>Ч
static void unloadMusic(LPCTSTR pszFilePath);
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void pauseAllMusics();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void resumeAllMusics();
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void stopAllMusics();
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
static void end();
};
class Timer
{
2017-09-12 12:53:34 +08:00
friend class App;
2017-09-10 23:56:52 +08:00
protected:
bool m_bRunning;
tstring m_sName;
TIMER_CALLBACK m_callback;
LARGE_INTEGER m_nLast;
LARGE_INTEGER m_nAnimationInterval;
UINT m_nMilliSeconds;
private:
static void __exec();
public:
Timer(tstring name, UINT ms, const TIMER_CALLBACK & callback);
~Timer();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
void start();
// ֹͣ<CDA3><D6B9>ʱ<EFBFBD><CAB1>
void stop();
// <20><>ʱ<EFBFBD><CAB1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool isRunning();
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>ʱ<EFBFBD><CAB1>
void setInterval(UINT ms);
// <20><><EFBFBD>ûص<C3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
void setCallback(const TIMER_CALLBACK& callback);
// <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setName(tstring name);
// <20><>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
UINT getInterval() const;
// <20><>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tstring getName() const;
// <20><><EFBFBD>Ӷ<EFBFBD>ʱ<EFBFBD><CAB1>
static void addTimer(Timer * timer);
// <20><><EFBFBD>Ӷ<EFBFBD>ʱ<EFBFBD><CAB1>
static void addTimer(tstring name, UINT ms, const TIMER_CALLBACK & callback);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1>
static Timer * getTimer(tstring name);
// <20><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>ʱ<EFBFBD><CAB1>
static bool startTimer(tstring name);
// ֹͣ<CDA3>ض<EFBFBD><D8B6><EFBFBD>ʱ<EFBFBD><CAB1>
static bool stopTimer(tstring name);
// ɾ<><C9BE><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>ʱ<EFBFBD><CAB1>
static bool deleteTimer(tstring name);
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>
static void clearAllTimers();
};
class Color
{
public:
static const COLORREF black; // <20><>ɫ
static const COLORREF blue; // <20><>ɫ
static const COLORREF green; // <20><>ɫ
static const COLORREF cyan; // <20><>ɫ
static const COLORREF red; // <20><>ɫ
static const COLORREF magenta; // <20><>ɫ
static const COLORREF brown; // <20><>ɫ
static const COLORREF lightgray; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF darkgray; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF lightblue; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF lightgreen; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF lightcyan; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF lightred; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF lightmagenta; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF yellow; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF white; // <20><>ɫ
// ͨ<><CDA8><EFBFBD><EFBFBD>̡<EFBFBD><CCA1><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>ϳ<EFBFBD><CFB3><EFBFBD>ɫ
static COLORREF getFromRGB(BYTE r, BYTE g, BYTE b);
// ͨ<><CDA8>ɫ<EFBFBD><EFBFBD><E0A1A2><EFBFBD>Ͷȡ<CDB6><C8A1><EFBFBD><EFBFBD>Ⱥϳ<C8BA><CFB3><EFBFBD>ɫ
static COLORREF getFromHSL(float H, float S, float L);
// ͨ<><CDA8>ɫ<EFBFBD><EFBFBD><E0A1A2><EFBFBD>Ͷȡ<CDB6><C8A1><EFBFBD><EFBFBD>Ⱥϳ<C8BA><CFB3><EFBFBD>ɫ
static COLORREF getFromHSV(float H, float S, float V);
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD>еĺ<D0B5>ɫֵ
static BYTE getRValue(COLORREF color);
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD>е<EFBFBD><D0B5><EFBFBD>ɫֵ
static BYTE getGValue(COLORREF color);
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD>е<EFBFBD><D0B5><EFBFBD>ɫֵ
static BYTE getBValue(COLORREF color);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>Ӧ<EFBFBD>ĻҶ<C4BB>ֵ<EFBFBD><D6B5>ɫ
static COLORREF getGray(COLORREF color);
};
class Object
{
friend class FreePool;
protected:
int m_nRef;
public:
Object();
virtual ~Object();
void retain();
void release();
};
class FontStyle :
public virtual Object
{
friend class Text;
protected:
LOGFONT m_font;
public:
FontStyle();
/**
* ʹ<EFBFBD><EFBFBD> [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD><EFBFBD>ֺš<EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>»<EFBFBD><EFBFBD>ߡ<EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD>ߡ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>Ƕȡ<EFBFBD>
* ÿ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>Ƕȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>] <EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
*/
FontStyle(LPCTSTR fontfamily, LONG height = 18, LONG weight = 0, LONG width = 0,
bool italic = 0, bool underline = 0, bool strikeout = 0, LONG escapement = 0,
LONG orientation = 0, bool quality = true);
virtual ~FontStyle();
// <20><>ȡĬ<C8A1><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static FontStyle * getDefault();
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>߶<EFBFBD>
void setHeight(LONG value);
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
void setWidth(LONG value);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setFontFamily(LPCTSTR value);
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʻ<EFBFBD><CABB><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD>Χ0~1000<30><30>Ĭ<EFBFBD><C4AC>Ϊ0
void setWeight(LONG value);
// <20><><EFBFBD><EFBFBD>б<EFBFBD><D0B1>
void setItalic(bool value);
// <20><><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB><EFBFBD>
void setUnderline(bool value);
// <20><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>
void setStrikeOut(bool value);
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>Ƕȣ<C7B6><C8A3><EFBFBD>λ0.1<EFBFBD>ȣ<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ0
void setEscapement(LONG value);
// <20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>Ƕȣ<C7B6><C8A3><EFBFBD>λ0.1<EFBFBD>ȣ<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ0
void setOrientation(LONG value);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5BFB9><EFBFBD>ݣ<EFBFBD>Ĭ<EFBFBD><C4AC>Ϊtrue
void setQuality(bool value);
};
class FontWeight
{
public:
static const LONG dontcare; // <20><>ϸֵ 0
static const LONG thin; // <20><>ϸֵ 100
static const LONG extraLight; // <20><>ϸֵ 200
static const LONG light; // <20><>ϸֵ 300
static const LONG normal; // <20><>ϸֵ 400
static const LONG regular; // <20><>ϸֵ 400
static const LONG medium; // <20><>ϸֵ 500
static const LONG demiBlod; // <20><>ϸֵ 600
static const LONG blod; // <20><>ϸֵ 700
static const LONG extraBold; // <20><>ϸֵ 800
static const LONG black; // <20><>ϸֵ 900
static const LONG heavy; // <20><>ϸֵ 900
};
class Node :
public virtual Object
{
friend class Scene;
friend class Layer;
friend class BatchNode;
protected:
int m_nZOrder;
bool m_bDisplay;
Scene* m_pScene;
int m_nX;
int m_nY;
protected:
virtual bool _exec(bool active);
virtual void _onDraw() = 0;
void setParentScene(Scene * scene);
public:
Node();
Node(int x, int y);
virtual ~Node();
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const int getX() const;
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const int getY() const;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setX(int x);
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setY(int y);
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setPos(int x, int y);
// <20>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
virtual void move(int x, int y);
// <20>ڵ<EFBFBD><DAB5>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ
bool display() const;
// <20><><EFBFBD>ýڵ<C3BD><DAB5>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ
void setDisplay(bool value);
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>ͼ˳<CDBC><CBB3>
virtual int getZOrder() const;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD>ͼ˳<CDBC><CBB3><EFBFBD><EFBFBD><30><CEAA><EFBFBD>Ȼ<EFBFBD><C8BB>ƣ<EFBFBD><C6A3><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ײ㣩
virtual void setZOrder(int z);
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD>
Scene * getParentScene();
};
class BatchNode :
public virtual Node
{
protected:
std::vector<Node*> m_vChildren;
protected:
virtual bool _exec(bool active) override;
virtual void _onDraw() override;
public:
BatchNode();
virtual ~BatchNode();
// <20><><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
void add(Node *child, int z_Order = 0);
// ɾ<><C9BE><EFBFBD>ӽڵ<D3BD>
bool del(Node * child);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
void clearAllChildren();
};
class Image :
public virtual Node
{
friend class ImageButton;
protected:
CImage m_Image;
CRect m_rDest;
CRect m_rSrc;
float m_fScaleX;
float m_fScaleY;
protected:
virtual void _onDraw() override;
public:
Image();
/**
* <EFBFBD><EFBFBD>ͼƬ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ȡͼ<EFBFBD><EFBFBD>(png/bmp/jpg/gif/emf/wmf/ico)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ͸߶<EFBFBD>
*/
Image(LPCTSTR ImageFile, int x = 0, int y = 0, int width = 0, int height = 0);
virtual ~Image();
// <20><>ȡͼ<C8A1><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int getWidth() const;
// <20><>ȡͼ<C8A1><CDBC><EFBFBD>߶<EFBFBD>
int getHeight() const;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float getScaleX() const;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float getScaleY() const;
/**
* <EFBFBD><EFBFBD>ͼƬ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ȡͼ<EFBFBD><EFBFBD>(png/bmp/jpg/gif/emf/wmf/ico)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ͸߶<EFBFBD>
*/
void setImageFile(LPCTSTR ImageFile, int x = 0, int y = 0, int width = 0, int height = 0);
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ȡͼ<EFBFBD>񣬲<EFBFBD>֧<EFBFBD><EFBFBD> png (bmp/jpg/gif/emf/wmf/ico)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>ͼƬ<EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ͸߶<EFBFBD>
*/
void setImageRes(LPCTSTR pResName, int x = 0, int y = 0, int width = 0, int height = 0);
// <20>ü<EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD> stretch <20><><EFBFBD>
void crop(int x = 0, int y = 0, int width = 0, int height = 0);
// <20><>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD>
void stretch(int width = 0, int height = 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC>0 ~ 1.0f<EFBFBD><EFBFBD>
void scale(float scaleX, float scaleY);
// <20><><EFBFBD><EFBFBD>ͼƬλ<C6AC><CEBB>
void setPos(int x, int y) override;
// <20>ƶ<EFBFBD>ͼƬ
void move(int x, int y) override;
// <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setX(int x) override;
// <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setY(int y) override;
// <20><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ɫ
void setTransparentColor(COLORREF value);
// <20><><EFBFBD><EFBFBD><E6B5BD>ͼ
static void screenshot();
};
class Text :
public virtual Node
{
friend class TextButton;
protected:
tstring m_sText;
COLORREF m_color;
FontStyle * m_pFontStyle;
protected:
virtual void _onDraw() override;
public:
Text();
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Text(tstring text, COLORREF color = Color::white, FontStyle * font = FontStyle::getDefault());
// <20><><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Text(int x, int y, tstring text, COLORREF color = Color::white, FontStyle * font = FontStyle::getDefault());
virtual ~Text();
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>ɫ
COLORREF getColor() const;
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
tstring getText() const;
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
FontStyle * getFontStyle();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>
int getWidth();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ָ߶<D6B8>
int getHeight();
// <20>ı<EFBFBD><C4B1>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>
bool isEmpty() const;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setText(tstring text);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
void setColor(COLORREF color);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setFontStyle(FontStyle * style);
};
class MouseNode :
public virtual Node
{
private:
bool m_bTarget;
bool m_bBlock;
enum { NORMAL, MOUSEIN, SELECTED } m_eStatus;
CLICK_CALLBACK m_callback;
protected:
virtual bool _exec(bool active) override;
virtual void _onDraw() override;
void _setNormal();
void _setMouseIn();
void _setSelected();
// <20><>д<EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>õ<EFBFBD><C3B5>ж<EFBFBD>
virtual void _judge() = 0;
// <20><><EFBFBD><EFBFBD>״̬
virtual void _onNormal() = 0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
virtual void _onMouseIn() = 0;
// <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>ʱ
virtual void _onSelected() = 0;
public:
MouseNode();
virtual ~MouseNode();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
virtual void onClicked();
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
virtual bool isMouseIn();
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ѡ<EFBFBD><D1A1>
virtual bool isSelected();
// <20><><EFBFBD>ûص<C3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void setOnMouseClicked(const CLICK_CALLBACK & callback);
// <20><><EFBFBD><EFBFBD>״̬
virtual void reset();
// <20><><EFBFBD>ýڵ<C3BD><DAB5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
void setBlock(bool block);
};
class Button :
public virtual MouseNode
{
protected:
int m_nWidth;
int m_nHeight;
bool m_bEnable;
protected:
virtual bool _exec(bool active) override;
virtual void _onDraw() override;
virtual void _judge() override;
virtual void _onNormal() = 0;
virtual void _onMouseIn() = 0;
virtual void _onSelected() = 0;
virtual void _onDisable() = 0;
public:
Button();
virtual ~Button();
// <20><>ť<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
virtual bool isEnable();
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
virtual void setEnable(bool enable);
};
class TextButton :
public virtual Button
{
protected:
Text * m_pNormalText;
Text * m_pMouseInText;
Text * m_pSelectedText;
Text * m_pUnableText;
protected:
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
void resetTextPosition();
virtual void _onNormal() override;
virtual void _onMouseIn() override;
virtual void _onSelected() override;
virtual void _onDisable() override;
public:
TextButton();
TextButton(Text * text);
virtual ~TextButton();
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
2017-09-12 12:53:34 +08:00
void setNormal(Text * text);
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>İ<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
2017-09-12 12:53:34 +08:00
void setMouseIn(Text * text);
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>ʱ<EFBFBD>İ<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
2017-09-12 12:53:34 +08:00
void setSelected(Text * text);
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>ʱ<EFBFBD>İ<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
2017-09-12 12:53:34 +08:00
void setUnable(Text * text);
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setX(int x) override;
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setY(int y) override;
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setPos(int x, int y) override;
};
class ImageButton :
public virtual Button
{
protected:
Image * m_pNormalImage;
Image * m_pMouseInImage;
Image * m_pSelectedImage;
Image * m_pUnableImage;
protected:
// <20><><EFBFBD><EFBFBD>ͼƬλ<C6AC>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
void resetImagePosition();
virtual void _onNormal() override;
virtual void _onMouseIn() override;
virtual void _onSelected() override;
virtual void _onDisable() override;
public:
ImageButton();
ImageButton(Image * image);
virtual ~ImageButton();
// <20><><EFBFBD>ð<EFBFBD>ťͼƬ
2017-09-12 12:53:34 +08:00
void setNormal(Image * image);
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>İ<EFBFBD>ťͼƬ
2017-09-12 12:53:34 +08:00
void setMouseIn(Image * image);
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>ʱ<EFBFBD>İ<EFBFBD>ťͼƬ
2017-09-12 12:53:34 +08:00
void setSelected(Image * image);
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>ʱ<EFBFBD>İ<EFBFBD>ťͼƬ
2017-09-12 12:53:34 +08:00
void setUnable(Image * image);
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setX(int x) override;
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setY(int y) override;
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setPos(int x, int y) override;
};
class Shape :
public virtual Node
{
protected:
enum STYLE { round, solid, fill }; // <20><>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
STYLE _style;
2017-09-12 12:53:34 +08:00
COLORREF fillColor;
COLORREF lineColor;
2017-09-10 23:56:52 +08:00
protected:
virtual void _onDraw() override;
virtual void solidShape() = 0;
virtual void fillShape() = 0;
virtual void roundShape() = 0;
public:
Shape();
virtual ~Shape();
// <20><>ȡ<EFBFBD><C8A1>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
COLORREF getFillColor() const;
// <20><>ȡ<EFBFBD><C8A1>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
COLORREF getLineColor() const;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
void setFillColor(COLORREF color);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
void setLineColor(COLORREF color);
};
class Rect :
public virtual Shape
{
protected:
int m_nWidth;
int m_nHeight;
protected:
virtual void solidShape() override;
virtual void fillShape() override;
virtual void roundShape() override;
public:
Rect();
Rect(int x, int y, int width, int height);
virtual ~Rect();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ο<EFBFBD><CEBF><EFBFBD>
int getWidth() const;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>θ߶<CEB8>
int getHeight() const;
// <20><><EFBFBD>þ<EFBFBD><C3BE>ο<EFBFBD><CEBF><EFBFBD>
void setWidth(int width);
// <20><><EFBFBD>þ<EFBFBD><C3BE>θ߶<CEB8>
void setHeight(int height);
// <20><><EFBFBD>þ<EFBFBD><C3BE>δ<EFBFBD>С
void setSize(int width, int height);
};
class Circle :
public virtual Shape
{
protected:
int m_nRadius;
protected:
virtual void solidShape() override;
virtual void fillShape() override;
virtual void roundShape() override;
public:
Circle();
Circle(int x, int y, int radius);
virtual ~Circle();
// <20><>ȡԲ<C8A1>ΰ뾶
int getRadius() const;
// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ΰ뾶
void setRadius(int m_nRadius);
};
} // End of easy2d namespace
// Ĭ<><C4AC>ʹ<EFBFBD><CAB9> easy2d <20><><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
using namespace easy2d;