| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | #include "flutter_window.h"#include <optional>#include "flutter/generated_plugin_registrant.h"FlutterWindow::FlutterWindow(const flutter::DartProject& project)    : project_(project) {}FlutterWindow::~FlutterWindow() {}bool FlutterWindow::OnCreate() {  if (!Win32Window::OnCreate()) {    return false;  }  RECT frame = GetClientArea();  // The size here must match the window dimensions to avoid unnecessary surface  // creation / destruction in the startup path.  flutter_controller_ = std::make_unique<flutter::FlutterViewController>(      frame.right - frame.left, frame.bottom - frame.top, project_);  // Ensure that basic setup of the controller was successful.  if (!flutter_controller_->engine() || !flutter_controller_->view()) {    return false;  }  RegisterPlugins(flutter_controller_->engine());  SetChildContent(flutter_controller_->view()->GetNativeWindow());  return true;}void FlutterWindow::OnDestroy() {  if (flutter_controller_) {    flutter_controller_ = nullptr;  }  Win32Window::OnDestroy();}LRESULTFlutterWindow::MessageHandler(HWND hwnd, UINT const message,                              WPARAM const wparam,                              LPARAM const lparam) noexcept {  // Give Flutter, including plugins, an opportunity to handle window messages.  if (flutter_controller_) {    std::optional<LRESULT> result =        flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam,                                                      lparam);    if (result) {      return *result;    }  }  switch (message) {    case WM_FONTCHANGE:      flutter_controller_->engine()->ReloadSystemFonts();      break;  }  return Win32Window::MessageHandler(hwnd, message, wparam, lparam);}
 |