C++ 在linux上使用桌面作为画布

C++ 在linux上使用桌面作为画布,c++,linux,user-interface,desktop,x11,C++,Linux,User Interface,Desktop,X11,我想知道是否有人能帮我。我有一个为linux克隆极客工具的计划。但我不知道你们是否可以用linux桌面作为画布来绘制文本等。我试着用谷歌搜索,但什么也没找到。我需要做的是基本上能够在桌面的某些部分上绘制文本,这样看起来就像它们是墙纸的一部分(来自c++)。或者可以创建无边界、透明的窗口,这些窗口可以点击并始终位于背景上。如果有人能告诉我从哪里开始,我会非常高兴。 提前感谢您的帮助:Linux几乎总是使用X11(Gnome/KDE是更高级的API)。在X11上,“桌面”称为“根窗口”。所以,在上


我想知道是否有人能帮我。我有一个为linux克隆极客工具的计划。但我不知道你们是否可以用linux桌面作为画布来绘制文本等。我试着用谷歌搜索,但什么也没找到。我需要做的是基本上能够在桌面的某些部分上绘制文本,这样看起来就像它们是墙纸的一部分(来自c++)。或者可以创建无边界、透明的窗口,这些窗口可以点击并始终位于背景上。如果有人能告诉我从哪里开始,我会非常高兴。

提前感谢您的帮助:

Linux几乎总是使用X11(Gnome/KDE是更高级的API)。在X11上,“桌面”称为“根窗口”。所以,在上面画画。

保持它不变,所以没有其他人写同样的东西,这是不正确的

没有“linux桌面”或“linux墙纸”这样的概念。你不在Windows世界了。Linux中的图形环境由多种系统驱动:GNOME、KDE、xfce等。它们中的每一个(以及它们的每个主要版本)都有自己访问桌面的方式


*“etc”不是一个图形环境,而是一个“等等”短语。

我见过compiz解决方案能够实现类似的功能。Unfotunaly compiz不是一个很好的文档,但可能会让您开始使用它

如果您想针对特定的桌面环境,请查看GNOME的gdesklets或KDE的plasma小部件。或者你可以像MSalters所说的“裸机”,直接绘制到根窗口(例如检查)

或者可以提供帮助,而不是从头开始。

KDE Plasma桌面支持所谓的活动,这些活动是用于不同桌面类型(C++)的模块。我认为这是一个很好的观点,有一个简单而完整的基础来做类似的事情。

你已经接受了部分答案,但我希望你仍然会阅读这篇文章

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

  • 根像素贴图设置(墙纸),它不是在根窗口的背景上绘制的
  • 通过用另一个基本级别的窗口阻塞根窗口来丰富桌面背景(例如可单击的图标)
如果你只想画背景,只有背景对你来说才重要。但是,如果您还想阅读背景,例如真实的透明度,那么第一点也会起作用

背景绘图:

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

读取根背景(pixmap):

这更难。窗口像素的原始查询将失败,因为所有前景窗口也是根窗口的一部分;因此,这使得截图很容易,但无法获得真实背景

然而,根pixmap的全局名称有一个约定(由任何体面的背景pixmap设置程序使用)。可以通过查询该名称找到pixmap。但是,如果背景设置程序很差劲并且不遵守该规则,或者背景不是一个像素贴图,而只是一个模式或其他任何东西,情况就会变得很糟糕

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

最后是实现:

是的,这两个方面都有一个实现。退房 在该归档文件(即GPL)中,
getroot.c
取自xpenguins,不依赖于其他xpenguins代码。 另外,从
rootvis.c
的第144行开始,您将找到获取背景pixmap的代码


玩得开心

这是一个非常有趣的问题。我希望你能找到一个解决方案。我正在考虑在gnome上使用Desklet,但我一点也不喜欢它们,所以我认为我会使用“裸机”,因为它应该工作得更好,并且与所有基于x11的环境兼容。谢谢你的教程,我从学校回来后会去看看:]教程链接断了。这里有一个存档版本:它过去工作得很好,但许多现代桌面环境(Gnome、KDE)将“桌面”实现为一个位于根窗口正上方的窗口,因此实际的根窗口可能会被遮挡。在这种情况下,您可能需要研究更适合环境的东西。对不起,downvote,因为它在现代桌面系统上几乎总是失败的。断开的链接。请把这个修好。