gpt4 book ai didi

c++ - 在 Linux 上使用桌面作为 Canvas

转载 作者:IT王子 更新时间:2023-10-29 01:02:50 24 4
gpt4 key购买 nike


我想知道是否有人可以帮助我。我有一个为 Linux 制作极客工具克隆的计划。但我不知道你是否可以以某种方式使用 linux 桌面作为 Canvas 来绘制文本等。我​​试图用谷歌搜索它,但我什么也没找到。我需要做的基本上是能够在桌面的某些部分绘制文本,这样它们看起来就像是墙纸的一部分(来自 C++)。或者能够创建无边界、透明的窗口,这些窗口可以被点击并始终在背景上。如果有人能给我任何从哪里开始的指示,我会很高兴。
提前感谢您的帮助:]

最佳答案

您已经接受了部分答案,但我希望您仍会阅读此内容。

的确,按照惯例桌面背景是根窗口。然而,在典型的现代桌面上有两个重要的机制:

  • 根像素图设置(墙纸),绘制在根窗口的背景上
  • 通过用另一个基本级别的窗口遮挡根窗口来丰富桌面背景(例如可点击的图标)

如果您只想在背景上绘制,那么只有后者对您很重要。但是,如果您还想阅读背景,例如为了真正的透明,那么第一点也很重要。

绘制到背景:

程序 xsnow 和 xpenguins 的作者是第一个处理这个问题的人。他们编写了一个巧妙的函数,可以派生出存在的 KDE 和 Gnome 桌面窗口。由于其他阻碍根窗口的窗口管理器倾向于遵守这些事实上的标准,因此它的工作非常可靠。使用他们的代码,您可以立即知道要绘制到哪个窗口。

读取根背景(像素图):

这更难。对窗口像素的简单查询将失败,因为所有前景窗口也是根窗口的一部分;所以这使得截屏变得容易,但无法获得真实的背景。

然而,对于根像素图的全局名称有一个约定(由任何体面的背景像素图 setter 使用)。可以通过查询该名称找到像素图。然而,如果背景 setter 很糟糕并且不遵守该规则,或者背景不是像素图,而只是图案或其他任何东西,它就会变得令人讨厌。

我最近才发现的第二个选项是使用 XDBE(双缓冲区)扩展来获取根窗口的背景。这非常干净,只需要两三行代码就可以在任何情况下使用。 但是 Xorg 认为 XDBE 已被弃用(或者更准确地说,即将被弃用)。所以我不知道仅将它用于该目的是否仍然是一个好主意。但我可以根据要求给你代码!

最后实现:

是的,两者都有可用的实现。查看http://fopref.meinungsverstaerker.de/xmms-rootvis/在那个 GPL 存档中,getroot.c 取自 xpenguins,不依赖于其他 xpenguins 代码。此外,从 rootvis.c 的第 144 行开始,您将找到获取背景像素图的代码。

玩得开心!

关于c++ - 在 Linux 上使用桌面作为 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2288456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com