Flutter windows程序窗口布满工作区
Posted lxhjh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter windows程序窗口布满工作区相关的知识,希望对你有一定的参考价值。
Flutter 改变Windows窗口大小有一个比较多的插件,很多都是在main.dart中注入,这样势必影响多平台应用。至少,我们也应该遵守单一职责原理,既然是windows的问题,那么就在windows中进行解决。
通过阅读Flutter中windows平台的代码,调整程序窗口大小的比较简单,只需要两步:
第一步,读取屏幕工作区,然后传值给窗口创建函数
在main.cpp中,找到下列代码
FlutterWindow window(project);
Win32Window::Point origin(10, 10);
Win32Window::Size size(1280, 720);
if (!window.CreateAndShow(L"packing", origin, size))
return EXIT_FAILURE;
window.SetQuitOnClose(true);
修改为
FlutterWindow window(project);
//Win32Window::Point origin(10, 10);
//Win32Window::Size size(1280, 720);
RECT rt;
SystemParametersInfo(SPI_GETWORKAREA,0,(PVOID)&rt,0);
Win32Window::Point origin(rt.left, rt.top);
Win32Window::Size size(rt.right-rt.left, rt.bottom-rt.top);
if (!window.CreateAndShow(L"packing", origin, size))
return EXIT_FAILURE;
window.SetQuitOnClose(true);
SystemParametersInfo(SPI_GETWORKAREA,0,(PVOID)&rt,0);
读取屏幕的工作区。
第二步,修改窗口创建函数(CreateAndShow),不使用Scale进行分别率转换。
在win32_window.cpp中,找到下列代码
bool Win32Window::CreateAndShow(const std::wstring& title,
const Point& origin,
const Size& size)
Destroy();
const wchar_t* window_class =
WindowClassRegistrar::GetInstance()->GetWindowClass();
const POINT target_point = static_cast<LONG>(origin.x),
static_cast<LONG>(origin.y);
HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST);
UINT dpi = FlutterDesktopGetDpiForMonitor(monitor);
double scale_factor = dpi / 96.0;
HWND window = CreateWindow(
window_class, title.c_str(), WS_OVERLAPPEDWINDOW | 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);
if (!window)
return false;
return OnCreate();
修改为
bool Win32Window::CreateAndShow(const std::wstring& title,
const Point& origin,
const Size& size)
Destroy();
const wchar_t* window_class =
WindowClassRegistrar::GetInstance()->GetWindowClass();
HWND window = CreateWindow(
window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE,
origin.x, origin.y,
size.width,size.height,
nullptr, nullptr, GetModuleHandle(nullptr), this);
if (!window)
return false;
return OnCreate();
以上是关于Flutter windows程序窗口布满工作区的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter 移动端、Web 端和窗口中添加条件导入?
Flutter Desktop:如何隐藏窗口(并使进程保持活动状态)?