5

请 windows 开发大佬指点下, 我想学习一种微软支持的开发桌面 exe 程序得方式

 11 months ago
source link: https://www.v2ex.com/t/979408
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.
neoserver,ios ssh client

V2EX  ›  程序员

请 windows 开发大佬指点下, 我想学习一种微软支持的开发桌面 exe 程序得方式

  iorilu · 7h 23m ago · 1579 views

说实在的, 虽然折腾不少框架, 库啥的

但这么多年却没有正经学过微软的任何语言或框架, 原因就不讨论了

但我现在想做正统的 windows 本地桌面程序开发, 想请 windows 开发经验多的人指点下, 省的走弯路, 省点时间

我虽然没搞过, 但大概也知道, 就算微软支持的东西也很多, 比如 winform ,wpf , 语言也一大堆 我说下我的目的和要求

  • 目标是做正统的 windows 桌面程序, 不是为了学习目的
  • 不用 c 或 c++, 不折腾
  • 只使用微软官方支持技术(不要推啥 electron ,qt 等其他东西)
  • 生成的 exe 或程序包尽量小, 依赖尽量少, 最好只需按照程序相关东西, 其他的系统直接支持
  • 暂不考虑跨平台(当然我也知道.net 好像开源, 不清楚是否能容易移植到 macos )
  • 希望这套技术能在未来五年仍然是微软支持的主流技术框架

希望得到具体点的意见 比如用啥语言 , 用啥框架, 怎么搭环境等

定好了直接开干。

37 replies    2023-10-07 18:08:16 +08:00
ye4tar

ye4tar      6h 44m ago

delphi7
jennalcn

jennalcn      6h 25m ago

有时候不用想那么多,直接开干就好啦。为什么只用微软官方支持的技术?这个有点迷。官方现在主推 MAUI ,但是用过都会无尽吐槽,个人推荐 AvaloniaUI ,但现在的新技术基本都不支持 Win7 ,如果要支持 Win7 的话还是得用 Winform
nulIptr

nulIptr      6h 9m ago via iPhone

wpf 不就满足要求嘛,其实后面出的 uwp/maui 也都是 xaml 那套东西
说到官方技术支持,就算是富哥们儿钱也不能这么造啊
tool2d

tool2d      5h 53m ago

昨天刚看到个 windows 界面开发相关的视频,可能和楼主第二条不符,但是思路还是可以借鉴的

https://www.bilibili.com/video/BV1rC4y1L7dX

这人比较罗嗦,我个人总结,就是 GUI 区分为 IM 模式和 RM 模式。

IM 模式指的是即时渲染,也就是可以不需要保存当前控件状态,你需要直接查状态就可以了,因为界面在不断刷新。

RM 模式是传统的 GUI 消息模式,保存了所有控件的状态,比如某个按钮被点击了,会触发回调函数。需要完整 GUI 框架才能运行。

视频推荐了 IM 模式进行开发,对比 RM 有一个好处,就是能极大化简 GUI 相关代码(因为不用管理状态)。
chen006

chen006      5h 41m ago via Android

用.NET 做界面的话,可以在这些中挑下 WinForm, WPF, UWP, WinUI, Xamarin, MAUI, Blazor, Windows Community Toolkit, Uno Platform, Avalonia, Comet, ReactiveUI, Chromely, EdgeSharp, Electron.NET
verrickt

verrickt      5h 39m ago via Android

WPF 或者 WIN UI 3 ,UWP 已经半死不活了
ysc3839

ysc3839      5h 36m ago via Android

如果追求体积小、现代化、微软支持、且排除 C++,那可以看看 React Native for Windows 。不涉及一些底层功能的话,只需要写 js 即可。底层界面框架是 Win10 自带的 WinUI2 ,不需要随程序附带。编译后 exe 印象中只有几百 KB ,React Native 的 dll 大概是 4MB 左右吧,以及你程序的资源文件,看复杂度有大有小。
ysc3839

ysc3839      5h 32m ago via Android

另外要真正追求“Windows 正统”的话,其实只有 Win32 和 WinUI2 可选,因为只有这两者是 Windows 内置的。其他像 WPF 那些虽然是微软推出的,但是是比较独立于 Windows 本身的,去掉 .NET 部分也不会影响系统大部分功能。
qrobot

qrobot      4h 16m ago

那当然是 Microsoft DirectX , 楼上都是扯淡, Microsoft DirectX 才是王道 [doge]
qrobot

qrobot      4h 14m ago

@qrobot 保证正版微软支持, 并且满足以上所有需求. 不和语言绑定
elechi

elechi      3h 48m ago

WPF ,要不 webview2
hez2010

hez2010      3h 46m ago

WinUI 3
subframe75361

subframe75361      3h 44m ago

webview2 是目前主推的吧
idealhs

idealhs      3h 39m ago

小项目直接 winform, 大一点上 WPF,我说的,少看那些微软基于 webview 的东西,会变得不幸,微软后期推的技术都是一股咖喱味并且不太负责任,而 winform 和 WPF 是经典永不过时,大量工业软件都在使用它们,微软需要对这些技术负责,Windows 活一天他们活一天.并且他们的技术并不老旧一直在维护,winform 甚至都可以基于.net8 开发,我也推荐基于最新的.net8 sdk 而不是 framework 去开发.
encro

encro      2h 46m ago

你这几乎指定了就是 WPF 。

WPF 那么好学好用的。
flyico

flyico      2h 38m ago   ❤️ 1

winform/wfp: 你直接念我身份证号得了
ysc3839

ysc3839      2h 31m ago via Android

@idealhs
“经典永不过时,大量工业软件都在使用它们,微软需要对这些技术负责”
MFC 也符合上述说法

“winform 甚至都可以基于.net8 开发”
最新的 VS2023 ,C++20 都能用 MFC

“并且他们的技术并不老旧一直在维护”
WPF 似乎一直只支持 Direct3D9 渲染,那么多年了也没有更新

WinForm 和 WPF 估计已经进入维护模式了,就和 MFC 、IE 一样,微软停止更新后一般也会维护很长一段时间,但这不能代表好坏。
haierspi

haierspi      2h 24m ago

react native, flutter ,Electron 三个任选吧.. 不过从上手难度来说 react native ,Electron 最低... 毕竟不用再学一门语言 直接 JS 就搞定了
idealhs

idealhs      2h 23m ago

@ysc3839 #19
Winform 和 WPF 将在未来一直支持最新的.NET SDK ,将能够使用所有.NET 的新技术。而开源后的全新.NET 的前景以及微软的支持力度是有目共睹的。MFC 则并非如此,MFC 只是 win32 api 的封装,并且 MFC 的开发难度以及效率,功能完全无法与 Winform 和 WPF 相提并论。
MFC 当然可以基于语言的新版本开发,你不应该将新版本语言的好处与新版本.NET 的好处混淆,至少最基本的 GUI 开发方面,处理异步没有比.NET 更好的方式。
WPF 基于 DX9 渲染我不认为有任何问题,没有人会在 WPF 项目中写 3D ,如果你有图形需求你不应该在 GUI 框架中寻找解决方案。
至于维护模式,第一你不要估计,第二微软会维护很久,就像你热爱的 MFC 一样。
webszy

webszy      2h 21m ago

@ye4tar 支持,这个比 wpf 简单多了
gbw1992

gbw1992      2h 21m ago

开发语言使用 c#
开发环境 visual studio
开发体验 wpf > winfrom
控件框架的话 winfrom 我 n 年前使用过 DevExpress(收费) 体验还行,开发前注意对常用控件进行样式封装
wpf 控件框架 有一个 HandyControl
还有注意 wpf 和 winfrom 不跨平台
如果有跨平台需求用楼上推荐的 AvaloniaUI
ShadowPower

ShadowPower      2h 19m ago

满足这些要求的只能是 WPF+C#了

如果哪天突然想要跨平台了,移植到 AvaloniaUI 也比其他框架方便
ysc3839

ysc3839      2h 9m ago via Android

@idealhs 我并不热爱 MFC ,请不要给我扣帽子,我讨厌 MFC 。
.NET 的新技术难道不是“新版本语言的好处”吗?
WPF 只支持 D3D9 本身就是问题,即使它使用了新版本的语言,但仍然使用旧的操作系统功能,那就无法获得最佳性能以及最新特性。这和 MFC 类似,MFC 能使用最新的 C++,但仍然只能使用老旧的系统功能。
ysc3839

ysc3839      2h 7m ago via Android

@idealhs 至于异步问题,个人认为 C++20 的 coroutine 也很好用。我没有详细调查过 C#的异步,不便评价。
StubbornHuang

StubbornHuang      1h 54m ago

试下 Duilib ?
albertofwb

albertofwb      1h 51m ago

@StubbornHuang Duilib 基于 C++ 的

符合你要求的只有 WinForm
Shadowsocks Nutstore 以及一众餐饮 酒店 网吧管理软件都是 winform
manasheep

manasheep      1h 51m ago

就 C# WPF 就行,用最新的.Net 版本
dq19871123

dq19871123      1h 50m ago

目前来看只有 WPF 了
idealhs

idealhs      1h 33m ago

@ysc3839 #25 C++版本再高只影响语法,不影响 MFC 调用的 win32 底层实现。同理 C#版本高也不影响任何实现,但是.NET 的升级会直接影响实现增加功能提升性能。至于 Windows GUI 开发不讨论异步,那么还有什么其他更加值得讨论的呢?
tyzandhr

tyzandhr      1h 29m ago via Android

写 Windows 怎么可能不碰 win32 呢?
ych8398527

ych8398527      1h 24m ago

WPF 。一周上手 两周精通
YassoWithSpeaker

YassoWithSpeaker      52 mins ago

犹豫不决,java 解决,上 swing ,jfx
ysc3839

ysc3839      21 mins ago via Android

@idealhs
“.NET 的升级会直接影响实现增加功能提升性能”
提升性能很正常,C++编译器升级也能提升性能。但增加功能是怎么回事? .NET 升级后 WPF 的功能就自动增多了?
“至于 Windows GUI 开发不讨论异步”
我有说过不讨论吗?我说 C++20 的 coroutine 很好用,但是 C#我没详细调查过,不便评价,这就叫不讨论了?明明我在讨论 C++的异步。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK