2011-06-08 143 views
5

我目前正在为我的个人系统编写桌面集成应用程序,它应该像通常的桌面小部件引擎(screenlets,gdesklets,谷歌小工具)一样行事。它应该从互联网上给我一个关于我的系统的不同信息的完整概述,并最终在我的桌面上将它们可视化。它应该集中我所有的日常必要信息。桌面集成应用程序(桌面小工具)

最简单的方法肯定是为其中一个已知的桌面小部件引擎编写我自己的小部件,但我更愿意从头开始编写它。因此,我目前正在寻找一些实现提示,我如何在桌面上构建一个全局视图,该视图没有用边框,标题栏和其他窗口管理器进行装饰,并且没有背景色。特殊透明度X%效果不是必需的,需要compiz。

一个很好的例子就是与附加的libcario支持绘图。我还会选择一个更大的GUI工具包,比如GTK +或QT。直接使用更复杂的X11 API接口也是一种选择。优选的语言是C和C++。

如果有人能够分享他的知识,如果他已经在该领域有过类似的经历,我会很高兴。

回答

1

你没有说你是哪个操作系统的目标,但我假设一个Linux发行版。

首先你的窗口管理器必须支持无边界和未装饰的窗口。

然后你需要选择语言(c和C++是完全不同的)。如果你选择了 C++,那么Qt接缝就是一个明显的选择。

对于Qt中,它很容易创建一个无国界的窗口:Making a borderless window with for Qt

+0

X服务器从不关心边框和装饰。如果窗口获得边框和/或装饰,则发生的情况是,窗口管理器创建具有边框和装饰的附加尺寸,将此窗口修改为装饰客户端窗口的父窗口,并在客户端周围绘制装饰和边框。这就是所谓的重新设置窗口管理器,客户端可以通过override-redirect标志来阻止它。 – datenwolf 2011-06-08 11:08:41

+0

是的,它适用于Linux,并不需要处理可移植性问题。对于我自己来说,我主要使用哪种语言并不重要。我很喜欢这两种。我更支持所有不同的工具包或X-Server提供的受支持的API。 因此这个链接也是非常有前途的。 Thx – Ruun 2011-06-08 12:15:57

2

有两种方法来建立一个无国界的窗口:(1)完全绕过窗口管理器,以及使用该窗口管理器(2)。

第一个很简单,但有限制(您必须自己管理例如窗口拖动和放置在虚拟桌面上)。这是通过创建一个带有override-redirect标志的窗口完成的。

第二种方法涉及设置窗口属性(如在xprop)称为WM提示。如果你想用原始的Xlib来做,你需要研究ICCCM。大多数工具包(如gtk +)都有用于提示WM提示的API。

对于简单的是或否“透明度”,有XShape API(这在技术上是一个扩展,也就是X11的一个可选部分,但它几乎遍布各处)。或者您可以创建一个背景设置为None的窗口(但这种方法可能会在合成窗口管理器中出现问题,即Compiz)。或者你可以完全避开应用程序窗口,直接在(虚拟)根窗口上绘制。据推测libcairo会让你这样做,但我不熟悉它。

希望这会有所帮助。

+0

这非常有帮助,我会检查它。用libcairo界面绘制根窗口会很好,因为我只需要一个窗口(我的绘画区域)。 – Ruun 2011-06-08 12:12:31