| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | #include "..\ebase.h"
 | 
					
						
							|  |  |  |  | #include "..\emanagers.h"
 | 
					
						
							|  |  |  |  | #include <imm.h>
 | 
					
						
							|  |  |  |  | #pragma comment (lib ,"imm32.lib")
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
 | 
					
						
							|  |  |  |  | static HWND s_HWnd = nullptr; | 
					
						
							|  |  |  |  | // <20>Ƿ<EFBFBD><C7B7><EFBFBD><F2BFAABF><EFBFBD>̨
 | 
					
						
							|  |  |  |  | static bool s_bShowConsole = false; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-01 09:38:25 +08:00
										 |  |  |  | bool e2d::EWindow::__init(LPCTSTR sTitle, UINT32 nWidth, UINT32 nHeight, LPCTSTR pIconID /*= nullptr*/) | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	// ע<>ᴰ<EFBFBD><E1B4B0><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	WNDCLASSEX wcex = { sizeof(WNDCLASSEX) }; | 
					
						
							|  |  |  |  | 	wcex.style = CS_HREDRAW | CS_VREDRAW; | 
					
						
							|  |  |  |  | 	wcex.lpfnWndProc = EWindow::WndProc; | 
					
						
							|  |  |  |  | 	wcex.cbClsExtra = 0; | 
					
						
							|  |  |  |  | 	wcex.cbWndExtra = sizeof(LONG_PTR); | 
					
						
							|  |  |  |  | 	wcex.hInstance = HINST_THISCOMPONENT; | 
					
						
							|  |  |  |  | 	wcex.hbrBackground = NULL; | 
					
						
							|  |  |  |  | 	wcex.lpszMenuName = NULL; | 
					
						
							|  |  |  |  | 	wcex.hCursor = LoadCursor(NULL, IDI_APPLICATION); | 
					
						
							|  |  |  |  | 	wcex.lpszClassName = L"Easy2DApp"; | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD>ͼ<EFBFBD><CDBC>
 | 
					
						
							|  |  |  |  | 	if (pIconID) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		wcex.hIcon = (HICON)::LoadImage( | 
					
						
							|  |  |  |  | 			GetModuleHandle(NULL), | 
					
						
							|  |  |  |  | 			pIconID, | 
					
						
							|  |  |  |  | 			IMAGE_ICON, | 
					
						
							|  |  |  |  | 			0, | 
					
						
							|  |  |  |  | 			0, | 
					
						
							|  |  |  |  | 			LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	RegisterClassEx(&wcex); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>Ϊ CreateWindow <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ȡϵͳ<CFB5><CDB3> DPI <20><>ʹ<EFBFBD><CAB9>
 | 
					
						
							|  |  |  |  | 	// <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	FLOAT dpiX, dpiY; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ǰ<EFBFBD><C7B0>ϵͳ DPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵҲ<D6B5><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	ERenderer::getID2D1Factory()->GetDesktopDpi(&dpiX, &dpiY); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	nWidth = static_cast<UINT>(ceil(nWidth * dpiX / 96.f)); | 
					
						
							|  |  |  |  | 	nHeight = static_cast<UINT>(ceil(nHeight * dpiY / 96.f)); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>Ļ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
 | 
					
						
							|  |  |  |  | 	UINT screenWidth = static_cast<UINT>(::GetSystemMetrics(SM_CXSCREEN)); | 
					
						
							|  |  |  |  | 	UINT screenHeight = static_cast<UINT>(::GetSystemMetrics(SM_CYSCREEN)); | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>ڴ<EFBFBD>С<EFBFBD>ȷֱ<C8B7><D6B1>ʴ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	WARN_IF(screenWidth < nWidth || screenHeight < nHeight, "The window is larger than screen!"); | 
					
						
							|  |  |  |  | 	// ȡ<><C8A1>Сֵ
 | 
					
						
							|  |  |  |  | 	nWidth = min(nWidth, screenWidth); | 
					
						
							|  |  |  |  | 	nHeight = min(nHeight, screenHeight); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	s_HWnd = CreateWindow( | 
					
						
							|  |  |  |  | 		L"Easy2DApp", | 
					
						
							|  |  |  |  | 		sTitle, | 
					
						
							| 
									
										
										
										
											2018-02-01 22:07:44 +08:00
										 |  |  |  | 		WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX, | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 		0, 0, nWidth, nHeight, | 
					
						
							|  |  |  |  | 		NULL, | 
					
						
							|  |  |  |  | 		NULL, | 
					
						
							|  |  |  |  | 		HINST_THISCOMPONENT, | 
					
						
							|  |  |  |  | 		NULL | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	HRESULT hr = s_HWnd ? S_OK : E_FAIL; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	if (SUCCEEDED(hr)) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뷨
 | 
					
						
							|  |  |  |  | 		EWindow::setTypewritingEnable(false); | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>̨
 | 
					
						
							|  |  |  |  | 		HWND hwnd = ::GetConsoleWindow(); | 
					
						
							|  |  |  |  | 		if (hwnd) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			// <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>̨<EFBFBD>رհ<D8B1>ť
 | 
					
						
							|  |  |  |  | 			HMENU hmenu = ::GetSystemMenu(hwnd, FALSE); | 
					
						
							|  |  |  |  | 			::RemoveMenu(hmenu, SC_CLOSE, MF_BYCOMMAND); | 
					
						
							|  |  |  |  | 			// Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>̨
 | 
					
						
							|  |  |  |  | 			if (!s_bShowConsole) | 
					
						
							|  |  |  |  | 			{ | 
					
						
							|  |  |  |  | 				::ShowWindow(hwnd, SW_HIDE); | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		UnregisterClass(L"Easy2DApp", HINST_THISCOMPONENT); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	if (FAILED(hr)) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		MessageBox(nullptr, L"Create Window Failed!", L"Error", MB_OK); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	return SUCCEEDED(hr); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::EWindow::__uninit() | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-04 21:24:27 +08:00
										 |  |  |  | 	// <20>رտ<D8B1><D5BF><EFBFBD>̨
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	if (::GetConsoleWindow()) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		::FreeConsole(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-02-04 21:24:27 +08:00
										 |  |  |  | 	// <20>رմ<D8B1><D5B4><EFBFBD>
 | 
					
						
							|  |  |  |  | 	DestroyWindow(s_HWnd); | 
					
						
							|  |  |  |  | 	s_HWnd = nullptr; | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::EWindow::__poll() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	static MSG msg; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		::TranslateMessage(&msg); | 
					
						
							|  |  |  |  | 		::DispatchMessage(&msg); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | float e2d::EWindow::getWidth() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return ERenderer::getRenderTarget()->GetSize().width; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | float e2d::EWindow::getHeight() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return ERenderer::getRenderTarget()->GetSize().height; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | e2d::ESize e2d::EWindow::getSize() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	D2D1_SIZE_F size = ERenderer::getRenderTarget()->GetSize(); | 
					
						
							|  |  |  |  | 	return ESize(size.width, size.height); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | HWND e2d::EWindow::getHWnd() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return s_HWnd; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::EWindow::setSize(UINT32 width, UINT32 height) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>Ļ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
 | 
					
						
							|  |  |  |  | 	int screenWidth = ::GetSystemMetrics(SM_CXSCREEN); | 
					
						
							|  |  |  |  | 	int screenHeight = ::GetSystemMetrics(SM_CYSCREEN); | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	tagRECT rcWindow; | 
					
						
							|  |  |  |  | 	::GetWindowRect(s_HWnd, &rcWindow); | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>С
 | 
					
						
							|  |  |  |  | 	tagRECT rcClient; | 
					
						
							|  |  |  |  | 	::GetClientRect(s_HWnd, &rcClient); | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>С
 | 
					
						
							|  |  |  |  | 	width += (rcWindow.right - rcWindow.left) - (rcClient.right - rcClient.left); | 
					
						
							|  |  |  |  | 	height += (rcWindow.bottom - rcWindow.top) - (rcClient.bottom - rcClient.top); | 
					
						
							|  |  |  |  | 	// <20>Ĵ<DEB8><C4B4>ڴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	::MoveWindow(s_HWnd, (screenWidth - width) / 2, (screenHeight - height) / 2, width, height, TRUE); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::EWindow::setTitle(const EString &title) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-01 09:38:25 +08:00
										 |  |  |  | 	::SetWindowText(s_HWnd, title); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | e2d::EString e2d::EWindow::getTitle() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	wchar_t wszTitle[MAX_PATH] = { 0 }; | 
					
						
							|  |  |  |  | 	::GetWindowText(s_HWnd, wszTitle, MAX_PATH); | 
					
						
							|  |  |  |  | 	return wszTitle; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::EWindow::showConsole(bool show /* = true */) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	s_bShowConsole = show; | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><D1B4>ڵĿ<DAB5><C4BF><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	HWND hwnd = ::GetConsoleWindow(); | 
					
						
							|  |  |  |  | 	// <20>رտ<D8B1><D5BF><EFBFBD>̨
 | 
					
						
							|  |  |  |  | 	if (show) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		if (hwnd) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			::ShowWindow(hwnd, SW_SHOWNORMAL); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			// <20><>ʾһ<CABE><D2BB><EFBFBD>¿<EFBFBD><C2BF><EFBFBD>̨
 | 
					
						
							|  |  |  |  | 			if (::AllocConsole()) | 
					
						
							|  |  |  |  | 			{ | 
					
						
							|  |  |  |  | 				hwnd = ::GetConsoleWindow(); | 
					
						
							|  |  |  |  | 				// <20>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 				FILE * stdoutStream, * stdinStream, * stderrStream; | 
					
						
							|  |  |  |  | 				freopen_s(&stdoutStream, "conout$", "w+t", stdout); | 
					
						
							|  |  |  |  | 				freopen_s(&stdinStream, "conin$", "r+t", stdin); | 
					
						
							| 
									
										
										
										
											2018-02-01 22:07:44 +08:00
										 |  |  |  | 				freopen_s(&stderrStream, "conout$", "w+t", stderr); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 				// <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>̨<EFBFBD>رհ<D8B1>ť
 | 
					
						
							|  |  |  |  | 				HMENU hmenu = ::GetSystemMenu(hwnd, FALSE); | 
					
						
							|  |  |  |  | 				::RemoveMenu(hmenu, SC_CLOSE, MF_BYCOMMAND); | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 			else | 
					
						
							|  |  |  |  | 			{ | 
					
						
							|  |  |  |  | 				MessageBox(nullptr, L"Alloc Console Failed!", L"Error", MB_OK); | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else  | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		if (hwnd) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			::ShowWindow(hwnd, SW_HIDE); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void e2d::EWindow::setTypewritingEnable(bool bEnable) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	static HIMC hImc = nullptr; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	if (bEnable) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		if (hImc != nullptr) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			::ImmAssociateContext(EWindow::getHWnd(), hImc); | 
					
						
							|  |  |  |  | 			hImc = nullptr; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		if (hImc == nullptr) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			hImc = ::ImmAssociateContext(EWindow::getHWnd(), nullptr); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | LRESULT e2d::EWindow::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	LRESULT result = 0; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	switch (message) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>С<EFBFBD>仯<EFBFBD><E4BBAF>Ϣ
 | 
					
						
							|  |  |  |  | 	case WM_SIZE: | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		UINT width = LOWORD(lParam); | 
					
						
							|  |  |  |  | 		UINT height = HIWORD(lParam); | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>һ<EFBFBD><D2BB> WM_SIZE <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ
 | 
					
						
							|  |  |  |  | 		// Ŀ<><C4BF><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>п<EFBFBD><D0BF>ܵ<EFBFBD>
 | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD> EndDraw ʱ<><CAB1><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		ERenderer::getRenderTarget()->Resize(D2D1::SizeU(width, height)); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	break; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>ʱ仯<CAB1><E4BBAF>Ϣ
 | 
					
						
							|  |  |  |  | 	case WM_DISPLAYCHANGE: | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		// <20>ػ<EFBFBD><D8BB>ͻ<EFBFBD><CDBB><EFBFBD>
 | 
					
						
							|  |  |  |  | 		InvalidateRect(hWnd, NULL, FALSE); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	result = 0; | 
					
						
							|  |  |  |  | 	break; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>ػ洰<D8BB><E6B4B0>
 | 
					
						
							|  |  |  |  | 	case WM_PAINT: | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		e2d::ERenderer::__render(); | 
					
						
							|  |  |  |  | 		ValidateRect(hWnd, NULL); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	result = 0; | 
					
						
							|  |  |  |  | 	break; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ڹر<DAB9><D8B1><EFBFBD>Ϣ
 | 
					
						
							|  |  |  |  | 	case WM_CLOSE: | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		e2d::EScene * pCurrentScene = e2d::ESceneManager::getCurrentScene(); | 
					
						
							|  |  |  |  | 		if (!pCurrentScene || pCurrentScene->onCloseWindow()) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			e2d::EGame::quit(); | 
					
						
							|  |  |  |  | 			DestroyWindow(hWnd); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	result = 0; | 
					
						
							|  |  |  |  | 	break; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	case WM_DESTROY: | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		PostQuitMessage(0); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	result = 1; | 
					
						
							|  |  |  |  | 	break; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	default: | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		result = DefWindowProc(hWnd, message, wParam, lParam); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	return result; | 
					
						
							|  |  |  |  | } |