diff options
| author | Yuqian Yang <crupest@crupest.life> | 2025-11-16 14:49:46 +0800 |
|---|---|---|
| committer | Yuqian Yang <crupest@crupest.life> | 2025-11-16 14:49:46 +0800 |
| commit | c350346c41cb779413389f26c5c8f4e9bd2a8141 (patch) | |
| tree | 2bc976b3d6724f9665cab64a4d5f355d67b03e6f /src/platform/gui/win/Window.cpp | |
| parent | 9feb6a1611a86b90a02b5bfe2b1d4c8189650491 (diff) | |
| download | cru-c350346c41cb779413389f26c5c8f4e9bd2a8141.tar.gz cru-c350346c41cb779413389f26c5c8f4e9bd2a8141.tar.bz2 cru-c350346c41cb779413389f26c5c8f4e9bd2a8141.zip | |
Cleanup Win codes.
Diffstat (limited to 'src/platform/gui/win/Window.cpp')
| -rw-r--r-- | src/platform/gui/win/Window.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/platform/gui/win/Window.cpp b/src/platform/gui/win/Window.cpp index af308768..be834a25 100644 --- a/src/platform/gui/win/Window.cpp +++ b/src/platform/gui/win/Window.cpp @@ -1,6 +1,5 @@ #include "cru/platform/gui/win/Window.h" -#include "WindowManager.h" #include "cru/base/StringUtil.h" #include "cru/base/log/Logger.h" #include "cru/platform/graphics/NullPainter.h" @@ -16,6 +15,7 @@ #include <windowsx.h> #include <winuser.h> +#include <algorithm> #include <memory> namespace cru::platform::gui::win { @@ -68,6 +68,7 @@ Rect CalcClientRectFromWindow(const Rect& rect, WindowStyleFlag style_flag, WinNativeWindow::WinNativeWindow(WinUiApplication* application) : application_(application) { + application->RegisterWindow(this); input_method_context_ = std::make_unique<WinInputMethodContext>(this); } @@ -75,6 +76,7 @@ WinNativeWindow::~WinNativeWindow() { Close(); } void WinNativeWindow::Close() { if (hwnd_) ::DestroyWindow(hwnd_); + application_->UnregisterWindow(this); } void WinNativeWindow::SetParent(INativeWindow* parent) { @@ -459,8 +461,7 @@ RECT WinNativeWindow::GetClientRectPixel() { } void WinNativeWindow::RecreateWindow() { - const auto window_manager = application_->GetWindowManager(); - auto window_class = window_manager->GetGeneralWindowClass(); + auto window_class = application_->GetGeneralWindowClass(); hwnd_ = CreateWindowExW( 0, window_class->GetName(), L"", CalcWindowStyle(style_flag_), @@ -477,7 +478,7 @@ void WinNativeWindow::RecreateWindow() { dpi_ = static_cast<float>(dpi); CRU_LOG_TAG_DEBUG("Dpi of window is {}.", dpi_); - window_manager->RegisterWindow(hwnd_, this); + application_->RegisterWindow(this); SetCursor(application_->GetCursorManager()->GetSystemCursor( cru::platform::gui::SystemCursorType::Arrow)); @@ -497,8 +498,16 @@ void WinNativeWindow::OnCreateInternal() { create_event_.Raise(nullptr); } void WinNativeWindow::OnDestroyInternal() { destroy_event_.Raise(nullptr); - application_->GetWindowManager()->UnregisterWindow(hwnd_); + application_->UnregisterWindow(this); hwnd_ = nullptr; + + if (application_->IsQuitOnAllWindowClosed() && + std::ranges::all_of(application_->GetAllWinWindow(), + [](WinNativeWindow* window) { + return window->GetWindowHandle() == nullptr; + })) { + application_->RequestQuit(0); + } } void WinNativeWindow::OnPaintInternal() { |
