// // Created by yangbin on 2021/10/20. // #ifndef _WEBVIEW_WINDOW_WEBVIEW_WINDOW_H_ #define _WEBVIEW_WINDOW_WEBVIEW_WINDOW_H_ #include #include #include #include #include #include #include #include #include #include "wil/com.h" #include "WebView2.h" #include "flutter_view.h" #include "web_view.h" class WebviewWindow { public: using MethodChannelPtr = std::shared_ptr>; WebviewWindow(MethodChannelPtr method_channel, int64_t window_id, int title_bar_height, std::function on_close_callback); virtual ~WebviewWindow(); using CreateCallback = std::function; void CreateAndShow(const std::wstring &title, int height, int width, const std::wstring &userDataFolder, CreateCallback callback); // 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 window, UINT message, WPARAM wparam, LPARAM lparam) noexcept; void SetBrightness(int brightness); [[nodiscard]] const std::unique_ptr &GetWebView() const { return web_view_; } private: // Retrieves a class instance pointer for |window| static WebviewWindow *GetThisFromHandle(HWND window) noexcept; MethodChannelPtr method_channel_; wil::unique_hwnd hwnd_; int64_t window_id_; std::function on_close_callback_; std::unique_ptr flutter_action_bar_; std::unique_ptr web_view_; int last_title_bar_width_ = 0; bool destroyed_ = false; int title_bar_height_; // 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. LRESULT MessageHandler(HWND window, UINT message, WPARAM wparam, LPARAM lparam) noexcept; LRESULT HandleNCHitTest(int x, int y) noexcept; void SetBorderless() noexcept; }; #endif //_WEBVIEW_WINDOW_WEBVIEW_WINDOW_H_