桌面透明窗体方案求推荐 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AAdalao
V2EX    C++

桌面透明窗体方案求推荐

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

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

    功能逻辑打算用 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 压缩一下,最后也就几兆的东西
    td width="10" valign="top">
    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     Solana     1394 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 84ms UTC 17:03 PVG 01:03 LAX 09:03 JFK 12:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86