gtk與xlib之間相關連接

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

wKioL1S_Bo-RXozMAAAvvcsqOXc157.gif

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

二、KDE、GNOME、QT和GTK直接關係:

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

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


三、通常在xlib函數中需要指定特定的Display以及相應widget的Window(xwindow id)。

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

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


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

Display可以通過XOpenDisplay(NULL)或者GDK_WINDOW_XDISPLAY。

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

例如:

    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。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章