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-28 19:17:15 +08:00
|
|
|
|
bool e2d::Window::__init(const String & sTitle, UINT32 nWidth, UINT32 nHeight, LPCTSTR pIconID /*= nullptr*/)
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-03-01 00:19:09 +08:00
|
|
|
|
if (!Window::__initMutex(sTitle))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// ע<>ᴰ<EFBFBD><E1B4B0><EFBFBD><EFBFBD>
|
2018-03-01 00:19:09 +08:00
|
|
|
|
WNDCLASSEX wcex = { 0 };
|
|
|
|
|
|
wcex.cbSize = sizeof(WNDCLASSEX);
|
2018-01-30 16:45:38 +08:00
|
|
|
|
wcex.style = CS_HREDRAW | CS_VREDRAW;
|
2018-02-07 16:37:12 +08:00
|
|
|
|
wcex.lpfnWndProc = Window::WndProc;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
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>
|
2018-02-27 21:07:43 +08:00
|
|
|
|
float dpiX, dpiY;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <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>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Renderer::getID2D1Factory()->GetDesktopDpi(&dpiX, &dpiY);
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
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>뷨
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Window::setTypewritingEnable(false);
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <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);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-03-01 00:19:09 +08:00
|
|
|
|
bool e2d::Window::__initMutex(const String & sTitle)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̻<EFBFBD><CCBB><EFBFBD><EFBFBD><EFBFBD>
|
2018-03-01 19:28:22 +08:00
|
|
|
|
HANDLE m_hMutex = ::CreateMutex(NULL, TRUE, L"Easy2DApp-" + sTitle);
|
2018-03-01 00:19:09 +08:00
|
|
|
|
|
|
|
|
|
|
if (m_hMutex == nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
WARN_IF(true, "CreateMutex Failed!");
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (::GetLastError() == ERROR_ALREADY_EXISTS)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
|
|
|
|
|
|
HWND hProgramWnd = ::FindWindow(L"Easy2DApp", sTitle);
|
|
|
|
|
|
if (hProgramWnd)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ״̬
|
|
|
|
|
|
WINDOWPLACEMENT wpm;
|
|
|
|
|
|
::GetWindowPlacement(hProgramWnd, &wpm);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>еij<D0B5><C4B3>ڻ<F2B4B0BF>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|
|
|
|
|
wpm.showCmd = SW_SHOW;
|
|
|
|
|
|
::SetWindowPlacement(hProgramWnd, &wpm);
|
|
|
|
|
|
::SetWindowPos(hProgramWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>رս<D8B1><D5BD>̻<EFBFBD><CCBB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
CloseHandle(m_hMutex);
|
|
|
|
|
|
m_hMutex = nullptr;
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Window::__uninit()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
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
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Window::__poll()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
static MSG msg;
|
|
|
|
|
|
|
|
|
|
|
|
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
|
|
|
|
|
{
|
|
|
|
|
|
::TranslateMessage(&msg);
|
|
|
|
|
|
::DispatchMessage(&msg);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-27 21:07:43 +08:00
|
|
|
|
double e2d::Window::getWidth()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
return Renderer::getRenderTarget()->GetSize().width;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-27 21:07:43 +08:00
|
|
|
|
double e2d::Window::getHeight()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
return Renderer::getRenderTarget()->GetSize().height;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
e2d::Size e2d::Window::getSize()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
D2D1_SIZE_F size = Renderer::getRenderTarget()->GetSize();
|
|
|
|
|
|
return Size(size.width, size.height);
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
HWND e2d::Window::getHWnd()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_HWnd;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Window::setSize(UINT32 width, UINT32 height)
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
// <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);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Window::setTitle(const String &title)
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
// <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
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
e2d::String e2d::Window::getTitle()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
wchar_t wszTitle[MAX_PATH] = { 0 };
|
|
|
|
|
|
::GetWindowText(s_HWnd, wszTitle, MAX_PATH);
|
|
|
|
|
|
return wszTitle;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Window::showConsole(bool show /* = true */)
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
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);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Window::setTypewritingEnable(bool bEnable)
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
static HIMC hImc = nullptr;
|
|
|
|
|
|
|
|
|
|
|
|
if (bEnable)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (hImc != nullptr)
|
|
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
::ImmAssociateContext(Window::getHWnd(), hImc);
|
2018-01-30 16:45:38 +08:00
|
|
|
|
hImc = nullptr;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (hImc == nullptr)
|
|
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
hImc = ::ImmAssociateContext(Window::getHWnd(), nullptr);
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
LRESULT e2d::Window::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
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>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Renderer::getRenderTarget()->Resize(D2D1::SizeU(width, height));
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
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:
|
|
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
e2d::Renderer::__render();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
ValidateRect(hWnd, NULL);
|
|
|
|
|
|
}
|
|
|
|
|
|
result = 0;
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ڹر<DAB9><D8B1><EFBFBD>Ϣ
|
|
|
|
|
|
case WM_CLOSE:
|
|
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
e2d::Scene * pCurrentScene = e2d::SceneManager::getCurrentScene();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
if (!pCurrentScene || pCurrentScene->onCloseWindow())
|
|
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
e2d::Game::quit();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
DestroyWindow(hWnd);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
result = 0;
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case WM_DESTROY:
|
|
|
|
|
|
{
|
|
|
|
|
|
PostQuitMessage(0);
|
|
|
|
|
|
}
|
|
|
|
|
|
result = 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
{
|
|
|
|
|
|
result = DefWindowProc(hWnd, message, wParam, lParam);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|