V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuser666
V2EX  ›  Windows

又看了一天的 Windows UI 相关的文档...

  •  1
     
  •   liuser666 · 2022-01-30 21:21:43 +08:00 · 7774 次点击
    这是一个创建于 1060 天前的主题,其中的信息可能已经有所发展或是发生改变。

    结果还是乱乱乱!!!!!

    WPF 和 UWP 傻傻分不清楚,有时候说 UWP 可以用,有时候又说 UWP 不能用, 新的.Net Core 居然不是系统自带。 WinUI3 目前还属于不稳定的状态,windowing 的功能虽然画勾了但是模式依然很固定,api 依然很少。 xaml 技术也不是主流,只能在 Windows 平台用一用。

    微软总是什么都想要...绝了绝了绝了,我就想开发个桌面的 app ,太烦了。

    49 条回复    2022-02-15 00:14:45 +08:00
    learningman
        1
    learningman  
       2022-01-30 21:28:16 +08:00   ❤️ 1
    建议 electron
    liuser666
        2
    liuser666  
    OP
       2022-01-30 21:30:12 +08:00
    @learningman 唯一的缺点就是太大了!!真的是唯一的缺点了!
    yayiji
        3
    yayiji  
       2022-01-30 21:30:28 +08:00 via Android
    我放弃了,面向浏览器编程吧
    ychost
        4
    ychost  
       2022-01-30 21:32:30 +08:00
    WPF 挺好用的,不考虑靠平台的话
    ysc3839
        5
    ysc3839  
       2022-01-30 21:36:01 +08:00 via Android
    WPF 和 UWP 分不清是因为它们都用了 XAML 吧,搜索的时候都混在一起了。微软自己的文档是分得挺清楚的,UWP 的是在单独的分类下面。
    .NET Core 大概是继承了 Windows 不自带非必要运行时的传统,类似的 VC++ 运行库也是不自带的。
    WinUI 3 个人感觉还没到可用的地步,目前更建议用 XAML Island 。
    xiaocaoge
        6
    xiaocaoge  
       2022-01-30 21:37:11 +08:00
    Electron 比大更不能忍受的是启动速度慢
    nieyujiang
        7
    nieyujiang  
       2022-01-30 21:40:17 +08:00 via iPhone
    考虑一下 qt 吧
    chashao
        9
    chashao  
       2022-01-30 21:45:35 +08:00
    感觉 pyqt 也不错呀,我们很多工具都是它写的
    Mintonmu
        10
    Mintonmu  
       2022-01-30 21:46:14 +08:00
    昨天 WinUI3 的第一次尝试就失败了,VS 2022 安装环境都能失败,还是滚回去用 Qt 吧
    QingchuanZhang
        11
    QingchuanZhang  
       2022-01-30 21:48:39 +08:00
    .NET Core app 可以 self-contain 啊
    ffire
        12
    ffire  
       2022-01-30 22:03:31 +08:00 via iPhone
    不清楚楼主的需求。没看到人提,其实我想说用 win32 api 直接写也没那么麻烦,兼容性也是最好的,想做成单 exe“开箱即用”也可以。
    makelove
        13
    makelove  
       2022-01-30 22:39:35 +08:00
    没追求选 electron,有追求选 qt,中间选系统 webview
    fy
        14
    fy  
       2022-01-30 22:42:22 +08:00
    @liuser666 考虑一下 miniblink ,能解决 electron 大的问题
    fy
        15
    fy  
       2022-01-30 22:43:31 +08:00
    @chashao pyqt 我个人看法是,对许可协议有疑虑
    bybyte
        16
    bybyte  
       2022-01-30 23:22:10 +08:00 via Android
    @ffire 但是开发效率太低了
    wzzzx
        17
    wzzzx  
       2022-01-30 23:51:44 +08:00
    我们公司很多都是直接上 WPF 的
    jim9606
        18
    jim9606  
       2022-01-31 00:30:17 +08:00
    看了下某 MVP 的试玩报告,感觉问题不是一般的大。(拿出你的爱与勇气与希望)
    商店的 WinUI3 Controller Gallery 样例甚至部分控件都没实现。

    https://www.cnblogs.com/dino623/p/Get-started-with-WinUI-3-for-desktop-apps.html
    https://www.cnblogs.com/dino623/p/test_winui3_preview3_performance.html

    我也不知道是不是 UWP 的锅,我现在用的 Win11 预览版,只要用上 UWP 组件的(例如那个被骂上天的右键菜单),总会莫名其妙卡顿,搞不好还会传染给 WinUI3 应用。
    agagega
        19
    agagega  
       2022-01-31 00:34:26 +08:00 via iPhone
    直接 Win32 API 一把梭(
    mingl0280
        20
    mingl0280  
       2022-01-31 06:57:55 +08:00 via Android
    Windows 桌面 app:
    传统路线——WinForm (省事,快),MFC (老古董)
    现代路线——UWP ( Windows 应用商城 app ),WPF (普通桌面软件),二者均使用 XAML 作为界面描述。
    以上二者建议使用.Net Framework 4.0 以上开发,新版 C#省事。
    .Net core 不支持桌面 GUI 软件开发。
    桌面跨平台:QT ,GTK ,两个都会让你做得想死(而且 QT 问题挺多的)。
    基于浏览器的 GUI 就多了,Electron 什么的都还可以用,不过也别太指望跨平台了,复杂点的在 Linux 下能跑到五分钟崩一次都算是万幸了……
    zk8802
        21
    zk8802  
       2022-01-31 08:12:14 +08:00 via iPhone
    PySide6
    bankroft
        22
    bankroft  
       2022-01-31 09:34:40 +08:00
    简单一点的可以考虑 flutter
    ffire
        23
    ffire  
       2022-01-31 09:49:07 +08:00 via iPhone
    @bybyte 个人认为这是个误解。开发效率完全取决于对所选平台的熟悉程度。
    coolcfan
        24
    coolcfan  
       2022-01-31 10:21:08 +08:00
    想试试超级 old school 的可以看下 Lazarus
    thtznet
        25
    thtznet  
       2022-01-31 12:27:59 +08:00
    桌面用 Winform\WPF\WinUI 等任何技术, 反正只是一个框,然后框里嵌个 webview2 就可以了,剩下的就是 HTML5 的事情了,一点也不乱。
    mcdull619
        26
    mcdull619  
       2022-01-31 13:47:44 +08:00
    jsq2627
        27
    jsq2627  
       2022-01-31 14:44:42 +08:00
    election / webview2 / sciter
    shayuvpn0001
        28
    shayuvpn0001  
       2022-01-31 15:21:35 +08:00
    UWP 现在没有任何意义,所谓的跨平台跨来跨去现在只剩下自己的 Windows 和 xbox 之间跨了,除非你想上架 Microsoft Store ,否则 UWP 这种没有前途的东西只是白白浪费时间精力。

    开发效率和兼容性综合起来最好的是 Winform ,没有什么花里胡哨的东西,该有的控件都有,多线程和底层支持也很完美,这么多年坑也踩得差不多了,Visual Studio 完美支持,兼容性你选.Net Framework 4.0 连 xp 都能跑,这样很多工控机都能照顾到。

    稍微追求一点花里胡哨的就是 WPF ,后面的什么 UWP ,WinUI 根本不用看,一是框架本身后续微软的支持问题,二是论投入产出 Electron/QT 都比这些好,如果你是微软铁粉,当我(曾经的微软铁粉)上面这堆话没说。
    uni
        29
    uni  
       2022-01-31 18:32:02 +08:00
    嫌 electron 太大,那就试试 tauri 吧
    azur
        30
    azur  
       2022-01-31 19:29:22 +08:00
    mark ,准备研究下 winui3
    orafy
        31
    orafy  
       2022-01-31 19:32:03 +08:00
    这几个里面任意一个都可以
    crayygy
        32
    crayygy  
       2022-01-31 20:33:29 +08:00
    QT 的 QML 感觉挺不错,但是也有一些坑(哪个平台哪个框架没点儿坑呢)
    MS 好像有在弄 WinUI3 https://docs.microsoft.com/en-us/windows/apps/winui/winui3/
    之前了解过一些,但还没正式 release ,所以目前只能观望,有做 Windows UI 的需求还是 QT or Win32/WPF 吧
    crayygy
        33
    crayygy  
       2022-01-31 20:34:57 +08:00
    BTW Flutter 也可以跨平台的,也许可以考虑一下
    placeholder
        34
    placeholder  
       2022-02-01 10:49:13 +08:00
    仅 pc 端且仅考虑 win 平台的话且不需要太多高等级的 api 的话,其实可以看看微软的 uwp 文档,相对布局加默认控件加 csharp 一把梭就得了(手动狗头)
    zeal7s
        35
    zeal7s  
       2022-02-01 10:59:50 +08:00
    考虑一下 React Native Windows ,也是微软维护的
    FrankHB
        36
    FrankHB  
       2022-02-01 13:53:18 +08:00
    Electron 唯一的缺点显然不只是太大了。一些其它问题最终用户也能感知到。
    区别无非是用户够多,坑能相互活埋,不太会有拎不清楚常规开发需求的维护者主动跳出来暴露智商,例如: https://github.com/dart-lang/language/issues/490
    事实上,WPF 一样有类似的问题,但实现的优化质量好得多,以至于不少开发者自动忽略了。但是其它多数实现不大有这个余裕。
    FrankHB
        37
    FrankHB  
       2022-02-01 14:21:31 +08:00   ❤️ 3
    @shayuvpn0001 WinForms 永远干不翻最大的设计上的坑:依赖 HWND 。
    所以一旦遇到控件这个层次上不能解决的问题(比如说,自己实现不能通过组合现有控件完全实现的新控件),问题就很可能陡然恶心起来:很可能用户就得把 Win32 UI 的花里胡哨的屎味咖喱过一遍,还比原生 Win32 破事更多(因为涉及互操作)。
    Win32 的屎味咖喱也是为什么传统的搞 Win32 UI 的受不了纷纷跳出来搞新的一套所谓的 DirectUI 。
    讲道理,原生的 HWND 其实确实是希望用户按传统意义的方式扩展的。这特别体现在任何一个像样的 Win32 控件都是桌面隐喻的所谓“窗口”( Windows 这个名字也指的是这个)上,而不是现在大多数最终用户理解的窗体和对话框。
    但是 Win32 API 用 C 提供,不管对用户使用还是维护者扩展都有天坑(用户看不到 HWND 实现,微软也没可能让用户彻底看到),加上一些底层设计问题(如滥用低效的异步窗口消息、WndProc 的签名扩展性差甚至要用户折腾 thunk )和 Windows API 固有的更新周期导致跨操作系统版本体验碎片化(比如分层子窗口只在 Windows 8 后支持)导致这种方式最终是无药可救的。
    在扩展 HWND 无望的情况下,Windowless 是自然选项了。如果把扩展 HWND 实现这样的权利看作是用户(桌面系统开发者)的自由,那么所有健全的 GUI 天生都是所谓的 DirectUI (所以这词虽然是微软开发者发明的,但也挺 low 的),而基于 HWND 封装的方案(包括 MFC 和 WinForms )只是残废版而已。
    WinForms 这种咖喱味的屎在常规 Win32 用户的面前解决了旧的 Win32 C API 的一些屎味和随着操作系统版本分发导致的部分表面问题,但没办法解决根本问题(而且 .NET Framework 的分发周期早年一样挺欠揍的)。对原有 Win32 的就是只想搓出来个能看的 GUI 的最传统的用户,API 和工具易用性提升的开发效率已经足够可观,所以才能忍受;但对原本就受不了 HWND 又没法找到现成方案的用户再说,最终需要 hack Win32 的问题也是忍无可忍的。(所以现在还流行的就包括大部分倒腾工控机的,因为这些用户大多对干掉后者的屎味感知不大。)
    (题外话,任意不是靠模拟来实现的“原生”GUI 风格的解决方案,不管是什么平台的,一样很可能有这里的残废屎味;至少遇到 Windows 就很可能放纵了;其实还有少数比 Win32 还烂的,比如各种 CAD 之类的私有界面扩展 API ……不过不提也罢。)
    WPF 甩掉了 HWND 的包袱,才算是一个相对“完整”的 GUI 解决方案;而且相对 Win32 过渡到 WinForms ,工具的改进使过渡的体验更加平滑,这才是 WPF 的基本盘。至于 MVVM 和 XAML ,其实不像一些用户理解的那么适合传统桌面开发,既是加分项又是减分项(不过最传统的一些用户有些就只是待在 WinForms 觉得够用挺好,也就不会有什么有效反馈了)。当然,光说完成度,WPF 就够打翻 UWP 和现在的 WinUI 的了。
    crackhopper
        38
    crackhopper  
       2022-02-01 15:23:14 +08:00
    @fy qt 基本是 LGPL 。粗略的说,动态链接即可(我看 FSF 里也声明不限制 inheritence dependency)。不过严格理解 LGPL 协议的话,要提供用户能升级 Qt 的方案,这样就需要暴露一些代码(依赖 Qt 的)。稳妥起见,可以把业务数据层的代码做成动态库再在 Qt 里用;但我个人觉得大部分人不会考虑太多,动态链接就完了,也不会开源。目前来看风险不大。
    levelworm
        39
    levelworm  
       2022-02-02 23:08:19 +08:00 via Android
    @ffire 同意,qt 和 win32 都还行啊。
    levelworm
        40
    levelworm  
       2022-02-02 23:10:45 +08:00 via Android
    @FrankHB 啊? dart 的那个人我记得蛮牛逼的呀,哪里说错了吗?求问。
    m0yBPjyX3475syS4
        41
    m0yBPjyX3475syS4  
       2022-02-03 00:04:27 +08:00
    直接用 mono 写介面?
    asuraa
        42
    asuraa  
       2022-02-03 13:20:28 +08:00
    qt 把 别看了 你看着看着最后就去写 mfc 了
    ikas
        43
    ikas  
       2022-02-03 17:03:36 +08:00
    如果跨平台,微软技术栈就是 MAUI,不选微软技术栈,那也有很多

    如果是只支持 windows
    1.win app sdk (包含 windows ui3)是以后的主路,现在支持 ui3 不够完善,但是基础的都有了,api 还少吗?你要知道 win app sdk 对于 win32 与 winrt 几乎没有任何限制..win32 的资源还少么??
    2.uwp(包含 win ui2.7),现在就是成熟,即便 uwp/winrt 不支持,你现在也可以直接加入 win32 组件,使用 pipe 通信..

    主流 ui 技术是什么?xaml 只是表象,在 windows 平台使用 xaml 已经很容易了...现在哪有跨平台又好用的原生 ui?
    mmdsun
        44
    mmdsun  
       2022-02-04 22:07:32 +08:00 via iPhone
    我也在看,Win 应用在下面技术中选吧,
    其他的微软都不推荐了。前端有个 Electron 挺火的,但性能很差。https://docs.microsoft.com/zh-cn/windows/apps/get-started/?tabs=cpp-win32
    forgottencoast
        45
    forgottencoast  
       2022-02-13 20:34:34 +08:00
    @mingl0280 .Net Core 怎么就不支持桌面 GUI 开发了?.Net Core 3 就支持 WinForm 和 WPF 了,只是不支持桌面 GUI 跨平台而已。
    mingl0280
        46
    mingl0280  
       2022-02-14 13:48:40 +08:00 via Android
    @forgottencoast 你去 VS 里面勾,.net core 5.0 desktop app ,你就会看见一个提示:部分.net framework 的功能不支持。
    你要是觉得这也叫支持的话我无话可说
    forgottencoast
        47
    forgottencoast  
       2022-02-14 18:53:46 +08:00
    @mingl0280 部分是多部分? 1%还是 99%?只要能用.Net Core 开发桌面程序就算支持了,现在就能,我都用来开发了几个应用了。
    liuser666
        48
    liuser666  
    OP
       2022-02-14 21:40:21 +08:00
    @forgottencoast .NET Core 的开发过程其实我还挺满意的,只是微软不内置.NET Core 导致安装包太大了,我只能用 Framework 开发。
    forgottencoast
        49
    forgottencoast  
       2022-02-15 00:14:45 +08:00
    @liuser666 再大也没有 Electron 大吧。
    其实.Net Framework 4 也挺好的,出来这么多年了,很成熟了,什么问题都有解决方案。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5525 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:00 · PVG 15:00 · LAX 23:00 · JFK 02:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.