V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zxCoder
V2EX  ›  问与答

请教个关于桌面应用开发的问题

  •  
  •   zxCoder · 2022-03-31 09:30:43 +08:00 · 4319 次点击
    这是一个创建于 1003 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在 windows 原生桌面开发能做到 win11 类似的界面吗?需要自己写还是说原生开发就自带了那些组件?

    第 1 条附言  ·  2022-03-31 14:57:41 +08:00

    准备先试试wpf和electron

    electron是js生态的,确实比较强大,主要是包太大了,估计整完一个安装包得200+M,安装完得500+M,怕是把用户给吓跑了

    WPF试了下helloworld,打包成单文件只有150k大小,用户再单独下载一个.net6 runtime,差不多8M多,安装完就能跑了,感觉还不错?虽然要手动安装runtime可能有些人也不喜欢,见仁见智吧

    WPF的问题是,我现在还搞不清楚windows 桌面开发的一些名词,win form, WPF, WinUI,MAUI,Avalonia,xamarin 等等,整迷糊了

    第 2 条附言  ·  2022-03-31 15:17:10 +08:00

    还漏了个Blazor,太多名词了。。。。

    第 3 条附言  ·  2022-04-01 09:30:07 +08:00

    有大哥知道这种算是什么框架吗?

    https://github.com/NetDimension/NanUI

    我在找ui 控件时发现的,感觉像是winform套了个浏览器?那这种应用的体验和原生相比怎么样呢?

    38 条回复    2022-04-01 16:13:18 +08:00
    3dwelcome
        1
    3dwelcome  
       2022-03-31 09:36:48 +08:00
    现在 windows 原生基本上很少用 C++了,全部都是 C#。

    B 站有教程,好像写到后面,组件堆砌还是很复杂。除非你程序就那么几个按钮。

    试一下 electron 吧,那是真的省心省力。
    ysc3839
        2
    ysc3839  
       2022-03-31 09:49:47 +08:00 via Android
    如果你说的是 Fluent Design 那种,那可以做到,直接用 Xaml Island + WinUI 2 就行,组件都是 XAML 和 WinUI 提供的。
    zxCoder
        3
    zxCoder  
    OP
       2022-03-31 10:03:07 +08:00
    @3dwelcome js 水平也是半桶水...,electron 试过好像配置挺复杂的,而且打包出来很大
    nicevar
        4
    nicevar  
       2022-03-31 10:17:26 +08:00
    原生的运行组件应该有版本要求的,win10 某个版本以上,如果做的应用不是很重要,可以用 Electron ,打出来的包确实比较大,前阵子给客户做了一个打包出来 400 多 M ,用 Qt 的话要不了 50M 。
    3dwelcome
        5
    3dwelcome  
       2022-03-31 10:18:42 +08:00
    @zxCoder 个人非常不倾向于原生直接开发。

    原因是现在 GUI 跨平台解决方案,比起以前成熟不少,选择也多。比如 QT 之类。

    就算原生开发,组件复杂后代码量也不少。普通人 JS 写个 VUE 组件,再怎么也比 C#里写要快。
    zxCoder
        6
    zxCoder  
    OP
       2022-03-31 10:28:17 +08:00
    @3dwelcome 有道理,先用 electron 试试
    zxCoder
        7
    zxCoder  
    OP
       2022-03-31 11:25:17 +08:00   ❤️ 1
    @3dwelcome 试了不到一个小时,就卡住了 hhh ,按官网的打包教程就一直报错,搜到了 github 和 statckoverflow 上好几个为解决的 issue (
    shawnsh
        8
    shawnsh  
       2022-03-31 11:33:15 +08:00 via Android
    @3dwelcome 原生不原生开发是看具体项目的,别以为跨平台是万能的,里面坑可不少。项目灵活度还是应该考虑的,跨平台灵活度太低,适应范围有限
    Chad0000
        9
    Chad0000  
       2022-03-31 11:38:16 +08:00
    能固定 Windows 这个环境的话,直接就上 WPF 了。
    ysc3839
        10
    ysc3839  
       2022-03-31 12:01:14 +08:00   ❤️ 1
    怀疑是 X-Y Problem coolshell.cn/articles/10804.html
    建议楼主说一下原始需求
    3dwelcome
        11
    3dwelcome  
       2022-03-31 12:03:49 +08:00
    @zxCoder 我就把 electron 当成一个 webview 来用的,相对来说都比较顺利。
    singerll
        12
    singerll  
       2022-03-31 12:04:58 +08:00 via Android   ❤️ 2
    electron 是真的垃圾,总有一种卡顿的感觉。这种桌面应用不到万不得已我从来不装。

    别跟我说是你不会优化,你看 vscode 都多好啥的,这就跟我说高中学历不行你非要拿比尔盖兹给我举例子一样,没有意义。
    maichael
        13
    maichael  
       2022-03-31 12:18:58 +08:00
    没有跨平台需求强上 Electron 就是给自己找麻烦。
    3dwelcome
        14
    3dwelcome  
       2022-03-31 12:24:07 +08:00
    @singerll electron 不垃圾的,就是一个 chrome 浏览器内核+nodejs 的合体。

    不卡,可以用 wasm 替代 js 来运行逻辑。
    不顿,可以用 websocket 长连接替代传统 http restapi 。

    要说唯一的缺点,那可能确实体积有点大。
    zxCoder
        15
    zxCoder  
    OP
       2022-03-31 12:39:53 +08:00
    @ysc3839 啊 原始需求就是要做一个 windows 桌面应用(也会考虑跨平台,但不是最急需的),然后很喜欢 win11 的 ui 风格,就不知道现在 windows 的原生开发是不是直接用自带的组件就是那个样子。

    如果需要自己写样式或者用第三方 ui 库就有点麻烦了,不如前端的生态丰富
    ysc3839
        16
    ysc3839  
       2022-03-31 12:42:07 +08:00 via Android
    @zxCoder 一定要原生(WinUI)且跨平台的话大概只能使用 React Native 。建议考虑清楚跨平台重要还是原生风格重要。
    leyviw
        17
    leyviw  
       2022-03-31 12:47:44 +08:00 via iPhone
    Electron 或 cef
    singerll
        18
    singerll  
       2022-03-31 13:07:54 +08:00   ❤️ 2
    @3dwelcome 我并没有说 electron 技术垃圾,我说的是用户体验垃圾,注意是用户体验不是开发者体验。

    什么 wasm 、websocket 的再快,也需要网络加载时间,跟原生 ui 加载根本不一个等级。

    况且他用啥技术我根本不关心,我是以一个普通用户的角度来评价 electron 的桌面应用,目前为止用的 electron 写的应用,根本就没见过一个不卡顿的,就连优化最好的 vscode ,天生都有一种卡顿的感觉。

    至于体积大,确实是缺点,但肯定不是唯一的缺点。
    MakHoCheung
        19
    MakHoCheung  
       2022-03-31 13:26:16 +08:00
    @zxCoder 现在最新的不是 Windows SDK + WinUI3 吗,还有即将到来的可以跨平台的 MAUI ,想到用 Electron 为啥不用 Compose for Desktop
    zxCoder
        20
    zxCoder  
    OP
       2022-03-31 13:27:20 +08:00   ❤️ 2
    @3dwelcome 换了个第三方的打包工具总算成了,弄了个 helloworld ,安装包 120+M ,安装完 350+M 哈哈哈确实够大的
    icyalala
        21
    icyalala  
       2022-03-31 13:32:10 +08:00
    原生现在无非就是 WPF 、WinForm 、QT ,你想要的基础组件都有。
    Electron 的问题是:它只对开发者友好,但不是所有开发者都能达到 VSCode 团队的水平,因此它对用户不友好。
    wzwb
        22
    wzwb  
       2022-03-31 14:03:03 +08:00 via Android
    可以试试 Tauri ,比 Electron 小很多
    woxihejinghao
        23
    woxihejinghao  
       2022-03-31 14:07:06 +08:00
    建议了这么多。为啥没有建议 flutter 的
    lower
        24
    lower  
       2022-03-31 14:12:23 +08:00
    webview2
    zxCoder
        25
    zxCoder  
    OP
       2022-03-31 14:24:21 +08:00
    @wzwb 这个感觉不错,就是居然是 rust... 难度++。
    pengtdyd
        26
    pengtdyd  
       2022-03-31 15:30:12 +08:00
    @woxihejinghao 现在用 flutter desktop 绝对是个天坑!!!我觉的还是 electron 更好,生态好!至于原生的开发框架,我不是很推荐,因为时代在发展,跟随主流才能更好的发展。
    ysc3839
        27
    ysc3839  
       2022-03-31 16:02:38 +08:00   ❤️ 1
    Win11 并没有使用 WPF 来开发界面,WPF 默认的界面风格也和 Win11 的原生风格相差很大,你需要使用第三方的组件库才能得到类似 Win11 的风格。
    至于那堆名词,WinUI 和 C# 或 .NET 没有关系,其他都和 C# 或 .NET 有关系。
    ITACHIJAMES
        28
    ITACHIJAMES  
       2022-03-31 19:35:48 +08:00
    Eletron 水平一般的真的很难做好,卡,臃肿。
    Win 原生开发推荐 WPF ; Blazor 和 Eletron 有点像,可以看作是 Web ; MAUI 是最新的架构,推荐,但可能有坑; Xamrian 已经被代替了不用管; Avalonia 是一个还不错的框架。写 C#你会享受的。
    FrankAdler
        29
    FrankAdler  
       2022-03-31 20:52:54 +08:00 via iPhone
    win11 才能用 winui3 ,暂时不用考虑,主用 winform 或者 wpf 就行了,考虑到新手上手难度建议先用 winform ,我前段时间从零自学写个小工具,半天就写好了,wpf 感觉稍微难点
    zenghx
        30
    zenghx  
       2022-03-31 22:37:58 +08:00 via Android
    那天看到 flutter for Windows 的宣传视频,貌似可以
    zxCoder
        31
    zxCoder  
    OP
       2022-03-31 22:46:52 +08:00
    话说…有人推荐 pyqt 吗 这跟上面这些框架是一个类型的东西吗?
    bequt
        32
    bequt  
       2022-03-31 23:09:58 +08:00
    有谁还记得那个 VB6.0
    kingfalse
        33
    kingfalse  
       2022-04-01 07:49:40 +08:00 via Android
    Java swt 。。。
    Vaspike
        34
    Vaspike  
       2022-04-01 08:39:34 +08:00
    直接 Compose-desktop
    sunbreak
        35
    sunbreak  
       2022-04-01 10:23:03 +08:00 via iPhone   ❤️ 2
    楼主最好先说下自己的情况,比如做过什么项目,擅长什么语言和框架

    - 擅长 C++,推荐 Qt ,不推荐 Win 的 C++直接开发

    - 擅长 C#,推荐 WinUI 2/3 的 UI 层,用 WindowsAppSdk 接口层(兼容 WinForm 和 WPF 框架)

    - 擅长 Java/Kotlin ,推荐 Compose for Desktop ,JetBrains 出品有保障

    - 擅长 TS/JS ,推荐 Electron 或者 ReactNative-Windows ,后者是微软官方支持,其实 Win11 的 Settings 是用 RN-Win 写的

    - 其他,推荐 Flutter Windows ,我估计你也不是要开发很复杂的应用(否则就得研究深入研究前面某一个框架)

    - 不推荐 Tauri ,如果是纯 Rust 团队还行,其他情况 Rust 做 UI 对个人学习压力和画组件速度都不占优

    - 如果熟悉 Go ,甚至可以试试 GoVCL

    利益相关:主要做移动跨平台架构,但也对接过不少桌面需求
    zxCoder
        36
    zxCoder  
    OP
       2022-04-01 11:07:45 +08:00
    @sunbreak 情况就是又菜要求还高.... 是个逻辑还比较复杂的应用,想弄好看点,但是也想要性能稍微好点。 自己的话没有特别擅长的语言,反正语法都差不多能写,主要就是一些配置会比较复杂难懂一些。考虑到逻辑需求比较多,所以排除了 c++ rust go

    剩下的 winform 试了下,主要就是一个问题,太丑哈哈,compose for desktop ,也试了下,感觉相比 c#没什么优势,electron 是包太大,而且也蛮复杂的,跟写 web 也不太一样。
    sunbreak
        37
    sunbreak  
       2022-04-01 15:04:45 +08:00
    @zxCoder

    这样看以下是比较靠谱的选择了,都是官方支持,UI 上有保障

    - ReactNative-Windows
    - WinUI 3 + WindowsAppSdk
    youyouyou0123456
        38
    youyouyou0123456  
       2022-04-01 16:13:18 +08:00
    会啥用啥。nanui 看了一眼似乎就是 winform 嵌套 cef ,就是在 winform 中放了个浏览器。
    我 wpf 开发的项目比较多,我一般都是维护自己一套控件库,不过如果你想直接用别人的控件库 https://github.com/Carlos487/awesome-wpf 可以在这个 github 里面找找,还是有很多开箱即用控件库的。
    对 UI 和开发效率有要求,就不要用 winform ,qt 。
    如果项目复杂且对性能,文件大小有要求,就不要用 web 相关的技术做桌面端。
    如果想跨平台,就用 web 相关技术做桌面端。
    如果开发时间有要求,就要需要用成熟的技术,ReactNative-Windows 、WinUI 3 、Blazor 等,有的技术很新,有的很少人用,中文文档基本没有,英文文档也不够全,遇到难题估计要靠自己踩坑。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1570 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 16:58 · PVG 00:58 · LAX 08:58 · JFK 11:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.