184 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			184 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
| #pragma once
 | |
| #include <Windows.h>
 | |
| #include <tchar.h>
 | |
| #include <atltypes.h>
 | |
| #include <vector>
 | |
| #include <stack>
 | |
| #include <functional>
 | |
| 
 | |
| // 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(); }
 | |
| 
 | |
| 
 | |
| // Type Declare
 | |
| 
 | |
| typedef CPoint						CVector;
 | |
| 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;
 | |
| typedef std::function<void()>		MOUSE_CALLBACK;
 | |
| 
 | |
| 
 | |
| // Classes Declare
 | |
| 
 | |
| namespace easy2d
 | |
| {
 | |
| 	class Scene;
 | |
| 	class Node;
 | |
| 
 | |
| 	class App
 | |
| 	{
 | |
| 	public:
 | |
| 		App();
 | |
| 		~App();
 | |
| 
 | |
| 		// 窗口可选模式
 | |
| 		enum MODE { SHOW_CONSOLE = 1, NO_CLOSE = 2, NO_MINI_MIZE = 4 };
 | |
| 
 | |
| 		// 定义绘图窗口
 | |
| 		void createWindow(int width, int height, int mode = 0);
 | |
| 		// 定义绘图窗口
 | |
| 		void createWindow(CSize size, int mode = 0);
 | |
| 		// 定义绘图窗口
 | |
| 		void createWindow(tstring title, int width, int height, int mode = 0);
 | |
| 		// 定义绘图窗口
 | |
| 		void createWindow(tstring title, CSize size, int mode = 0);
 | |
| 		// 启动程序
 | |
| 		int run();
 | |
| 		// 释放所有内存资源
 | |
| 		void free();
 | |
| 		// 销毁该对象
 | |
| 		void destory();
 | |
| 
 | |
| 		// 获取程序实例
 | |
| 		static App * get();
 | |
| 		// 设置坐标原点
 | |
| 		static void setOrigin(int originX, int originY);
 | |
| 		// 获取坐标原点的物理横坐标
 | |
| 		static int getOriginX();
 | |
| 		// 获取坐标原点的物理纵坐标
 | |
| 		static int getOriginY();
 | |
| 		// 终止程序
 | |
| 		static void quit();
 | |
| 		// 终止程序
 | |
| 		static void end();
 | |
| 		// 修改窗口大小
 | |
| 		static void setWindowSize(int width, int height);
 | |
| 		// 修改窗口大小
 | |
| 		static void setWindowSize(CSize size);
 | |
| 		// 关闭窗口
 | |
| 		static void close();
 | |
| 		// 设置窗口标题
 | |
| 		static void setWindowTitle(tstring title);
 | |
| 		// 获取窗口标题
 | |
| 		static tstring getWindowTitle();
 | |
| 		// 获取窗口宽度
 | |
| 		static int getWidth();
 | |
| 		// 获取窗口高度
 | |
| 		static int getHeight();
 | |
| 		// 切换场景
 | |
| 		static void enterScene(Scene *scene, bool save = true);
 | |
| 		// 返回上一场景
 | |
| 		static void backScene();
 | |
| 		// 清空之前保存的所有场景
 | |
| 		static void clearScene();
 | |
| 		// 设置 AppName
 | |
| 		static void setAppName(tstring appname);
 | |
| 		// 获取 AppName
 | |
| 		static tstring getAppName();
 | |
| 		// 修改窗口背景色
 | |
| 		static void setBkColor(COLORREF color);
 | |
| 		// 设置帧率
 | |
| 		static void setFPS(DWORD fps);
 | |
| 		// 重置绘图样式为默认值
 | |
| 		static void reset();
 | |
| 		// 获取当前场景
 | |
| 		static Scene * getCurrentScene();
 | |
| 
 | |
| 	protected:
 | |
| 		tstring				m_sTitle;
 | |
| 		tstring				m_sAppName;
 | |
| 		Scene*				m_CurrentScene;
 | |
| 		Scene*				m_NextScene;
 | |
| 		std::stack<Scene*>	m_SceneStack;
 | |
| 		LARGE_INTEGER		m_nAnimationInterval;
 | |
| 		CSize				m_Size;
 | |
| 		int					m_nWindowMode;
 | |
| 		bool				m_bRunning;
 | |
| 		bool				m_bSaveScene;
 | |
| 
 | |
| 	protected:
 | |
| 		void _initGraph();
 | |
| 		void _mainLoop();
 | |
| 		void _enterNextScene();
 | |
| 	};
 | |
| 
 | |
| 	class FreePool
 | |
| 	{
 | |
| 		friend class App;
 | |
| 		friend class Object;
 | |
| 
 | |
| 	private:
 | |
| 		// 刷新内存池
 | |
| 		static void __flush();
 | |
| 		// 将一个节点放入释放池
 | |
| 		static void __add(Object * nptr);
 | |
| 	};
 | |
| 
 | |
| 	class Scene
 | |
| 	{
 | |
| 		friend class App;
 | |
| 		friend class MouseMsg;
 | |
| 
 | |
| 	public:
 | |
| 		Scene();
 | |
| 		~Scene();
 | |
| 
 | |
| 		// 重写这个函数,它将在进入这个场景时自动执行
 | |
| 		virtual void onEnter();
 | |
| 		// 重写这个函数,它将在离开这个场景时自动执行
 | |
| 		virtual void onExit();
 | |
| 		// 添加子成员到场景
 | |
| 		void add(Node * child, int zOrder = 0);
 | |
| 		// 删除子成员
 | |
| 		bool del(Node * child);
 | |
| 		// 清空所有子成员
 | |
| 		void clearAllChildren();
 | |
| 
 | |
| 	protected:
 | |
| 		std::vector<Node*> m_vChildren;
 | |
| 
 | |
| 	protected:
 | |
| 		void _exec();
 | |
| 		void _onDraw();
 | |
| 	};
 | |
| 
 | |
| 	class Object
 | |
| 	{
 | |
| 		friend class FreePool;
 | |
| 
 | |
| 	public:
 | |
| 		Object();
 | |
| 		virtual ~Object();
 | |
| 
 | |
| 		void retain();
 | |
| 		void release();
 | |
| 
 | |
| 	protected:
 | |
| 		int m_nRef;
 | |
| 	};
 | |
| 
 | |
| }	// End of easy2d namespace
 |