diff --git a/.gitignore b/.gitignore index d987eb75..3420d451 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ ipch/ *.user *.lnk -.vs \ No newline at end of file +.vs +.vscode \ No newline at end of file diff --git a/core/e2dmodule.h b/core/e2dmodule.h index cddfed9b..d3811f6d 100644 --- a/core/e2dmodule.h +++ b/core/e2dmodule.h @@ -37,6 +37,9 @@ namespace e2d // 销毁窗体实例 static void DestroyInstance(); + // 获取屏幕大小 + static Size GetScreenSize(); + // 获取窗体标题 const String& GetTitle() const; @@ -146,6 +149,33 @@ namespace e2d // 销毁实例 static void DestroyInstance(); + // 获取 ID2D1Factory 对象 + static ID2D1Factory * GetFactory(); + + // 获取 IWICImagingFactory 对象 + static IWICImagingFactory * GetImagingFactory(); + + // 获取 IDWriteFactory 对象 + static IDWriteFactory * GetWriteFactory(); + + // 获取 Miter 样式的 ID2D1StrokeStyle + static ID2D1StrokeStyle * GetMiterStrokeStyle(); + + // 获取 Bevel 样式的 ID2D1StrokeStyle + static ID2D1StrokeStyle * GetBevelStrokeStyle(); + + // 获取 Round 样式的 ID2D1StrokeStyle + static ID2D1StrokeStyle * GetRoundStrokeStyle(); + + // 获取文字渲染器 + E2DTextRenderer * GetTextRenderer(); + + // 获取 ID2D1HwndRenderTarget 对象 + ID2D1HwndRenderTarget * GetRenderTarget(); + + // 获取 ID2D1SolidColorBrush 对象 + ID2D1SolidColorBrush * GetSolidBrush(); + // 获取背景色 Color GetBackgroundColor(); @@ -166,33 +196,6 @@ namespace e2d // 结束渲染 void EndDraw(); - // 获取文字渲染器 - E2DTextRenderer * GetTextRenderer(); - - // 获取 ID2D1HwndRenderTarget 对象 - ID2D1HwndRenderTarget * GetRenderTarget(); - - // 获取 ID2D1SolidColorBrush 对象 - ID2D1SolidColorBrush * GetSolidBrush(); - - // 获取 ID2D1Factory 对象 - static ID2D1Factory * GetFactory(); - - // 获取 IWICImagingFactory 对象 - static IWICImagingFactory * GetImagingFactory(); - - // 获取 IDWriteFactory 对象 - static IDWriteFactory * GetWriteFactory(); - - // 获取 Miter 样式的 ID2D1StrokeStyle - static ID2D1StrokeStyle * GetMiterStrokeStyle(); - - // 获取 Bevel 样式的 ID2D1StrokeStyle - static ID2D1StrokeStyle * GetBevelStrokeStyle(); - - // 获取 Round 样式的 ID2D1StrokeStyle - static ID2D1StrokeStyle * GetRoundStrokeStyle(); - protected: Renderer(); diff --git a/core/modules/Window.cpp b/core/modules/Window.cpp index 71d32ef0..cb3b58a8 100644 --- a/core/modules/Window.cpp +++ b/core/modules/Window.cpp @@ -26,6 +26,17 @@ void e2d::Window::DestroyInstance() } } +e2d::Size e2d::Window::GetScreenSize() +{ + int screen_width = ::GetSystemMetrics(SM_CXSCREEN); + int screen_height = ::GetSystemMetrics(SM_CYSCREEN); + Size screen_size( + static_cast(screen_width), + static_cast(screen_height) + ); + return std::move(screen_size); +} + e2d::Window::Window() : hWnd_(nullptr) , width_(640) @@ -42,11 +53,9 @@ e2d::Window::Window() e2d::Window::~Window() { - // 关闭控制台 if (::GetConsoleWindow()) ::FreeConsole(); - // 关闭窗口 if (hWnd_) ::DestroyWindow(hWnd_); @@ -74,8 +83,8 @@ e2d::Rect e2d::Window::Locate(int width, int height) { Rect result; RECT wRECT = { 0, 0, LONG(ceil(width * dpi_ / 96.f)), LONG(ceil(height * dpi_ / 96.f)) }; - int maxWidth = ::GetSystemMetrics(SM_CXSCREEN); - int maxHeight = ::GetSystemMetrics(SM_CYSCREEN); + int max_width = ::GetSystemMetrics(SM_CXSCREEN); + int max_height = ::GetSystemMetrics(SM_CYSCREEN); // 计算合适的窗口大小 ::AdjustWindowRectEx(&wRECT, WINDOW_STYLE, FALSE, NULL); @@ -83,11 +92,11 @@ e2d::Rect e2d::Window::Locate(int width, int height) height = static_cast(wRECT.bottom - wRECT.top); // 当输入的窗口大小比分辨率大时,给出警告 - WARN_IF(maxWidth < width || maxHeight < height, "The window Is larger than screen!"); - width = std::min(width, maxWidth); - height = std::min(height, maxHeight); + WARN_IF(max_width < width || max_height < height, "The window Is larger than screen!"); + width = std::min(width, max_width); + height = std::min(height, max_height); - float x = float((maxWidth - width) / 2), y = float((maxHeight - height) / 2); + float x = float((max_width - width) / 2), y = float((max_height - height) / 2); return std::move(Rect(x, y, float(width), float(height))); } @@ -448,10 +457,10 @@ LRESULT e2d::Window::WndProc(HWND hWnd, UINT msg, WPARAM w_param, LPARAM l_param // 如果程序接收到一个 WM_SIZE 消息,这个方法将调整渲染 // 目标适当。它可能会调用失败,但是这里可以忽略有可能的 // 错误,因为这个错误将在下一次调用 EndDraw 时产生 - auto pRT = Renderer::GetInstance()->GetRenderTarget(); - if (pRT) + auto render_target = Renderer::GetInstance()->GetRenderTarget(); + if (render_target) { - pRT->Resize(D2D1::SizeU(width, height)); + render_target->Resize(D2D1::SizeU(width, height)); } } break; @@ -467,7 +476,7 @@ LRESULT e2d::Window::WndProc(HWND hWnd, UINT msg, WPARAM w_param, LPARAM l_param case WM_DISPLAYCHANGE: { // 重绘客户区 - InvalidateRect(hWnd, nullptr, FALSE); + ::InvalidateRect(hWnd, nullptr, FALSE); } result = 0; hasHandled = true; @@ -477,7 +486,7 @@ LRESULT e2d::Window::WndProc(HWND hWnd, UINT msg, WPARAM w_param, LPARAM l_param case WM_PAINT: { Game::GetInstance()->DrawScene(); - ValidateRect(hWnd, nullptr); + ::ValidateRect(hWnd, nullptr); } result = 0; hasHandled = true; @@ -500,7 +509,7 @@ LRESULT e2d::Window::WndProc(HWND hWnd, UINT msg, WPARAM w_param, LPARAM l_param // 窗口销毁消息 case WM_DESTROY: { - PostQuitMessage(0); + ::PostQuitMessage(0); } result = 1; hasHandled = true; @@ -510,7 +519,7 @@ LRESULT e2d::Window::WndProc(HWND hWnd, UINT msg, WPARAM w_param, LPARAM l_param if (!hasHandled) { - result = DefWindowProc(hWnd, msg, w_param, l_param); + result = ::DefWindowProc(hWnd, msg, w_param, l_param); } } return result;