2011-06-08 144 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