12DWORD HostWindowDialog::GetWindowStyleForDialog(
13 std::optional<HWND>
const& owner_window,
15 DWORD window_style = WS_OVERLAPPED | WS_CAPTION;
17 window_style |= WS_THICKFRAME;
21 window_style |= WS_MINIMIZEBOX | WS_SYSMENU;
26DWORD HostWindowDialog::GetExtendedWindowStyleForDialog(
27 std::optional<HWND>
const& owner_window) {
28 DWORD extended_window_style = WS_EX_DLGMODALFRAME;
32 if (GetWindowLongPtr(*owner_window, GWL_EXSTYLE) & WS_EX_TOOLWINDOW) {
33 extended_window_style |= WS_EX_TOOLWINDOW;
36 return extended_window_style;
44 std::optional<HWND>
const& owner_window,
45 bool sized_to_content,
51 .window_style = GetWindowStyleForDialog(owner_window, resizable),
52 .extended_window_style = GetExtendedWindowStyleForDialog(owner_window),
53 .box_constraints = constraints,
54 .initial_window_rect =
55 GetInitialRect(
engine, preferred_size, constraints, owner_window,
56 sized_to_content, resizable),
58 .owner_window = owner_window,
60 .is_sized_to_content = sized_to_content,
65 if (HMENU hMenu = GetSystemMenu(hwnd, FALSE)) {
66 EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
78 std::optional<HWND>
const& owner_window,
79 bool sized_to_content,
81 auto const window_style = GetWindowStyleForDialog(owner_window, resizable);
82 auto const extended_window_style =
83 GetExtendedWindowStyleForDialog(owner_window);
87 if (sized_to_content) {
97 std::optional<Size>
const window_size =
99 *
engine->windows_proc_table(),
Size(client_width, client_height),
101 extended_window_style, owner_window);
103 Point window_origin = {CW_USEDEFAULT, CW_USEDEFAULT};
104 if (!sized_to_content && owner_window && window_size.has_value()) {
107 DwmGetWindowAttribute(*owner_window, DWMWA_EXTENDED_FRAME_BOUNDS, &frame,
109 window_origin = {(frame.left + frame.right - window_size->width()) * 0.5,
110 (frame.top + frame.bottom - window_size->height()) * 0.5};
113 return {window_origin,
114 window_size ? *window_size :
Size{CW_USEDEFAULT, CW_USEDEFAULT}};
134 if (
auto const result =
140 if (LOWORD(wparam) != WA_INACTIVE) {
143 if (!IsWindowEnabled(hwnd)) {
146 SetActiveWindow(enabled_descendant->GetWindowHandle());
159void HostWindowDialog::UpdateModalState() {
171 std::optional<FlutterEngineDisplayId> display_id) {}
WindowProcDelegateManager * window_proc_delegate_manager()
bool GetFullscreen() const override
void SetFullscreen(bool fullscreen, std::optional< FlutterEngineDisplayId > display_id) override
LRESULT HandleMessage(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) override
HostWindowDialog(WindowManager *window_manager, FlutterWindowsEngine *engine, const WindowSizeRequest &preferred_size, const BoxConstraints &constraints, LPCWSTR title, std::optional< HWND > const &owner_window, bool sized_to_content, bool resizable)
void InitializeFlutterView(HostWindowInitializationParams const ¶ms)
HostWindow * GetOwnerWindow() const
void UpdateModalStateLayer()
static void FocusRootViewOf(HostWindow *window)
FlutterWindowsEngine * engine_
virtual LRESULT HandleMessage(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
static std::optional< Size > GetWindowSizeForClientSize(WindowsProcTable const &win32, Size const &client_size, std::optional< Size > smallest, std::optional< Size > biggest, DWORD window_style, DWORD extended_window_style, std::optional< HWND > const &owner_hwnd)
HostWindow * FindFirstEnabledDescendant() const
FlutterWindowsViewSizingDelegate * AsSizingDelegate()
std::optional< LRESULT > OnTopLevelWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) const
#define FML_CHECK(condition)
WindowArchetype archetype
double preferred_view_height
double preferred_view_width
bool has_preferred_view_size