是否可以在全屏模式下运行Flutter Windows Desktop应用程序?

时间:2019-09-06 10:25:52

标签: flutter

我已经尝试过运行Windows Desktop应用程序,但是我无法隐藏标题栏以在全屏模式窗口中运行应用程序

5 个答案:

答案 0 :(得分:1)

遇到了同样的问题,我在这里分享我的解决方案。

我不是Win32开发人员,但我设法通过这种方式制作了基本的全屏显示。

此代码适用于我的Flutter 1.21.0-10.0.pre.114版本,希望对您也有用。

我的解决方案受此启发:https://stackoverflow.com/a/2416613/14093885

您必须编辑./windows/runner/main.cpp

在这些语句之间的第30行附近插入以下代码:

window.SetQuitOnClose(true);

//Insert Code Here

run_loop.Run();

要插入的代码:

WND hwnd = window.GetHandle();

auto windowHDC = GetDC(hwnd);
int fullscreenWidth  = GetDeviceCaps(windowHDC, DESKTOPHORZRES);
int fullscreenHeight = GetDeviceCaps(windowHDC, DESKTOPVERTRES);
int colourBits       = GetDeviceCaps(windowHDC, BITSPIXEL);
int refreshRate      = GetDeviceCaps(windowHDC, VREFRESH);

DEVMODE fullscreenSettings;
bool isChangeSuccessful;

EnumDisplaySettings(NULL, 0, &fullscreenSettings);
fullscreenSettings.dmPelsWidth        = fullscreenWidth;
fullscreenSettings.dmPelsHeight       = fullscreenHeight;
fullscreenSettings.dmBitsPerPel       = colourBits;
fullscreenSettings.dmDisplayFrequency = refreshRate;
fullscreenSettings.dmFields           = DM_PELSWIDTH |
                                      DM_PELSHEIGHT |
                                      DM_BITSPERPEL |
                                      DM_DISPLAYFREQUENCY;

SetWindowLongPtr(hwnd, GWL_EXSTYLE, WS_EX_APPWINDOW | WS_EX_TOPMOST);
SetWindowLongPtr(hwnd, GWL_STYLE, WS_POPUP | WS_VISIBLE);
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, fullscreenWidth, fullscreenHeight, SWP_SHOWWINDOW);
isChangeSuccessful = ChangeDisplaySettings(&fullscreenSettings, CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL;
ShowWindow(hwnd, SW_MAXIMIZE);

答案 1 :(得分:0)

尚无对全屏模式的内置支持,因此尚无可调用的Dart API进入全屏模式。如果您熟悉Win32编程,则可以直接更改Runner代码以使窗口全屏显示,也可以编写一个插件来完成该操作。

答案 2 :(得分:0)

答案 3 :(得分:0)

我认为它现在必须更改 cpp 文件。

win32_window.cpp 将“WS_OVERLAPPEDWINDOW”替换为“WS_POPUP | WS_MAXIMIZE”

/* WS_POPUP : 没有标题栏 WS_MAXIMIZE : 全屏 */

答案 4 :(得分:0)

这是获得更多帮助的链接window Size 我已经这样做了 我从这里得到窗口大小: https://docs.microsoft.com/en-us/windows/win32/winmsg/window-styles

在窗口大小的颤振窗口应用程序中: 去 windows/runner/win32_window.cpp

  • 用于没有标题栏的全屏窗口 WS_POPUP | WS_VISIBLE
  • 用于带标题栏的全屏窗口(没有任何图标,例如 关闭,最小化,恢复,标志)WS_MAXIMIZE | WS_VISIBLE
  • 用于小窗口或自定义窗口 WS_OVERLAPPEDWINDOW | WS_VISIBLE
  • 用于带有标题栏的全屏窗口 WS_OVERLAPPEDWINDOW | WS_MAXIMIZE | WS_VISIBLE

在 win32_window.cpp 文件中找到下面给出的代码,并根据需要进行更改。

HWND window = CreateWindow(
  window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_MAXIMIZE | WS_VISIBLE,
  Scale(origin.x, scale_factor), Scale(origin.y, scale_factor),
  Scale(size.width, scale_factor), Scale(size.height, scale_factor),
  nullptr, nullptr, GetModuleHandle(nullptr), this);