zoukankan      html  css  js  c++  java
  • Flutter开发桌面应用

    一、开发windows桌面应用的一些配置:(注意.cpp文件里哪怕是注释都不能有中文,否则会报错,目前没有找到解决办法)

    1.调整屏幕的大小:

    将windows/runner里的main.cpp文件:Win32Window::Size size(1280, 720);改成想要的值即可,如Win32Window::Size size(360, 640);

    2.启动后窗体居中:

    这个步骤有点复杂,也是改windows/runner的main.cpp文件,将这两个代码

    Win32Window::Point origin(1010);
    Win32Window::Size size(360640);

    改成:

     UINT windowWidth = 360, windowHeight = 640;
      Win32Window::Size size(windowWidth, windowHeight);
      UINT scrWidth, scrHeight, xShaft, yShaft;
      scrWidth = GetSystemMetrics(SM_CXFULLSCREEN);
      scrHeight = GetSystemMetrics(SM_CYFULLSCREEN);
      xShaft = (scrWidth - windowWidth) / 2;
      yShaft = (scrHeight - windowHeight) / 2;
      // origin is used for set window location
      Win32Window::Point origin(xShaft, yShaft);
     

    然后将runner/win32_window.cpp的CreateWindow(..)方法下面添加

    SetWindowPos(window, HWND_TOP, origin.xorigin.ysize.widthsize.height, SWP_NOSIZE);

    3.将窗体改成top窗口【类似截图pin在屏幕上的那种软件实现】

    在runner/win32_window.cpp里的CreateWindow(..)方法下面添加一行代码:

    SetWindowPos(window, HWND_TOPMOST, origin.x, origin.y, size.width, size.height, SWP_NOSIZE);【注意,和上面的居中的是同一个代码,只不过HWND_TOP改成HWND_TOPMOST】

    4.修改应用的图标可以修改runner/resources的app_icon.ico文件,注意改了后需要清理编译的临时文件【而且图标是要符合格式的图标文件】

    5.创建一个不可显示的程序【即后台程序,但是又不是控制台程序】:

    将CreateWindow里的 | WS_VISIBLE去掉【就是去掉WS_VISIBLE】,那么这个窗体程序就不显示了,也就变成了“后台程序”【不过似乎不实用】

    6.禁用最大化窗口按钮【标题栏里的】(win32_window.cpp文件)

    注意,在允许最大化窗体按钮的情况下,双击标题栏会最大化窗口,窗口可以拖动更改窗体大小,点击最大化按钮会最大化窗体;

    但是如果禁用了最大化按钮,则双击标题栏不会最大化,且也不能拖动窗体边缘来修改窗体大小,禁用最大化按钮方式为修改CreateWindow的WS_OVERLAPPEDWINDOW,改为:

    WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX

    7.如果要去掉标题栏,则可以在win32_window.cpp里的SetWindowLongPtr(..)方法下面添加:SetWindowLong(window, GWL_STYLE, WS_OVERLAPPED);

    8.dart代码可以通过io的exit(0);来退出窗体程序;

    9.如果不禁用最大化按钮,但是需要禁用双击标题栏最大化窗体,可以修改win32_window.cpp文件里的MessageHandler的switch里添加case是WM_NCLBUTTONDBLCLK: return 0;来实现“吃”掉双击标题栏的事件;

    10.不禁用最大化按钮的前提下,不能拖动窗口边缘来改变窗体大小,可以在win32_window.cpp文件里的MessageHandler的switch里添加case是:

    case WM_NCHITTEST:
          LRESULT res = DefWindowProc(hwnd, message, wparam, lparam);
          if (res == HTCAPTION || (res >= HTLEFT && res < HTBORDER)) {
            return HTCLIENT;
          }
          break;

    来实现;

    【还可以吃掉点击最大化按钮的事件,但是没有意义,还不如直接禁用,消息是WS_SYSCOMMAND然后再通过wparam判断是不是SC_MAXIMIZE来实现】

    11.待做:dart里动态更新标题,托盘功能;

  • 相关阅读:
    单例模式的四种方式
    创建者模式
    抽象工厂模式
    工厂方法模式
    【位运算符与逻辑运算符知识点】【二进制枚举子集】【just for 状压】
    【数学基础】【欧拉定理模板】【费马小定理】
    【练习赛补题】poj 3026 Borg Maze 【bfs+最小生成树】【坑~】
    【数学基础】【欧拉函数解析模板】【欧拉筛法实现求1~n】【求某个数字n】
    【 数学基础】【素数线性筛法--欧拉筛法模板】【普通筛法的优化】
    【练习赛2补题】poj 2325 Persistent Numbers 【高精度除法+贪心】
  • 原文地址:https://www.cnblogs.com/silentdoer/p/15041143.html
Copyright © 2011-2022 走看看