| |
window = gtk_window_new(GTK_WINDOW_TOPLEVEL); button = gtk_button_new(); label = gtk_label_new("Hello, World!"); gtk_container_add(GTK_CONTAINER(button), label); gtk_container_add(GTK_CONTAINER(window), button); gtk_window_set_title(GTK_WINDOW(window), "Hello"); gtk_container_set_border_width(GTK_CONTAINER(button), 10);
Каждый виджет имеет функцию с именем "gtk_widgetname_new()", аналогичную конструктору в C++ или Java. Эта функция выделяет новый объект, инициализирует его и возвращает указатель на него. Все процедуры "_new()" возвращают GtkWidget* даже если они выделяют его подкласс; это сделано для удобства.
Как только у вас есть GtkWidget*, представляющий объект, вы можете манипулировать объектом, используя его методы. Все функции виджетов Gtk+ начинаются с имени типа, над которым они оперируют, и принимают указатель на этот тип в качестве первого аргумента. В вышеприведенном коде, "gtk_container_add()" принимает GtkContainer* в качестве первого аргумента. Макрос "GTK_CONTAINER()" транслирует тип GtkWidget*, а также выполняет проверку типов периода исполнения. Трансляция требуется из-за того, что C не понимает отношение наследования.
Как вы могли представить, GtkButton и GtkWindow -- оба подклассы GtkContainer. GtkContainer может содержать в себе любой другой виджет. Код создает окно верхнего уровня, помещает внутрь него кнопку, и помещает метку (строку текста) внутрь кнопки. Затем он устанавливает заголовок окна, и добавляет небольшой косметический бордюр вокруг кнопки.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |