lablgtk中Gdk.Window、GtkWindow和GWindow的区别

Difference between Gdk.Window, GtkWindow and GWindow in lablgtk

在 Lablgtk 中,有(至少)三种类型的 window 命名模块:

它们之间有什么区别,我怎样才能从一个转到另一个?

GTK 最初是为 X11 系统设计的。在 X11 中,"window" 是一个矩形区域,您可以在该区域上绘制和 select 事件。它们可以嵌套在树中,"root window" 位于整个屏幕的顶部。 Gdk.window 是围绕 X11 window 的薄包装器,但足够抽象以支持非 X11 后端。

GTK window 是用户认为的 window - 屏幕上可调整大小的区域,带有标题、边框等。事实上,这可能是 X11 window 由 window 管理器提供,包含标题和边框以及内容区域的另一个 X11 window。这个内部 window 可能包含 sub-windows,例如每个按钮一个。但是,我认为现代 GTK 通常不会理会 sub-windows 并自行管理所有内容以避免闪烁。

AGtk.window Gtk.obj表示GTK C库提供的Cobject。 C 库公开的函数在 GtkWindow.Window.

中可用

然而,C object 通常由 GWindow.window class 包装,以提供面向对象的 OCaml API。

使用 gtk_window#misc#windowGWindow.window 获取 GDK window。