| 
									
										
										
										
											2017-10-12 02:44:44 +08:00
										 |  |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | #include "emacros.h"
 | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | #include <vector>
 | 
					
						
							|  |  |  |  | #include <functional>
 | 
					
						
							|  |  |  |  | #include <sstream>
 | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace e2d | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-12 02:44:44 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD><E1B9B9>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | struct Point | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	float x; | 
					
						
							|  |  |  |  | 	float y; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Point() | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		x = 0; | 
					
						
							|  |  |  |  | 		y = 0; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Point(float x, float y) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		this->x = x; | 
					
						
							|  |  |  |  | 		this->y = y; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Point operator + (Point const & p) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		return Point(x + p.x, y + p.y); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Point operator - (Point const & p) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		return Point(x - p.x, y - p.y); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Point operator * (float const & value) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		return Point(x * value, y * value); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Point operator / (float const & value) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		return Point(x / value, y / value); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><>ʾ<EFBFBD><CABE>С<EFBFBD>Ľṹ<C4BD><E1B9B9>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | struct Size | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	float width; | 
					
						
							|  |  |  |  | 	float height; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Size() | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		width = 0; | 
					
						
							|  |  |  |  | 		height = 0; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Size(float width, float height) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		this->width = width; | 
					
						
							|  |  |  |  | 		this->height = height; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Size operator + (Size const & size) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		return Size(width + size.width, height + size.height); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Size operator - (Size const & size) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		return Size(width - size.width, height - size.height); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Size operator * (float const & value) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		return Size(width * value, height * value); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Size operator / (float const & value) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		return Size(width / value, height / value); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | // <20>ַ<EFBFBD><D6B7><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class String | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	String(); | 
					
						
							|  |  |  |  | 	String(const wchar_t *); | 
					
						
							|  |  |  |  | 	String(const String &); | 
					
						
							|  |  |  |  | 	String(const std::wstring &); | 
					
						
							|  |  |  |  | 	String(String &&); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	~String(); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	String& operator= (const wchar_t *); | 
					
						
							|  |  |  |  | 	String& operator= (const String &); | 
					
						
							|  |  |  |  | 	String& operator= (const std::wstring &); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	bool operator== (const wchar_t *); | 
					
						
							|  |  |  |  | 	bool operator== (const String &); | 
					
						
							|  |  |  |  | 	bool operator== (const std::wstring &); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	bool operator!= (const wchar_t *); | 
					
						
							|  |  |  |  | 	bool operator!= (const String &); | 
					
						
							|  |  |  |  | 	bool operator!= (const std::wstring &); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	wchar_t &operator[] (int); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	String operator+ (const wchar_t); | 
					
						
							|  |  |  |  | 	String operator+ (const wchar_t *); | 
					
						
							|  |  |  |  | 	String operator+ (const String &); | 
					
						
							|  |  |  |  | 	String operator+ (const std::wstring &); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	friend String operator+ (const wchar_t, const String &); | 
					
						
							|  |  |  |  | 	friend String operator+ (const wchar_t*, const String &); | 
					
						
							|  |  |  |  | 	friend String operator+ (const std::wstring &, const String &); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	String& operator+= (const wchar_t); | 
					
						
							|  |  |  |  | 	String& operator+= (const wchar_t *); | 
					
						
							|  |  |  |  | 	String& operator+= (const String &); | 
					
						
							|  |  |  |  | 	String& operator+= (const std::wstring &); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	template<typename T> | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	String& operator<< (const T value) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		std::wostringstream ss; | 
					
						
							|  |  |  |  | 		ss << value; | 
					
						
							|  |  |  |  | 		return (*this) += ss.str(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	operator const wchar_t* () const; | 
					
						
							|  |  |  |  | 	operator bool () const; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	friend std::wistream& operator>> (std::wistream &, String &); | 
					
						
							| 
									
										
										
										
											2017-12-12 12:18:28 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	// <20>ж<EFBFBD><D0B6>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	bool isEmpty() const; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	int getLength() const; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2>ֵ
 | 
					
						
							|  |  |  |  | 	unsigned int getHash() const; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	String &append(const wchar_t ch); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	String &append(const wchar_t *str); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	String &append(const String &str); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
 | 
					
						
							|  |  |  |  | 	template<typename T> | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	String &append(const T &value) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return (*this) += value; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD>ü<EFBFBD><C3BC>ַ<EFBFBD><D6B7><EFBFBD>
 | 
					
						
							|  |  |  |  | 	String subtract(int offset, int count = -1) const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>е<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ض<EFBFBD><D8B6>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>±<EFBFBD>
 | 
					
						
							|  |  |  |  | 	int findFirstOf(const wchar_t ch) const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ض<EFBFBD><D8B6>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>±<EFBFBD>
 | 
					
						
							|  |  |  |  | 	int findLastOf(const wchar_t ch) const; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>д<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
 | 
					
						
							|  |  |  |  | 	String toUpper() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡСд<D0A1>ַ<EFBFBD><D6B7><EFBFBD>
 | 
					
						
							|  |  |  |  | 	String toLower() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>Ϊ int <20><>
 | 
					
						
							|  |  |  |  | 	int toInt() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>Ϊ double <20><>
 | 
					
						
							|  |  |  |  | 	double toDouble() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>Ϊ bool <20><>
 | 
					
						
							|  |  |  |  | 	bool toBool() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	template<typename T> | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	static String toString(const T value) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		std::wostringstream ss; | 
					
						
							|  |  |  |  | 		ss << value; | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 		return ss.str(); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | private: | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	std::wstring m_str; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | // <20><>ɫ
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Color | 
					
						
							| 
									
										
										
										
											2017-10-17 21:22:25 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 	enum COMMON_VALUE | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		ALICE_BLUE = 0xF0F8FF, | 
					
						
							|  |  |  |  | 		AQUA = 0x00FFFF, | 
					
						
							|  |  |  |  | 		AZURE = 0xF0FFFF, | 
					
						
							|  |  |  |  | 		BEIGE = 0xF5F5DC, | 
					
						
							|  |  |  |  | 		BLACK = 0x000000, | 
					
						
							|  |  |  |  | 		BLUE = 0x0000FF, | 
					
						
							|  |  |  |  | 		BLUE_VIOLET = 0x8A2BE2, | 
					
						
							|  |  |  |  | 		BROWN = 0xA52A2A, | 
					
						
							|  |  |  |  | 		CHOCOLATE = 0xD2691E, | 
					
						
							|  |  |  |  | 		CYAN = 0x00FFFF, | 
					
						
							|  |  |  |  | 		DARK_BLUE = 0x00008B, | 
					
						
							|  |  |  |  | 		DARK_CYAN = 0x008B8B, | 
					
						
							|  |  |  |  | 		DARK_GOLDENROD = 0xB8860B, | 
					
						
							|  |  |  |  | 		DARK_GRAY = 0xA9A9A9, | 
					
						
							|  |  |  |  | 		DARK_GREEN = 0x006400, | 
					
						
							|  |  |  |  | 		DARK_ORANGE = 0xFF8C00, | 
					
						
							|  |  |  |  | 		DARK_RED = 0x8B0000, | 
					
						
							|  |  |  |  | 		DARK_SEA_GREEN = 0x8FBC8F, | 
					
						
							|  |  |  |  | 		DARK_VIOLET = 0x9400D3, | 
					
						
							|  |  |  |  | 		DEEP_PINK = 0xFF1493, | 
					
						
							|  |  |  |  | 		DEEP_SKY_BLUE = 0x00BFFF, | 
					
						
							|  |  |  |  | 		FOREST_GREEN = 0x228B22, | 
					
						
							|  |  |  |  | 		GOLD = 0xFFD700, | 
					
						
							|  |  |  |  | 		GOLDENROD = 0xDAA520, | 
					
						
							|  |  |  |  | 		GRAY = 0x808080, | 
					
						
							|  |  |  |  | 		GREEN = 0x008000, | 
					
						
							|  |  |  |  | 		GREEN_YELLOW = 0xADFF2F, | 
					
						
							|  |  |  |  | 		LIGHT_BLUE = 0xADD8E6, | 
					
						
							|  |  |  |  | 		LIGHT_CYAN = 0xE0FFFF, | 
					
						
							|  |  |  |  | 		LIGHT_GOLDENROD_YELLOW = 0xFAFAD2, | 
					
						
							|  |  |  |  | 		LIGHT_GREEN = 0x90EE90, | 
					
						
							|  |  |  |  | 		LIGHT_GRAY = 0xD3D3D3, | 
					
						
							|  |  |  |  | 		LIGHT_PINK = 0xFFB6C1, | 
					
						
							|  |  |  |  | 		LIGHT_SEA_GREEN = 0x20B2AA, | 
					
						
							|  |  |  |  | 		LIGHT_SKY_BLUE = 0x87CEFA, | 
					
						
							|  |  |  |  | 		LIGHT_SLATE_GRAY = 0x778899, | 
					
						
							|  |  |  |  | 		LIGHT_YELLOW = 0xFFFFE0, | 
					
						
							|  |  |  |  | 		MEDIUM_BLUE = 0x0000CD, | 
					
						
							|  |  |  |  | 		MEDIUM_PURPLE = 0x9370DB, | 
					
						
							|  |  |  |  | 		MEDIUM_SEA_GREEN = 0x3CB371, | 
					
						
							|  |  |  |  | 		MEDIUM_SPRING_GREEN = 0x00FA9A, | 
					
						
							|  |  |  |  | 		MEDUIM_VIOLET_RED = 0xC71585, | 
					
						
							|  |  |  |  | 		MIDNIGHT_BLUE = 0x191970, | 
					
						
							|  |  |  |  | 		ORANGE = 0xFFA500, | 
					
						
							|  |  |  |  | 		ORANGE_RED = 0xFF4500, | 
					
						
							|  |  |  |  | 		PINK = 0xFFC0CB, | 
					
						
							|  |  |  |  | 		PURPLE = 0x800080, | 
					
						
							|  |  |  |  | 		RED = 0xFF0000, | 
					
						
							|  |  |  |  | 		SEA_GREEN = 0x2E8B57, | 
					
						
							|  |  |  |  | 		SEA_SHELL = 0xFFF5EE, | 
					
						
							|  |  |  |  | 		SILVER = 0xC0C0C0, | 
					
						
							|  |  |  |  | 		SKY_BLUE = 0x87CEEB, | 
					
						
							|  |  |  |  | 		SNOW = 0xFFFAFA, | 
					
						
							|  |  |  |  | 		SPRING_GREEN = 0x00FF7F, | 
					
						
							|  |  |  |  | 		TOMATO = 0xFF6347, | 
					
						
							|  |  |  |  | 		VIOLET = 0xEE82EE, | 
					
						
							|  |  |  |  | 		WHEAT = 0xF5DEB3, | 
					
						
							|  |  |  |  | 		WHITE = 0xFFFFFF, | 
					
						
							|  |  |  |  | 		WHITE_SMOKE = 0xF5F5F5, | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 		WOOD = 0xDEB887, | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 		YELLOW = 0xFFFF00, | 
					
						
							|  |  |  |  | 		YELLOW_GREEN = 0x9ACD32 | 
					
						
							|  |  |  |  | 	}; | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸֵ
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class FontWeight | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 	enum COMMON_VALUE | 
					
						
							| 
									
										
										
										
											2017-10-18 22:13:20 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		THIN = 100, | 
					
						
							|  |  |  |  | 		EXTRA_LIGHT = 200, | 
					
						
							|  |  |  |  | 		ULTRA_LIGHT = 200, | 
					
						
							|  |  |  |  | 		LIGHT = 300, | 
					
						
							|  |  |  |  | 		SEMI_LIGHT = 350, | 
					
						
							|  |  |  |  | 		NORMAL = 400, | 
					
						
							|  |  |  |  | 		REGULAR = 400, | 
					
						
							|  |  |  |  | 		MEDIUM = 500, | 
					
						
							|  |  |  |  | 		DEMI_BOLD = 600, | 
					
						
							|  |  |  |  | 		SEMI_BOLD = 600, | 
					
						
							|  |  |  |  | 		BOLD = 700, | 
					
						
							|  |  |  |  | 		EXTRA_BOLD = 800, | 
					
						
							|  |  |  |  | 		ULTRA_BOLD = 800, | 
					
						
							|  |  |  |  | 		BLACK = 900, | 
					
						
							|  |  |  |  | 		HEAVY = 900, | 
					
						
							|  |  |  |  | 		EXTRA_BLACK = 950, | 
					
						
							|  |  |  |  | 		ULTRA_BLACK = 950 | 
					
						
							|  |  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | // <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class KeyCode | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	enum VALUE | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 		UP = 0xC8, | 
					
						
							|  |  |  |  | 		LEFT = 0xCB, | 
					
						
							|  |  |  |  | 		RIGHT = 0xCD, | 
					
						
							|  |  |  |  | 		DOWN = 0xD0, | 
					
						
							|  |  |  |  | 		ENTER = 0x1C, | 
					
						
							|  |  |  |  | 		SPACE = 0x39, | 
					
						
							|  |  |  |  | 		ESC = 0x01, | 
					
						
							|  |  |  |  | 		BACK = 0x0E, | 
					
						
							|  |  |  |  | 		TAB = 0x0F, | 
					
						
							|  |  |  |  | 		PAUSE = 0xC5, | 
					
						
							|  |  |  |  | 		Q = 0x10, | 
					
						
							|  |  |  |  | 		W = 0x11, | 
					
						
							|  |  |  |  | 		E = 0x12, | 
					
						
							|  |  |  |  | 		R = 0x13, | 
					
						
							|  |  |  |  | 		T = 0x14, | 
					
						
							|  |  |  |  | 		Y = 0x15, | 
					
						
							|  |  |  |  | 		U = 0x16, | 
					
						
							|  |  |  |  | 		I = 0x17, | 
					
						
							|  |  |  |  | 		O = 0x18, | 
					
						
							|  |  |  |  | 		P = 0x19, | 
					
						
							|  |  |  |  | 		A = 0x1E, | 
					
						
							|  |  |  |  | 		S = 0x1F, | 
					
						
							|  |  |  |  | 		D = 0x20, | 
					
						
							|  |  |  |  | 		F = 0x21, | 
					
						
							|  |  |  |  | 		G = 0x22, | 
					
						
							|  |  |  |  | 		H = 0x23, | 
					
						
							|  |  |  |  | 		J = 0x24, | 
					
						
							|  |  |  |  | 		K = 0x25, | 
					
						
							|  |  |  |  | 		L = 0x26, | 
					
						
							|  |  |  |  | 		Z = 0x2C, | 
					
						
							|  |  |  |  | 		X = 0x2D, | 
					
						
							|  |  |  |  | 		C = 0x2E, | 
					
						
							|  |  |  |  | 		V = 0x2F, | 
					
						
							|  |  |  |  | 		B = 0x30, | 
					
						
							|  |  |  |  | 		N = 0x31, | 
					
						
							|  |  |  |  | 		M = 0x32, | 
					
						
							|  |  |  |  | 		NUM1 = 0x02, | 
					
						
							|  |  |  |  | 		NUM2 = 0x03, | 
					
						
							|  |  |  |  | 		NUM3 = 0x04, | 
					
						
							|  |  |  |  | 		NUM4 = 0x05, | 
					
						
							|  |  |  |  | 		NUM5 = 0x06, | 
					
						
							|  |  |  |  | 		NUM6 = 0x07, | 
					
						
							|  |  |  |  | 		NUM7 = 0x08, | 
					
						
							|  |  |  |  | 		NUM8 = 0x09, | 
					
						
							|  |  |  |  | 		NUM9 = 0x0A, | 
					
						
							|  |  |  |  | 		NUM0 = 0x0B, | 
					
						
							|  |  |  |  | 		NUMPAD7 = 0x47, | 
					
						
							|  |  |  |  | 		NUMPAD8 = 0x48, | 
					
						
							|  |  |  |  | 		NUMPAD9 = 0x49, | 
					
						
							|  |  |  |  | 		NUMPAD4 = 0x4B, | 
					
						
							|  |  |  |  | 		NUMPAD5 = 0x4C, | 
					
						
							|  |  |  |  | 		NUMPAD6 = 0x4D, | 
					
						
							|  |  |  |  | 		NUMPAD1 = 0x4F, | 
					
						
							|  |  |  |  | 		NUMPAD2 = 0x50, | 
					
						
							|  |  |  |  | 		NUMPAD3 = 0x51, | 
					
						
							|  |  |  |  | 		NUMPAD0 = 0x52, | 
					
						
							|  |  |  |  | 		F1 = 0x3B, | 
					
						
							|  |  |  |  | 		F2 = 0x3C, | 
					
						
							|  |  |  |  | 		F3 = 0x3D, | 
					
						
							|  |  |  |  | 		F4 = 0x3E, | 
					
						
							|  |  |  |  | 		F5 = 0x3F, | 
					
						
							|  |  |  |  | 		F6 = 0x40, | 
					
						
							|  |  |  |  | 		F7 = 0x41, | 
					
						
							|  |  |  |  | 		F8 = 0x42, | 
					
						
							|  |  |  |  | 		F9 = 0x43, | 
					
						
							|  |  |  |  | 		F10 = 0x44 | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-28 18:48:21 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | // <20><>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Relation | 
					
						
							| 
									
										
										
										
											2017-11-07 23:04:33 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	enum VALUE | 
					
						
							| 
									
										
										
										
											2017-11-07 23:04:33 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		UNKNOWN = 0,		/* <20><>ϵ<EFBFBD><CFB5>ȷ<EFBFBD><C8B7> */ | 
					
						
							|  |  |  |  | 		DISJOINT = 1,		/* û<>н<EFBFBD><D0BD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		IS_CONTAINED = 2,	/* <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		CONTAINS = 3,		/* <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		OVERLAP = 4			/* <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD> */ | 
					
						
							|  |  |  |  | 	}; | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class ObjectManager; | 
					
						
							| 
									
										
										
										
											2017-10-28 18:48:21 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Obj | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	friend ObjectManager; | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Obj(); | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	virtual ~Obj(); | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | 
					
						
							|  |  |  |  | 	void retain(); | 
					
						
							| 
									
										
										
										
											2017-10-28 18:48:21 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 	// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | 
					
						
							|  |  |  |  | 	void release(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | private: | 
					
						
							|  |  |  |  | 	int m_nRefCount; | 
					
						
							|  |  |  |  | 	bool m_bManaged; | 
					
						
							|  |  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-10-28 18:48:21 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Text; | 
					
						
							| 
									
										
										
										
											2017-10-28 18:48:21 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Font : | 
					
						
							|  |  |  |  | 	public Obj | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	friend Text; | 
					
						
							| 
									
										
										
										
											2017-10-28 18:48:21 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Font(); | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Font( | 
					
						
							|  |  |  |  | 		String fontFamily, | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 		float fontSize = 22, | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		UINT32 color = Color::WHITE, | 
					
						
							|  |  |  |  | 		UINT32 fontWeight = FontWeight::REGULAR, | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 		bool italic = false | 
					
						
							|  |  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2017-10-28 18:48:21 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	virtual ~Font(); | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD>ֺ<EFBFBD>
 | 
					
						
							|  |  |  |  | 	float getFontSize() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸֵ
 | 
					
						
							|  |  |  |  | 	UINT32 getFontWeight() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
 | 
					
						
							|  |  |  |  | 	UINT32 getColor() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>Ƿ<EFBFBD><C7B7><EFBFBD>б<EFBFBD><D0B1>
 | 
					
						
							|  |  |  |  | 	bool isItalic() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void setFamily( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		const String & fontFamily | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ֺ<EFBFBD>
 | 
					
						
							|  |  |  |  | 	void setSize( | 
					
						
							|  |  |  |  | 		float fontSize | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸֵ
 | 
					
						
							|  |  |  |  | 	void setWeight( | 
					
						
							|  |  |  |  | 		UINT32 fontWeight | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
 | 
					
						
							|  |  |  |  | 	void setColor( | 
					
						
							|  |  |  |  | 		UINT32 color | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>
 | 
					
						
							|  |  |  |  | 	void setItalic( | 
					
						
							|  |  |  |  | 		bool value | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>ʽ
 | 
					
						
							|  |  |  |  | 	void _initTextFormat(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ָ<EFBFBD>ʽ
 | 
					
						
							|  |  |  |  | 	IDWriteTextFormat * _getTextFormat(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	String		m_sFontFamily; | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 	float		m_fFontSize; | 
					
						
							|  |  |  |  | 	UINT32		m_FontWeight; | 
					
						
							|  |  |  |  | 	UINT32		m_Color; | 
					
						
							|  |  |  |  | 	bool		m_bItalic; | 
					
						
							|  |  |  |  | 	bool		m_bRecreateNeeded; | 
					
						
							|  |  |  |  | 	IDWriteTextFormat * m_pTextFormat; | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | // ͼƬ
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Image : | 
					
						
							|  |  |  |  | 	public Obj | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>յ<EFBFBD>ͼƬ
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Image(); | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡ<EFBFBD><C8A1>Դ
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Image( | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 		LPCTSTR strFilePath	/* ͼƬ<CDBC>ļ<EFBFBD>·<EFBFBD><C2B7> */ | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡ<EFBFBD><C8A1>Դ
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Image( | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 		LPCTSTR strFilePath,/* ͼƬ<CDBC>ļ<EFBFBD>·<EFBFBD><C2B7> */ | 
					
						
							|  |  |  |  | 		float nClipX,		/* <20>ü<EFBFBD>λ<EFBFBD><CEBB> X <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		float nClipY,		/* <20>ü<EFBFBD>λ<EFBFBD><CEBB> Y <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		float nClipWidth,	/* <20>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		float nClipHeight	/* <20>ü<EFBFBD><C3BC>߶<EFBFBD> */ | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	virtual ~Image(); | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20>ü<EFBFBD>ͼƬ
 | 
					
						
							|  |  |  |  | 	void clip( | 
					
						
							|  |  |  |  | 		float nClipX,		/* <20>ü<EFBFBD>λ<EFBFBD><CEBB> X <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		float nClipY,		/* <20>ü<EFBFBD>λ<EFBFBD><CEBB> Y <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		float nClipWidth,	/* <20>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		float nClipHeight	/* <20>ü<EFBFBD><C3BC>߶<EFBFBD> */ | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡͼƬ
 | 
					
						
							|  |  |  |  | 	void loadFrom( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		const String & strFilePath | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡͼƬ<CDBC><C6AC><EFBFBD>ü<EFBFBD>
 | 
					
						
							|  |  |  |  | 	void loadFrom( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		const String & strFilePath,/* ͼƬ<CDBC>ļ<EFBFBD>·<EFBFBD><C2B7> */ | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 		float nClipX,				/* <20>ü<EFBFBD>λ<EFBFBD><CEBB> X <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		float nClipY,				/* <20>ü<EFBFBD>λ<EFBFBD><CEBB> Y <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		float nClipWidth,			/* <20>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		float nClipHeight			/* <20>ü<EFBFBD><C3BC>߶<EFBFBD> */ | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	virtual float getWidth() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD>߶<EFBFBD>
 | 
					
						
							|  |  |  |  | 	virtual float getHeight() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>С
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	virtual Size getSize() const; | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 	// <20><>ȡԴͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	virtual float getSourceWidth() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡԴͼƬ<CDBC>߶<EFBFBD>
 | 
					
						
							|  |  |  |  | 	virtual float getSourceHeight() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡԴͼƬ<CDBC><C6AC>С
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	virtual Size getSourceSize() const; | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD>ü<EFBFBD>λ<EFBFBD><CEBB> X <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	virtual float getClipX() const; | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD>ü<EFBFBD>λ<EFBFBD><CEBB> Y <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	virtual float getClipY() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD>ü<EFBFBD>λ<EFBFBD><CEBB>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	virtual Point getClipPos() const; | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ ID2D1Bitmap <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	ID2D1Bitmap * getBitmap(); | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | 
					
						
							|  |  |  |  | 	static bool preload( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		const String & sFileName	/* ͼƬ<CDBC>ļ<EFBFBD>·<EFBFBD><C2B7> */ | 
					
						
							| 
									
										
										
										
											2017-11-04 15:38:41 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void clearCache(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-07 23:04:33 +08:00
										 |  |  |  | protected: | 
					
						
							|  |  |  |  | 	float	m_fSourceClipX; | 
					
						
							|  |  |  |  | 	float	m_fSourceClipY; | 
					
						
							|  |  |  |  | 	float	m_fSourceClipWidth; | 
					
						
							|  |  |  |  | 	float	m_fSourceClipHeight; | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	ID2D1Bitmap * m_pBitmap; | 
					
						
							| 
									
										
										
										
											2017-11-07 23:04:33 +08:00
										 |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class SceneManager; | 
					
						
							|  |  |  |  | class Node; | 
					
						
							|  |  |  |  | class Action; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | // <20><><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Scene : | 
					
						
							|  |  |  |  | 	public Obj | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	friend SceneManager; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Scene(); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	virtual ~Scene(); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD>ִ<EFBFBD><D6B4>
 | 
					
						
							|  |  |  |  | 	virtual void onEnter() {} | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD>ִ<EFBFBD><D6B4>
 | 
					
						
							|  |  |  |  | 	virtual void onExit() {} | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD>ִ<EFBFBD><D6B4>
 | 
					
						
							|  |  |  |  | 	virtual void onCollide( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		Node * pActiveNode,	/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD>Ľڵ<C4BD> */ | 
					
						
							|  |  |  |  | 		Node * pPassiveNode	/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD>Ľڵ<C4BD> */ | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	) {} | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹرմ<D8B1><D5B4><EFBFBD>ʱִ<CAB1><D6B4>
 | 
					
						
							|  |  |  |  | 	virtual bool onCloseWindow() { return true; } | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿһ֡<D2BB><D6A1><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>ʱִ<CAB1><D6B4>
 | 
					
						
							|  |  |  |  | 	virtual void onUpdate() {} | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-04 21:24:27 +08:00
										 |  |  |  | 	// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>ͣʱִ<CAB1><D6B4>
 | 
					
						
							|  |  |  |  | 	virtual void onPause() {} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> onUpdate <20><><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-04 21:24:27 +08:00
										 |  |  |  | 	void setAutoUpdate( | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 		bool bAutoUpdate | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ӽڵ㵽<DAB5><E3B5BD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	void add( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		Node * child, | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 		int zOrder = 0 | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// ɾ<><C9BE><EFBFBD>ӽڵ<D3BD>
 | 
					
						
							|  |  |  |  | 	bool remove( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		Node * child | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڵ<EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Node * getRoot() const; | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD>Ⱦ
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	void setShapeVisiable( | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 		bool visiable | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							|  |  |  |  | 	// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void _render(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void _update(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	bool m_bAutoUpdate; | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	bool m_bSortNeeded; | 
					
						
							|  |  |  |  | 	bool m_bWillSave; | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	bool m_bShapeVisiable; | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	Node * m_pRoot; | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | typedef Point Vector; | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | // <20><><EFBFBD><EFBFBD>ֵ<EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>Ϊ<EFBFBD>յĺ<D5B5><C4BA><EFBFBD>
 | 
					
						
							|  |  |  |  | typedef std::function<void(void)> VoidFunction; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><>ʱ<EFBFBD><CAB1><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | typedef VoidFunction TimerCallback; | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | typedef VoidFunction ButtonCallback; | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | template<typename T> | 
					
						
							|  |  |  |  | inline void SafeDelete(T** p) { if (*p) { delete *p; *p = nullptr; } } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | template<typename Obj> | 
					
						
							|  |  |  |  | inline void SafeRelease(Obj** p) { if (*p) { (*p)->release(); *p = nullptr; } } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | template<class Interface> | 
					
						
							|  |  |  |  | inline void SafeReleaseInterface(Interface **pp) { if (*pp != nullptr) { (*pp)->Release(); (*pp) = nullptr; } } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | } |