Разница между Gdk.Window, GtkWindow и GWindow в lablgtk

В Lablgtk есть (как минимум) три типа оконно-названных модулей:

  • Gdk.Window
  • GtkWindow
  • GWindow

В чем разница между ними, и как я могу перейти от одного к другому?

1 ответ

Решение

GTK изначально был для систем X11. В X11 "окно" - это прямоугольная область, на которой можно рисовать и выбирать события. Они могут быть вложены в дерево с "корневым окном" вверху для всего экрана. Gdk.window это тонкая оболочка вокруг окна X11, но достаточно абстрактная для поддержки бэкэндов не-X11.

Окно GTK - это то, что пользователь может считать окном - изменяемая область экрана с заголовком, рамкой и т. Д. Фактически, это, вероятно, окно X11, предоставляемое диспетчером окон, содержащим заголовок и рамку, и другой X11. окно для области содержимого. Это внутреннее окно может содержать подокна, например, одно для каждой кнопки. Тем не менее, я думаю, что современный GTK обычно не заботится о подокнах и управляет всем сам, чтобы избежать мерцания.

Gtk.window Gtk.obj представляет объект C, предоставленный библиотекой GTK C. Функции, предоставляемые библиотекой C, доступны в GtkWindow.Window,

Тем не менее, объект C обычно оборачивается GWindow.window класс для предоставления ему OO OCaml API.

использование gtk_window#misc#window чтобы получить окно GDK из GWindow.window,

Другие вопросы по тегам