3

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

 2 years ago
source link: https://www.v2ex.com/t/831456
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  程序员

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

  liuser666 · 5 天前 · 3956 次点击

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

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

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

44 条回复    2022-02-04 22:07:32 +08:00

learningman

learningman      5 天前   ❤️ 1

建议 electron

liuser666

liuser666      5 天前

@learningman 唯一的缺点就是太大了!!真的是唯一的缺点了!

yayiji

yayiji      5 天前 via Android

我放弃了,面向浏览器编程吧

ychost

ychost      5 天前

WPF 挺好用的,不考虑靠平台的话

ysc3839

ysc3839      5 天前 via Android

WPF 和 UWP 分不清是因为它们都用了 XAML 吧,搜索的时候都混在一起了。微软自己的文档是分得挺清楚的,UWP 的是在单独的分类下面。
.NET Core 大概是继承了 Windows 不自带非必要运行时的传统,类似的 VC++ 运行库也是不自带的。
WinUI 3 个人感觉还没到可用的地步,目前更建议用 XAML Island 。

xiaocaoge

xiaocaoge      5 天前

Electron 比大更不能忍受的是启动速度慢

nieyujiang

nieyujiang      5 天前 via iPhone

考虑一下 qt 吧

chashao

chashao      5 天前

感觉 pyqt 也不错呀,我们很多工具都是它写的

Mintonmu

Mintonmu      5 天前

昨天 WinUI3 的第一次尝试就失败了,VS 2022 安装环境都能失败,还是滚回去用 Qt 吧

QingchuanZhang

QingchuanZhang      5 天前

.NET Core app 可以 self-contain 啊

ffire

ffire      5 天前 via iPhone

不清楚楼主的需求。没看到人提,其实我想说用 win32 api 直接写也没那么麻烦,兼容性也是最好的,想做成单 exe“开箱即用”也可以。

makelove

makelove      5 天前

没追求选 electron,有追求选 qt,中间选系统 webview

fy

fy      5 天前

@liuser666 考虑一下 miniblink ,能解决 electron 大的问题

fy

fy      5 天前

@chashao pyqt 我个人看法是,对许可协议有疑虑

bybyte

bybyte      5 天前 via Android

@ffire 但是开发效率太低了

wzzzx

wzzzx      5 天前

我们公司很多都是直接上 WPF 的

jim9606

jim9606      5 天前

看了下某 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

agagega      5 天前 via iPhone

直接 Win32 API 一把梭(

mingl0280

mingl0280      4 天前 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

zk8802      4 天前 via iPhone

PySide6

bankroft

bankroft      4 天前

简单一点的可以考虑 flutter

ffire

ffire      4 天前 via iPhone

@bybyte 个人认为这是个误解。开发效率完全取决于对所选平台的熟悉程度。

coolcfan

coolcfan      4 天前

想试试超级 old school 的可以看下 Lazarus

thtznet

thtznet      4 天前

桌面用 Winform\WPF\WinUI 等任何技术, 反正只是一个框,然后框里嵌个 webview2 就可以了,剩下的就是 HTML5 的事情了,一点也不乱。

jsq2627

jsq2627      4 天前

election / webview2 / sciter

shayuvpn0001

shayuvpn0001      4 天前

UWP 现在没有任何意义,所谓的跨平台跨来跨去现在只剩下自己的 Windows 和 xbox 之间跨了,除非你想上架 Microsoft Store ,否则 UWP 这种没有前途的东西只是白白浪费时间精力。

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

稍微追求一点花里胡哨的就是 WPF ,后面的什么 UWP ,WinUI 根本不用看,一是框架本身后续微软的支持问题,二是论投入产出 Electron/QT 都比这些好,如果你是微软铁粉,当我(曾经的微软铁粉)上面这堆话没说。

uni

uni      4 天前

嫌 electron 太大,那就试试 tauri 吧

azur

azur      4 天前

mark ,准备研究下 winui3

orafy

orafy      4 天前

这几个里面任意一个都可以

crayygy

crayygy      4 天前

QT 的 QML 感觉挺不错,但是也有一些坑(哪个平台哪个框架没点儿坑呢)
MS 好像有在弄 WinUI3 https://docs.microsoft.com/en-us/windows/apps/winui/winui3/
之前了解过一些,但还没正式 release ,所以目前只能观望,有做 Windows UI 的需求还是 QT or Win32/WPF 吧

crayygy

crayygy      4 天前

BTW Flutter 也可以跨平台的,也许可以考虑一下

placeholder

placeholder      3 天前

仅 pc 端且仅考虑 win 平台的话且不需要太多高等级的 api 的话,其实可以看看微软的 uwp 文档,相对布局加默认控件加 csharp 一把梭就得了(手动狗头)

zeal7s

zeal7s      3 天前

考虑一下 React Native Windows ,也是微软维护的

FrankHB

FrankHB      3 天前

Electron 唯一的缺点显然不只是太大了。一些其它问题最终用户也能感知到。
区别无非是用户够多,坑能相互活埋,不太会有拎不清楚常规开发需求的维护者主动跳出来暴露智商,例如: https://github.com/dart-lang/language/issues/490
事实上,WPF 一样有类似的问题,但实现的优化质量好得多,以至于不少开发者自动忽略了。但是其它多数实现不大有这个余裕。

FrankHB

FrankHB      3 天前   ❤️ 1

@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

crackhopper      3 天前

@fy qt 基本是 LGPL 。粗略的说,动态链接即可(我看 FSF 里也声明不限制 inheritence dependency)。不过严格理解 LGPL 协议的话,要提供用户能升级 Qt 的方案,这样就需要暴露一些代码(依赖 Qt 的)。稳妥起见,可以把业务数据层的代码做成动态库再在 Qt 里用;但我个人觉得大部分人不会考虑太多,动态链接就完了,也不会开源。目前来看风险不大。

levelworm

levelworm      2 天前 via Android

@ffire 同意,qt 和 win32 都还行啊。

levelworm

levelworm      2 天前 via Android

@FrankHB 啊? dart 的那个人我记得蛮牛逼的呀,哪里说错了吗?求问。

ShikiSuen

ShikiSuen      2 天前

直接用 mono 写介面?

luodaoyi

luodaoyi      1 天前

qt 把 别看了 你看着看着最后就去写 mfc 了

ikas

ikas      1 天前

如果跨平台,微软技术栈就是 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?

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK