桌面透明窗体方案求推荐

2019-12-01 12:06:35 +08:00
 AAdalao

打算自己写个方便自己的工具箱之类的玩意,想做成加速球那种透明自绘窗口,悬浮在桌面上

功能逻辑打算用 python 或 c++,但是 ui 部分就不知道选什么了:

  1. qt,这个我比较熟,库很完整,做透明窗体也方便,甚至保留了跨平台的能力。但是我这个小工具是打算做成单 exe 发布,最多带几个 dll,qt 库打包过后真的惨不忍睹
  2. c# winfrom 这个也是我常用的方案,不要求界面的小程序我都是用这个的。但是 winfrom 做透明自绘窗体要自己写自绘 ui 组件,这就非常蛋疼了
  3. c# wpf 听说 win 下很强,不怎么会
  4. directUI/duilib 目前倾向于选这个,但是这个方向山头林立不知道具体选哪个,而且主要担心不支持透明自绘窗体,还有怕 ui 组件太少
5039 次点击
所在节点    C++
18 条回复
whi147
2019-12-01 12:52:44 +08:00
duilib,比较好用
yulihao
2019-12-01 13:28:59 +08:00
我无脑推荐 Qt
FrankHB
2019-12-01 14:52:47 +08:00
你这是只打算用 Win32 ?一次性方案?还不如自己日 UpdateLayeredWindow 了。
FrankHB
2019-12-01 14:55:59 +08:00
我自己用的……demo:
https://github.com/FrankHB/YSLib/tree/master/YDE
但是现阶段没提供工具基本比 Qt 蛋疼(虽然疼的地方不一样)。
其实 Qt 也就是那么几个 dll 嘛,,,
Jirajine
2019-12-01 15:14:40 +08:00
这种需求 Qt 再合适不过。不觉得哪里惨不忍睹,就那几个 dll,无论打安装包还是绿色版压缩包都没有丝毫问题,如果你非要“单文件”的话那套个自解压就是。
为了省这几十 M 体积额外付出的时间成本高多了。
missdeer
2019-12-01 16:57:59 +08:00
Qt 静态编译,也就一个 exe 啊
zjyl1994
2019-12-01 17:18:26 +08:00
Qt 吧,如果觉得零碎文件多,有专门做绿色软件的工具,可以把运行库和本体压成一个 exe
zuoshou
2019-12-01 17:33:58 +08:00
可以的胸弟
AAdalao
2019-12-01 19:33:07 +08:00
@Jirajine 也许是我打包方式不对? QT 编译出来不是带着十几个名字巨长的 dll 吗
AAdalao
2019-12-01 19:38:29 +08:00
@missdeer 我接触的 qt 主要是 pyqt5,没用过 qt creator 和 qmake,编译都是靠 pyinstaller,编出来的都很惨,拖家带口的。。
salamanderMH
2019-12-01 19:42:31 +08:00
WPF 也简单的,UI 部分就是学个 XML,之前做个项目: https://github.com/salamander-mh/SalamanderWnmp
cyrbuzz
2019-12-01 20:21:28 +08:00
PyQt 用 pyinstaller 可以做单 exe 的打包。
yujincheng08
2019-12-01 21:10:20 +08:00
Qt 静态编译(推荐用 MSYS2 弄静态编译环境,很快),再用 UPS 压缩一下,最后也就几兆的东西
ysc3839
2019-12-01 23:36:47 +08:00
体积小和功能全很难同时拥有。
一定要追求体积的话,最终可能会变成自己写了一大堆界面渲染的代码,还毫无扩展性(比如说界面布局都写死在代码中)。
具体选择哪种方案还是看你想不想重复造轮子了。

选择 C# WPF 可以让最终可执行文件的体积比较小,不过我认为不能算真的小,因为大部分代码在 .Net Framework 里面。
关于第四点,你的理解可能有误,DirectUI 大概是指直接在画布上绘图,而不使用系统提供的 UI 组件(大概可以理解成 Web 开发不使用 html element,而是用 canvas 绘图)。
Qt , duilib 和 WPF 都是使用 DirectUI 的界面框架。
augustheart
2019-12-02 11:35:37 +08:00
如果你最后想选 duilib 的话,不用想多,都是大同小异。只是自己的项目的话随便找个用就是了。
反正你用哪个版本的 duilib 最后都要修 bug,那么简单的代码看得懂 c++都能修。
augustheart
2019-12-02 11:37:14 +08:00
如果你只是要个加速球,直接 updatelayeredwindow 就行了,用不上界面库的。
前面 LayeredWindow,后面上 DirectX 渲染,小球想怎么转就怎么转
AAdalao
2019-12-02 11:54:50 +08:00
@augustheart 想用 dui 是看上自绘自由度高,但又不想手撸组件,改天想加个 tableview 发现没有就坑死自己了
augustheart
2019-12-02 14:29:26 +08:00
@AAdalao 你先想清楚你到底要拿界面库做什么啊。如果只是做个加速球,我的看法就是不要浪费时间研究界面库。直接 api 上就行。
顺便,duilib 做 tabview 还是比较容易的,因为代码简单,就算没有的控件自己倒腾一下也出来了。实际上 duilib 自带控件全是白板(没有任何预置的样式),都得自己从图片做素材。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/624757

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX