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

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

  •  1
     
  •   liuser666 · 146 天前 · 5293 次点击
    这是一个创建于 146 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    49 条回复    2022-02-15 00:14:45 +08:00
    learningman
        1
    learningman  
       146 天前   ❤️ 1
    建议 electron
    liuser666
        2
    liuser666  
    OP
       146 天前
    @learningman 唯一的缺点就是太大了!!真的是唯一的缺点了!
    yayiji
        3
    yayiji  
       146 天前 via Android
    我放弃了,面向浏览器编程吧
    ychost
        4
    ychost  
       146 天前
    WPF 挺好用的,不考虑靠平台的话
    ysc3839
        5
    ysc3839  
       146 天前 via Android
    WPF 和 UWP 分不清是因为它们都用了 XAML 吧,搜索的时候都混在一起了。微软自己的文档是分得挺清楚的,UWP 的是在单独的分类下面。
    .NET Core 大概是继承了 Windows 不自带非必要运行时的传统,类似的 VC++ 运行库也是不自带的。
    WinUI 3 个人感觉还没到可用的地步,目前更建议用 XAML Island 。
    xiaocaoge
        6
    xiaocaoge  
       146 天前
    Electron 比大更不能忍受的是启动速度慢
    nieyujiang
        7
    nieyujiang  
       146 天前 via iPhone
    考虑一下 qt 吧
    chashao
        9
    chashao  
       146 天前
    感觉 pyqt 也不错呀,我们很多工具都是它写的
    Mintonmu
        10
    Mintonmu  
       146 天前
    昨天 WinUI3 的第一次尝试就失败了,VS 2022 安装环境都能失败,还是滚回去用 Qt 吧
    QingchuanZhang
        11
    QingchuanZhang  
       146 天前
    .NET Core app 可以 self-contain 啊
    ffire
        12
    ffire  
       146 天前 via iPhone
    不清楚楼主的需求。没看到人提,其实我想说用 win32 api 直接写也没那么麻烦,兼容性也是最好的,想做成单 exe“开箱即用”也可以。
    makelove
        13
    makelove  
       146 天前
    没追求选 electron,有追求选 qt,中间选系统 webview
    fy
        14
    fy  
       146 天前
    @liuser666 考虑一下 miniblink ,能解决 electron 大的问题
    fy
        15
    fy  
       146 天前
    @chashao pyqt 我个人看法是,对许可协议有疑虑
    bybyte
        16
    bybyte  
       146 天前 via Android
    @ffire 但是开发效率太低了
    wzzzx
        17
    wzzzx  
       146 天前
    我们公司很多都是直接上 WPF 的
    jim9606
        18
    jim9606  
       146 天前
    看了下某 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  
       146 天前 via iPhone
    直接 Win32 API 一把梭(
    mingl0280
        20
    mingl0280  
       145 天前 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  
       145 天前 via iPhone
    PySide6
    bankroft
        22
    bankroft  
       145 天前
    简单一点的可以考虑 flutter
    ffire
        23
    ffire  
       145 天前 via iPhone
    @bybyte 个人认为这是个误解。开发效率完全取决于对所选平台的熟悉程度。
    coolcfan
        24
    coolcfan  
       145 天前
    想试试超级 old school 的可以看下 Lazarus
    thtznet
        25
    thtznet  
       145 天前
    桌面用 Winform\WPF\WinUI 等任何技术, 反正只是一个框,然后框里嵌个 webview2 就可以了,剩下的就是 HTML5 的事情了,一点也不乱。
    mcdull619
        26
    mcdull619  
       145 天前
    jsq2627
        27
    jsq2627  
       145 天前
    election / webview2 / sciter
    shayuvpn0001
        28
    shayuvpn0001  
       145 天前
    UWP 现在没有任何意义,所谓的跨平台跨来跨去现在只剩下自己的 Windows 和 xbox 之间跨了,除非你想上架 Microsoft Store ,否则 UWP 这种没有前途的东西只是白白浪费时间精力。

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

    稍微追求一点花里胡哨的就是 WPF ,后面的什么 UWP ,WinUI 根本不用看,一是框架本身后续微软的支持问题,二是论投入产出 Electron/QT 都比这些好,如果你是微软铁粉,当我(曾经的微软铁粉)上面这堆话没说。
    uni
        29
    uni  
       145 天前
    嫌 electron 太大,那就试试 tauri 吧
    azur
        30
    azur  
       145 天前
    mark ,准备研究下 winui3
    orafy
        31
    orafy  
       145 天前
    这几个里面任意一个都可以
    crayygy
        32
    crayygy  
       145 天前
    QT 的 QML 感觉挺不错,但是也有一些坑(哪个平台哪个框架没点儿坑呢)
    MS 好像有在弄 WinUI3 https://docs.microsoft.com/en-us/windows/apps/winui/winui3/
    之前了解过一些,但还没正式 release ,所以目前只能观望,有做 Windows UI 的需求还是 QT or Win32/WPF 吧
    crayygy
        33
    crayygy  
       145 天前
    BTW Flutter 也可以跨平台的,也许可以考虑一下
    placeholder
        34
    placeholder  
       144 天前
    仅 pc 端且仅考虑 win 平台的话且不需要太多高等级的 api 的话,其实可以看看微软的 uwp 文档,相对布局加默认控件加 csharp 一把梭就得了(手动狗头)
    zeal7s
        35
    zeal7s  
       144 天前
    考虑一下 React Native Windows ,也是微软维护的
    FrankHB
        36
    FrankHB  
       144 天前
    Electron 唯一的缺点显然不只是太大了。一些其它问题最终用户也能感知到。
    区别无非是用户够多,坑能相互活埋,不太会有拎不清楚常规开发需求的维护者主动跳出来暴露智商,例如: https://github.com/dart-lang/language/issues/490
    事实上,WPF 一样有类似的问题,但实现的优化质量好得多,以至于不少开发者自动忽略了。但是其它多数实现不大有这个余裕。
    FrankHB
        37
    FrankHB  
       144 天前   ❤️ 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  
       144 天前
    @fy qt 基本是 LGPL 。粗略的说,动态链接即可(我看 FSF 里也声明不限制 inheritence dependency)。不过严格理解 LGPL 协议的话,要提供用户能升级 Qt 的方案,这样就需要暴露一些代码(依赖 Qt 的)。稳妥起见,可以把业务数据层的代码做成动态库再在 Qt 里用;但我个人觉得大部分人不会考虑太多,动态链接就完了,也不会开源。目前来看风险不大。
    levelworm
        39
    levelworm  
       143 天前 via Android
    @ffire 同意,qt 和 win32 都还行啊。
    levelworm
        40
    levelworm  
       143 天前 via Android
    @FrankHB 啊? dart 的那个人我记得蛮牛逼的呀,哪里说错了吗?求问。
    ShikiSuen
        41
    ShikiSuen  
       143 天前
    直接用 mono 写介面?
    luodaoyi
        42
    luodaoyi  
       142 天前
    qt 把 别看了 你看着看着最后就去写 mfc 了
    ikas
        43
    ikas  
       142 天前
    如果跨平台,微软技术栈就是 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  
       141 天前 via iPhone
    我也在看,Win 应用在下面技术中选吧,
    其他的微软都不推荐了。前端有个 Electron 挺火的,但性能很差。https://docs.microsoft.com/zh-cn/windows/apps/get-started/?tabs=cpp-win32
    forgottencoast
        45
    forgottencoast  
       132 天前
    @mingl0280 .Net Core 怎么就不支持桌面 GUI 开发了?.Net Core 3 就支持 WinForm 和 WPF 了,只是不支持桌面 GUI 跨平台而已。
    mingl0280
        46
    mingl0280  
       131 天前 via Android
    @forgottencoast 你去 VS 里面勾,.net core 5.0 desktop app ,你就会看见一个提示:部分.net framework 的功能不支持。
    你要是觉得这也叫支持的话我无话可说
    forgottencoast
        47
    forgottencoast  
       131 天前
    @mingl0280 部分是多部分? 1%还是 99%?只要能用.Net Core 开发桌面程序就算支持了,现在就能,我都用来开发了几个应用了。
    liuser666
        48
    liuser666  
    OP
       131 天前
    @forgottencoast .NET Core 的开发过程其实我还挺满意的,只是微软不内置.NET Core 导致安装包太大了,我只能用 Framework 开发。
    forgottencoast
        49
    forgottencoast  
       131 天前
    @liuser666 再大也没有 Electron 大吧。
    其实.Net Framework 4 也挺好的,出来这么多年了,很成熟了,什么问题都有解决方案。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1046 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 22:26 · PVG 06:26 · LAX 15:26 · JFK 18:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.