| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | #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);  // Dispatches link if any.  // This method enables our app to be with a single instance too.  bool SendAppLinkToInstance(const std::wstring &title);  // 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_
 |