| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | #ifndef RUNNER_WIN32_WINDOW_H_#define RUNNER_WIN32_WINDOW_H_#include <windows.h>#include <functional>#include <memory>#include <string>// A class abstraction for a high DPI-aware Win32 Window. Intended to be// inherited from by classes that wish to specialize with custom// rendering and input handlingclass 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();  // Creates and shows a win32 window with |title| and position and size using  // |origin| and |size|. New windows are created on the default monitor. Window  // sizes are specified to the OS in physical pixels, hence to ensure a  // consistent size to will treat the width height passed in to this function  // as logical pixels and scale to appropriate for the default monitor. Returns  // true if the window was created successfully.  bool CreateAndShow(const std::wstring& title,                     const Point& origin,                     const Size& size);  // Release OS resources associated with window.  void Destroy();  // Inserts |content| into the window tree.  void SetChildContent(HWND content);  // Returns the backing Window handle to enable clients to set icon and other  // window properties. Returns nullptr if the window has been destroyed.  HWND GetHandle();  // If true, closing this window will quit the application.  void SetQuitOnClose(bool quit_on_close);  // Return a RECT representing the bounds of the current client area.  RECT GetClientArea(); protected:  // Processes and route salient window messages for mouse handling,  // size change and DPI. Delegates handling of these to member overloads that  // inheriting classes can handle.  virtual LRESULT MessageHandler(HWND window,                                 UINT const message,                                 WPARAM const wparam,                                 LPARAM const lparam) noexcept;  // Called when CreateAndShow is called, allowing subclass window-related  // setup. Subclasses should return false if setup fails.  virtual bool OnCreate();  // Called when Destroy is called.  virtual void OnDestroy(); private:  friend class WindowClassRegistrar;  // OS callback called by message pump. Handles the WM_NCCREATE message which  // is passed when the non-client area is being created and enables automatic  // non-client DPI scaling so that the non-client area automatically  // responsponds to changes in DPI. All other messages are handled by  // MessageHandler.  static LRESULT CALLBACK WndProc(HWND const window,                                  UINT const message,                                  WPARAM const wparam,                                  LPARAM const lparam) noexcept;  // Retrieves a class instance pointer for |window|  static Win32Window* GetThisFromHandle(HWND const window) noexcept;  bool quit_on_close_ = false;  // window handle for top level window.  HWND window_handle_ = nullptr;  // window handle for hosted content.  HWND child_content_ = nullptr;};#endif  // RUNNER_WIN32_WINDOW_H_
 |