gtk与xlib之间相关连接

一、首先说一下gtk、qt与xlib之间的关系:

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。

时间: 2024-10-14 07:00:25

gtk与xlib之间相关连接的相关文章

类内与类之间相关属性耦合采取刷新的讨论

标题有点看不懂,说简单点,第一种情况就是类A与类B两个类.其中类B需要类A的一个数据,并且到A中的数据进行更改时,类B需要被通知,进行刷新修改本地保存的类A中的相关属性.懂设计模式的朋友一看就知道可以用Observe观察者模式,将类B当成观察者,类A当成被观察者.即 A a; B b; a.addObserve(&b); a.update(); 当每次A的数据发生改变时,维护A的人需要手动去刷一把update来让A的所有观察者进行刷新,更新数据,这是一种方法.当然了,像我平时Qt开发,自然而然的

Docker学习笔记(9-2)Docker容器之间的连接

学习目标: 容器之间的连接 准备工作 FROM ubuntu:14.04 RUN apt-get install -y ping RUN apt-get update RUN apt-get install -y nginx RUN pat-get install -y curl EXPOSE 80 CMD /bin/bash #构建测试镜像 docker build -t lexiaofei/cct . 1.允许所有容器互联 --icc=true 默认 $ docker run -it --n

List集合之间的连接

之前学习数据库的时候总结过数据库中表和表之间的连接<数据库中多表的连接>,现在做的项目需要要调用其他系统WCF服务返回List集合,从自己系统再返回一部分集合,将这两种集合链接起来再将"连接的集合'返回到界面. 通过查阅资料,有两种方法可以实现List集合之间的连接:一种是利用Linq语句,另外一种是利用lamda表达式,现在总结一下: 数据实体: /// <summary> /// 考试实体 /// </summary> public class Exam

创建数据库之间的连接

数据库之间的连接:(db_link) 通过一台数据库查询另一台数据的数据 服务端: 开启监听 开启数据库fsdb 使用测试数据:system.xxx 表 客户端: 创建:tnsnames.ora  #tns 名字p1 登录到本地一台数据库(非fsdb) 创建db_link: create database link fsdb_link connect to system identified by oracle using 'p1'; #create database link db_link的

浅谈Oracle表之间各种连接

Oracle表之间的连接分为三种: 1.内连接(自然连接) 2.外连接 2.1.左外连接(左边的表不加限制,查询出全部满足条件的结果) 2.2.右外连接(右边的表不加限制,查询出全部满足条件的结果) 2.3.全外连接(左右两边表均不加限制) 3.自连接(同一张表内的连接) SQL的标准写法: select table1.column,table2.column from table1 [inner|left|right|full] join table2 on table1.column1 =

oracle表之间的连接之-----&gt;哈希连接(Hash Join)

哈希连接(HASH JOIN)是一种两个表在做表连接时主要依靠哈希运算来得到连接结果集的表连接方法. 对于排序合并连接,如果两个表在施加了目标SQL中指定的谓词条件后得到的结果集很大而且需要排序,则排序合并连接的执行效率一定不高:而对于嵌套循环连接,如果驱动表所对应的驱动结果集的记录数很大,即便在被驱动表的连接列上存在索引,此时使用嵌套循环连接的执行效率也会同样不高.为了解决这个问题,于是ORACLE引进了哈希连接.在ORACLE 10g及其以后的版本中,优化器 (实际上是CBO,因为哈希连接仅

oracle表之间的连接之------&gt;排序合并连接(Merge Sort Join)

排序合并连接 (Sort Merge Join)是一种两个表在做连接时用排序操作(Sort)和合并操作(Merge)来得到连接结果集的连接方法. 对于排序合并连接的优缺点及适用场景如下: a,通常情况下,排序合并连接的执行效率远不如哈希连接,但前者的使用范围更广,因为哈希连接只能用于等值连接条件,而排序合并连接还能用于其他连接条件(如<,<=,>.>=) b,通常情况下,排序合并连接并不适合OLTP类型的系统,其本质原因是对于因为OLTP类型系统而言,排序是非常昂贵的操作,当然,如

erlang与c之间的连接

http://blog.chinaunix.net/uid-22566367-id-382012.html erlang与c之间的连接参考资料:网络资料作者:Sunny    在Programming Erlang书上的第十二章中实现了elang与c语言之间的连接,本人觉得那个例子还是有点复杂,在此,本人举一个更简单的例子.而且在那本书上的Page 161第7行,有一个错误.书上写的是:    Port ! {PidC, {connect, Pid1}}    把端口连接进程PID从Pid1改为

Docker使用Link在容器之间建立连接

原文链接:Docker使用Link在容器之间建立连接 在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务.比如这么一种情况:我们需要一个容器来提供mysql的数据库服务,而另外两个容器作为客户端来连接使用mysql数据库服务.下面我们就来看看Docker是怎样通过Link来实现这种功能的. 1. 这里我们首先创建两个容器image,一个用来模拟mysql数据库,另外一个使用mysql的client来模拟一些使用mysql服务的