#ifndef RUNNER_WIN32_WINDOW_H_ #define RUNNER_WIN32_WINDOW_H_ #include #include #include #include class Win32Window { public: struct Point { unsigned int x; unsigned int y; Point(unsigned int x, unsigned int y) : x(x), y(y) {} }; struct Size { unsigned int width; unsigned int height; Size(unsigned int width, unsigned int height) : width(width), height(height) {} }; Win32Window(); virtual ~Win32Window(); bool Create(const std::wstring& title, const Point& origin, const Size& size); bool Show(); void Destroy(); void SetChildContent(HWND content); HWND GetHandle(); void SetQuitOnClose(bool quit_on_close); RECT GetClientArea(); protected: virtual LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, LPARAM const lparam) noexcept; virtual bool OnCreate(); virtual void OnDestroy(); private: friend class WindowClassRegistrar; static LRESULT CALLBACK WndProc(HWND const window, UINT const message, WPARAM const wparam, LPARAM const lparam) noexcept; static Win32Window* GetThisFromHandle(HWND const window) noexcept; static void UpdateTheme(HWND const window); bool quit_on_close_ = false; HWND window_handle_ = nullptr; HWND child_content_ = nullptr; }; #endif