new feature: singleton process
This commit is contained in:
		
							parent
							
								
									bca9f6f792
								
							
						
					
					
						commit
						d0c167360e
					
				|  | @ -25,6 +25,9 @@ bool e2d::Game::init(const String & sTitle, UINT32 nWidth, UINT32 nHeight, LPCTS | ||||||
| 		// 初始化 COM 组件
 | 		// 初始化 COM 组件
 | ||||||
| 		CoInitializeEx(NULL, COINIT_MULTITHREADED); | 		CoInitializeEx(NULL, COINIT_MULTITHREADED); | ||||||
| 
 | 
 | ||||||
|  | 		// ÉèÖÃ AppName
 | ||||||
|  | 		s_sAppName = sAppname; | ||||||
|  | 
 | ||||||
| 		// 创建设备无关资源
 | 		// 创建设备无关资源
 | ||||||
| 		if (!Renderer::__createDeviceIndependentResources()) | 		if (!Renderer::__createDeviceIndependentResources()) | ||||||
| 		{ | 		{ | ||||||
|  | @ -62,8 +65,6 @@ bool e2d::Game::init(const String & sTitle, UINT32 nWidth, UINT32 nHeight, LPCTS | ||||||
| 
 | 
 | ||||||
| 		// 重设 Client 大小
 | 		// 重设 Client 大小
 | ||||||
| 		Window::setSize(nWidth, nHeight); | 		Window::setSize(nWidth, nHeight); | ||||||
| 		// ÉèÖÃ AppName
 |  | ||||||
| 		s_sAppName = sAppname.isEmpty() ? Window::getTitle() : sAppname; |  | ||||||
| 		// 标志初始化成功
 | 		// 标志初始化成功
 | ||||||
| 		s_bInitialized = true; | 		s_bInitialized = true; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -11,8 +11,14 @@ static bool s_bShowConsole = false; | ||||||
| 
 | 
 | ||||||
| bool e2d::Window::__init(const String & sTitle, UINT32 nWidth, UINT32 nHeight, LPCTSTR pIconID /*= nullptr*/) | bool e2d::Window::__init(const String & sTitle, UINT32 nWidth, UINT32 nHeight, LPCTSTR pIconID /*= nullptr*/) | ||||||
| { | { | ||||||
|  | 	if (!Window::__initMutex(sTitle)) | ||||||
|  | 	{ | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// 注册窗口类
 | 	// 注册窗口类
 | ||||||
| 	WNDCLASSEX wcex = { sizeof(WNDCLASSEX) }; | 	WNDCLASSEX wcex = { 0 }; | ||||||
|  | 	wcex.cbSize = sizeof(WNDCLASSEX); | ||||||
| 	wcex.style = CS_HREDRAW | CS_VREDRAW; | 	wcex.style = CS_HREDRAW | CS_VREDRAW; | ||||||
| 	wcex.lpfnWndProc = Window::WndProc; | 	wcex.lpfnWndProc = Window::WndProc; | ||||||
| 	wcex.cbClsExtra = 0; | 	wcex.cbClsExtra = 0; | ||||||
|  | @ -100,6 +106,42 @@ bool e2d::Window::__init(const String & sTitle, UINT32 nWidth, UINT32 nHeight, L | ||||||
| 	return SUCCEEDED(hr); | 	return SUCCEEDED(hr); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool e2d::Window::__initMutex(const String & sTitle) | ||||||
|  | { | ||||||
|  | 	// 创建进程互斥体
 | ||||||
|  | 	HANDLE m_hMutex = ::CreateMutex(NULL, TRUE, sTitle); | ||||||
|  | 
 | ||||||
|  | 	if (m_hMutex == nullptr) | ||||||
|  | 	{ | ||||||
|  | 		WARN_IF(true, "CreateMutex Failed!"); | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// 如果程序已经存在并且正在运行
 | ||||||
|  | 	if (::GetLastError() == ERROR_ALREADY_EXISTS) | ||||||
|  | 	{ | ||||||
|  | 		// 获取窗口句柄
 | ||||||
|  | 		HWND hProgramWnd = ::FindWindow(L"Easy2DApp", sTitle); | ||||||
|  | 		if (hProgramWnd) | ||||||
|  | 		{ | ||||||
|  | 			// 获取窗口显示状态
 | ||||||
|  | 			WINDOWPLACEMENT wpm; | ||||||
|  | 			::GetWindowPlacement(hProgramWnd, &wpm); | ||||||
|  | 			// 将运行的程序窗口还原成正常状态
 | ||||||
|  | 			wpm.showCmd = SW_SHOW; | ||||||
|  | 			::SetWindowPlacement(hProgramWnd, &wpm); | ||||||
|  | 			::SetWindowPos(hProgramWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// 关闭进程互斥体
 | ||||||
|  | 		CloseHandle(m_hMutex); | ||||||
|  | 		m_hMutex = nullptr; | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void e2d::Window::__uninit() | void e2d::Window::__uninit() | ||||||
| { | { | ||||||
| 	// 关闭控制台
 | 	// 关闭控制台
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,39 @@ | ||||||
|  | #include "..\ecommon.h" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | e2d::Point::Point() | ||||||
|  | { | ||||||
|  | 	x = 0; | ||||||
|  | 	y = 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Point::Point(double x, double y) | ||||||
|  | { | ||||||
|  | 	this->x = x; | ||||||
|  | 	this->y = y; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Point e2d::Point::operator+(Point const & p) | ||||||
|  | { | ||||||
|  | 	return Point(x + p.x, y + p.y); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Point e2d::Point::operator-(Point const & p) | ||||||
|  | { | ||||||
|  | 	return Point(x - p.x, y - p.y); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Point e2d::Point::operator*(double const & value) | ||||||
|  | { | ||||||
|  | 	return Point(x * value, y * value); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Point e2d::Point::operator/(double const & value) | ||||||
|  | { | ||||||
|  | 	return Point(x / value, y / value); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Point::operator e2d::Size() const | ||||||
|  | { | ||||||
|  | 	return Size(x, y); | ||||||
|  | } | ||||||
|  | @ -0,0 +1,38 @@ | ||||||
|  | #include "..\ecommon.h" | ||||||
|  | 
 | ||||||
|  | e2d::Size::Size() | ||||||
|  | { | ||||||
|  | 	width = 0; | ||||||
|  | 	height = 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Size::Size(double width, double height) | ||||||
|  | { | ||||||
|  | 	this->width = width; | ||||||
|  | 	this->height = height; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Size e2d::Size::operator+(Size const & size) | ||||||
|  | { | ||||||
|  | 	return Size(width + size.width, height + size.height); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Size e2d::Size::operator-(Size const & size) | ||||||
|  | { | ||||||
|  | 	return Size(width - size.width, height - size.height); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Size e2d::Size::operator*(double const & value) | ||||||
|  | { | ||||||
|  | 	return Size(width * value, height * value); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Size e2d::Size::operator/(double const & value) | ||||||
|  | { | ||||||
|  | 	return Size(width / value, height / value); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | e2d::Size::operator e2d::Point() const | ||||||
|  | { | ||||||
|  | 	return Point(width, height); | ||||||
|  | } | ||||||
|  | @ -95,6 +95,11 @@ private: | ||||||
| 		LPCTSTR pIconID | 		LPCTSTR pIconID | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
|  | 	// ´´½¨½ø³Ì»¥³âÌå
 | ||||||
|  | 	static bool __initMutex( | ||||||
|  | 		const String & sTitle | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
| 	// 重置窗口属性
 | 	// 重置窗口属性
 | ||||||
| 	static void __uninit(); | 	static void __uninit(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -8,82 +8,44 @@ namespace e2d | ||||||
| { | { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | struct Size; | ||||||
|  | 
 | ||||||
| // 表示坐标的结构体
 | // 表示坐标的结构体
 | ||||||
| struct Point | struct Point | ||||||
| { | { | ||||||
| 	double x; | 	Point(); | ||||||
| 	double y; |  | ||||||
| 
 | 
 | ||||||
| 	Point() | 	Point(double x, double y); | ||||||
| 	{ |  | ||||||
| 		x = 0; |  | ||||||
| 		y = 0; |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	Point(double x, double y) | 	Point operator + (Point const & p); | ||||||
| 	{ | 	Point operator - (Point const & p); | ||||||
| 		this->x = x; | 	Point operator * (double const & value); | ||||||
| 		this->y = y; | 	Point operator / (double const & value); | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	Point operator + (Point const & p) | 	operator Size() const; | ||||||
| 	{ |  | ||||||
| 		return Point(x + p.x, y + p.y); |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	Point operator - (Point const & p) | 	/* 成员变量 */ | ||||||
| 	{ | 	double x;	// X 坐标
 | ||||||
| 		return Point(x - p.x, y - p.y); | 	double y;	// Y 坐标
 | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	Point operator * (double const & value) |  | ||||||
| 	{ |  | ||||||
| 		return Point(x * value, y * value); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	Point operator / (double const & value) |  | ||||||
| 	{ |  | ||||||
| 		return Point(x / value, y / value); |  | ||||||
| 	} |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // 表示大小的结构体
 | // 表示大小的结构体
 | ||||||
| struct Size | struct Size | ||||||
| { | { | ||||||
| 	double width; | 	Size(); | ||||||
| 	double height; |  | ||||||
| 
 | 
 | ||||||
| 	Size() | 	Size(double width, double height); | ||||||
| 	{ |  | ||||||
| 		width = 0; |  | ||||||
| 		height = 0; |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	Size(double width, double height) | 	Size operator + (Size const & size); | ||||||
| 	{ | 	Size operator - (Size const & size); | ||||||
| 		this->width = width; | 	Size operator * (double const & value); | ||||||
| 		this->height = height; | 	Size operator / (double const & value); | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	Size operator + (Size const & size) | 	operator Point() const; | ||||||
| 	{ |  | ||||||
| 		return Size(width + size.width, height + size.height); |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	Size operator - (Size const & size) | 	/* 成员变量 */ | ||||||
| 	{ | 	double width;	// 宽度
 | ||||||
| 		return Size(width - size.width, height - size.height); | 	double height;	// 高度
 | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	Size operator * (double const & value) |  | ||||||
| 	{ |  | ||||||
| 		return Size(width * value, height * value); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	Size operator / (double const & value) |  | ||||||
| 	{ |  | ||||||
| 		return Size(width / value, height / value); |  | ||||||
| 	} |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -213,7 +213,9 @@ | ||||||
|     <ClCompile Include="..\..\core\Base\Window.cpp" /> |     <ClCompile Include="..\..\core\Base\Window.cpp" /> | ||||||
|     <ClCompile Include="..\..\core\Common\Font.cpp" /> |     <ClCompile Include="..\..\core\Common\Font.cpp" /> | ||||||
|     <ClCompile Include="..\..\core\Common\Object.cpp" /> |     <ClCompile Include="..\..\core\Common\Object.cpp" /> | ||||||
|  |     <ClCompile Include="..\..\core\Common\Point.cpp" /> | ||||||
|     <ClCompile Include="..\..\core\Common\Scene.cpp" /> |     <ClCompile Include="..\..\core\Common\Scene.cpp" /> | ||||||
|  |     <ClCompile Include="..\..\core\Common\Size.cpp" /> | ||||||
|     <ClCompile Include="..\..\core\Common\String.cpp" /> |     <ClCompile Include="..\..\core\Common\String.cpp" /> | ||||||
|     <ClCompile Include="..\..\core\Common\Image.cpp" /> |     <ClCompile Include="..\..\core\Common\Image.cpp" /> | ||||||
|     <ClCompile Include="..\..\core\Manager\ActionManager.cpp" /> |     <ClCompile Include="..\..\core\Manager\ActionManager.cpp" /> | ||||||
|  |  | ||||||
|  | @ -180,6 +180,12 @@ | ||||||
|     <ClCompile Include="..\..\core\Shape\Rect.cpp"> |     <ClCompile Include="..\..\core\Shape\Rect.cpp"> | ||||||
|       <Filter>Shape</Filter> |       <Filter>Shape</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|  |     <ClCompile Include="..\..\core\Common\Point.cpp"> | ||||||
|  |       <Filter>Common</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="..\..\core\Common\Size.cpp"> | ||||||
|  |       <Filter>Common</Filter> | ||||||
|  |     </ClCompile> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClInclude Include="..\..\core\etools.h" /> |     <ClInclude Include="..\..\core\etools.h" /> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue