gtk與xlib之間相關鏈接

1、首先說一下gtk、qt與xlib之間的關係:服務器

wKioL1S_Bo-RXozMAAAvvcsqOXc157.gif

QT是直接調用xlib庫的,GTK並未直接調用xlib,而是使用更低層的函數庫GDK和Glib。這種結構使得Gtk能夠更方便地移植到其它系統上,或使用與XWindows系統無關的圖形庫。ide

2、KDE、GNOME、QT和GTK直接關係:函數

KDE和GNOME是窗口管理器,啓動他們後咱們進入了可視化操做(圖形界面),既然須要顯示圖形,天然少不了與X協議的服務器軟件打交道,既然QT和GTK進一步封裝了X協議,而且他們提供了更爲豐富的窗口及控制機制,因而在QT基礎上實現的窗口管理器叫KDE,在GTK基礎上實現的窗口管理器叫GNOME.spa

再次提示:KDE和GNOME並不僅是窗口管理器,同時提供了桌面、菜單等等。blog


3、一般在xlib函數中須要指定特定的Display以及相應widget的Window(xwindow id)。接口

爲了在Gtk應用中使用xlib相關函數,咱們須要找到在gtk與xlib之間的橋樑。get

Gtk是在Gdk的基礎上進行封裝和延伸的,Gdk也將經常使用的Xlib函數進行封裝,所以gdk爲gtk庫提供了與Xlib相關聯的函數,qt


在gdk/gdkx.h中能夠看到定義了GdkWindow與Xlib中結構的變量訪問,如GDK_WINDOW_XID獲得Window(xid),it

Display能夠經過XOpenDisplay(NULL)或者GDK_WINDOW_XDISPLAY。io

獲得這些後,想更變一下窗體控件的屬性就簡單了。

例如:

    GtkWidget *win = NULL;

    win = gtk_window_new (Gtk_WINDOW_TOPLEVEL);

    Display *display = XOpenDisplay(NULL);

    XResizeWindow (display, GDK_WINDOW_XID (win->window), 200, 200);  //更改win的size

   XFlush (display);   //即時刷新

可使用以下接口:

GtkWindow *win;

GdkWindow *window = gtk_widget_get_window(win);

const Window xwin = GDK_WINDOW_XID(window);

Display * const display=GDK_WINDOW_XDISPLAY(window);

來獲取Window 的id以及Display。

相關文章
相關標籤/搜索