我不知道如何直接與開羅(C語言)繪製根窗口在X11環境,以使小部件。我已經複製了tint2代碼的一些部分,但是它非常龐大,我得到的唯一結果並不令人滿意。 我會很高興有一個完整的工作示例代碼,或至少一些提示或小程序來學習。 謝謝你們!如何直接在桌面上繪製?
回答
「底部」窗口是根窗口。問題是,在某些桌面環境中,我們在根窗口頂部有窗口,所以如果您更改根窗口,則不會看到您的更改:您需要更改頂部的窗口。
這個程序做了你問什麼:在根窗口的平局。爲了測試它,我建議你:
- CTRL + ALT + F1
- 以root身份登錄
- 停止您的桌面環境( 「/etc/init.d/gdm停止」,「在/ etc/init.d中/ KDM停止」或任何需要在你的發行版)
- X -noreset -retro &
- DISPLAY =:0.0的xterm &
- DISPLAY =:0.0的metacity &
然後,再回到X(Ctrl + Alt + F7或可能F8),並運行該程序。
如果您希望藉助Nautilus的頂部窗口,你需要找出它的窗口ID,然後用它作爲‘W’的變量。該「xwininfo」命令可以幫助你測試...
#include <assert.h>
#include <stdio.h>
#include <X11/Xlib.h>
#include <cairo.h>
#include <cairo-xlib.h>
int width, height;
void draw(cairo_t *cr) {
int quarter_w = width/4;
int quarter_h = height/4;
cairo_set_source_rgb(cr, 1.0, 0.0, 0.0);
cairo_rectangle(cr, quarter_w, quarter_h, quarter_w * 2, quarter_h * 2);
cairo_fill(cr);
}
int main() {
Display *d = XOpenDisplay(NULL);
assert(d);
int s = DefaultScreen(d);
Window w = RootWindow(d, s);
width = DisplayWidth(d, s);
height = DisplayHeight(d, s);
cairo_surface_t *surf = cairo_xlib_surface_create(d, w,
DefaultVisual(d, s),
width, height);
cairo_t *cr = cairo_create(surf);
XSelectInput(d, w, ExposureMask);
draw(cr);
XEvent ev;
while (1) {
XNextEvent(d, &ev);
printf("Event!\n");
if (ev.type == Expose) {
draw(cr);
}
}
cairo_destroy(cr);
cairo_surface_destroy(surf);
XCloseDisplay(d);
return 0;
}
這對我有用。我能夠通過使用xwininfo獲取窗口ID,然後將RootWindow()行更改爲:'Window w =(Window)0x2400041;',使用您自己的值作爲ID 。我注意到的一件事是它不適用於每個窗口。使用桌面和Chrome的ID不起作用。你有什麼想法,爲什麼? – gsingh2011
其實,有趣的是,當我更換標籤頁時,我在Chrome上看到紅色方塊,並在瞬間消失... – gsingh2011
我的猜測是應用程序只是繪製在矩形的頂部。你不能真正開始繪製另一個應用程序的窗口,因爲你不知道他們什麼時候再次繪製所做的事情。如果你想用桌面背景做一些奇特的事情,那麼我建議你看一下任何應用程序的源代碼,然後對其進行修改。或者只是殺了它:) – pzanoni
- 1. 在桌面上直接繪製?
- 2. 如何直接在Windows桌面上繪製C#?
- 3. 如何在桌面上繪製文字?
- 4. MacOSX /可可:如何更改桌面內容視圖/如何直接在桌面上繪製背景?
- 5. C#:直接在桌面上繪畫時避免桌面屏幕刷新
- 6. 如何在Lion中繪製桌面?
- 7. 直接繪製到面板
- 8. NSWindow在桌面圖標上繪製
- 9. 在桌面上的圖標下繪製
- 10. 直接在桌面上執行Dalvik VM
- 11. 在C中繪製桌面#
- 12. 如何在Windows桌面上繪製文字?
- 13. 如何正確在桌面上繪製矩形的問題
- 14. 直接在matplotlib圖上繪製箭頭
- 15. 如何直接在屏幕上繪圖
- 16. 如何在iPhone上垂直繪製NSString?
- 17. 如何在HighCharts上繪製垂直線?
- 18. 如何在臉上繪製垂直線
- 19. 如何在AS3上繪製直線
- 20. 繪製桌面背景(WIN32)
- 21. 如何在windows中直接在屏幕上繪製?
- 22. 如何使用wxpython直接在屏幕上繪製?
- 23. 在Formstack上直接從桌面以CSS上傳圖片
- 24. 在桌面中間繪製圓圈
- 25. 在直方圖上繪製直線
- 26. 在Mac OS X的桌面上繪圖
- 27. 使用C#在桌面上繪圖#
- 28. 定製桌面上
- 29. 如何繪製在一個平面上
- 30. 桌面直播
我不知道,如果直接在桌面上繪製是做到這一點的最好辦法。你知道你可以在X11中使用沒有邊框/標題欄的窗口,並將它們設置爲永遠不會最小化..並且位於堆棧的底部。我認爲這是大多數小部件所做的。 –
這裏有一個類似的線程有一個鏈接,我的幫助: http://stackoverflow.com/questions/1934442/drawing-on-the-x-root-window – CommonSense
但如果這就是你想要看什麼xosd和xsnow ..雖然他們不使用開羅,只是xlib。 –