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

桌面透明窗体方案求推荐

  •  1
     
  •   AAdalao · 2019-12-01 12:06:35 +08:00 · 5218 次点击
    这是一个创建于 1819 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    选择 C# WPF 可以让最终可执行文件的体积比较小,不过我认为不能算真的小,因为大部分代码在 .Net Framework 里面。
    关于第四点,你的理解可能有误,DirectUI 大概是指直接在画布上绘图,而不使用系统提供的 UI 组件(大概可以理解成 Web 开发不使用 html element,而是用 canvas 绘图)。
    Qt , duilib 和 WPF 都是使用 DirectUI 的界面框架。
    augustheart
        15
    augustheart  
       2019-12-02 11:35:37 +08:00
    如果你最后想选 duilib 的话,不用想多,都是大同小异。只是自己的项目的话随便找个用就是了。
    反正你用哪个版本的 duilib 最后都要修 bug,那么简单的代码看得懂 c++都能修。
    augustheart
        16
    augustheart  
       2019-12-02 11:37:14 +08:00
    如果你只是要个加速球,直接 updatelayeredwindow 就行了,用不上界面库的。
    前面 LayeredWindow,后面上 DirectX 渲染,小球想怎么转就怎么转
    AAdalao
        17
    AAdalao  
    OP
       2019-12-02 11:54:50 +08:00
    @augustheart 想用 dui 是看上自绘自由度高,但又不想手撸组件,改天想加个 tableview 发现没有就坑死自己了
    augustheart
        18
    augustheart  
       2019-12-02 14:29:26 +08:00
    @AAdalao 你先想清楚你到底要拿界面库做什么啊。如果只是做个加速球,我的看法就是不要浪费时间研究界面库。直接 api 上就行。
    顺便,duilib 做 tabview 还是比较容易的,因为代码简单,就算没有的控件自己倒腾一下也出来了。实际上 duilib 自带控件全是白板(没有任何预置的样式),都得自己从图片做素材。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1078 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:05 · PVG 03:05 · LAX 11:05 · JFK 14:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.