#pragma once #include "../win_pre_config.hpp" #include "cru/platform/native/ui_application.hpp" #include "platform_id.hpp" #include "cursor.hpp" #include namespace cru::platform::native::win { class GodWindow; class TimerManager; class WindowManager; class WinUiApplication : public UiApplication { friend UiApplication* UiApplication::CreateInstance(); public: static WinUiApplication* GetInstance(); private: explicit WinUiApplication(HINSTANCE h_instance); public: WinUiApplication(const WinUiApplication&) = delete; WinUiApplication(WinUiApplication&&) = delete; WinUiApplication& operator=(const WinUiApplication&) = delete; WinUiApplication& operator=(WinUiApplication&&) = delete; ~WinUiApplication() override; CRU_PLATFORMID_IMPLEMENT_WIN public: int Run() override; void Quit(int quit_code) override; void AddOnQuitHandler(const std::function& handler) override; void InvokeLater(const std::function& action) override; unsigned long SetTimeout(std::chrono::milliseconds milliseconds, const std::function& action) override; unsigned long SetInterval(std::chrono::milliseconds milliseconds, const std::function& action) override; void CancelTimer(unsigned long id) override; std::vector GetAllWindow() override; INativeWindow* CreateWindow(INativeWindow* parent) override; WinCursorManager* GetCursorManager() override; bool IsAutoDelete() const { return auto_delete_; } void SetAutoDelete(bool value) { auto_delete_ = value; } HINSTANCE GetInstanceHandle() const { return h_instance_; } GodWindow* GetGodWindow() const { return god_window_.get(); } TimerManager* GetTimerManager() const { return timer_manager_.get(); } WindowManager* GetWindowManager() const { return window_manager_.get(); } private: bool auto_delete_ = false; HINSTANCE h_instance_; std::shared_ptr god_window_; std::shared_ptr timer_manager_; std::shared_ptr window_manager_; std::unique_ptr cursor_manager_; std::vector> quit_handlers_; }; } // namespace cru::platform::native::win