#include <gtk/gtk.h>
/* новый обратный вызов. данные переданные этой функции
выводятся на stdout */
void callback( gtkwidget *widget,
gpointer data )
{
g_print ("hello again - %s was pressed\n", (gchar *) data);
}
/* другой обратный вызов */
gint delete_event( gtkwidget *widget,
gdkevent *event,
gpointer data )
{
gtk_main_quit ();
return false;
}
int main( int argc,
char *argv[] )
{
/* тип указателей на виджеты - gtkwidget */
gtkwidget *window;
gtkwidget *button;
gtkwidget *box1;
/* этот вызов присутствует во всех программмах gtk.
разбираются аргументы командной строки и возвращаются программме */
gtk_init (&argc, &argv);
/* создаём основное окно программмы */
window = gtk_window_new (gtk_window_toplevel);
/* новый вызов который устанавливает заголовок
* окна "hello buttons!" */
gtk_window_set_title (gtk_window (window), "hello buttons!");
/* определяем обработчика сигналов delete_event
* для выхода из gtk. */
g_signal_connect (g_object (window), "delete_event",
g_callback (delete_event), null);
/* устанавливаем ширину окантовки окна программмы */
gtk_container_set_border_width (gtk_container (window), 10);
/* создаём контейнер для упаковки виджетов.
реально контейнер не отображается, он используется как
инструмент для размещения виджетов */
box1 = gtk_hbox_new (false, 0);
/* помещаем контейнер в основное окно. */
gtk_container_add (gtk_container (window), box1);
/* создаём кнопку с надписью "button 1". */
button = gtk_button_new_with_label ("button 1");
/* размещаем кнопку "button 1" в качестве аргумента для функции обратного вызова,
для того, чтобы вызывать эту функцию при нажатии на кнопку.*/
g_signal_connect (g_object (button), "clicked",
g_callback (callback), (gpointer) "button 1");
/* вместо gtk_container_add, мы упаковываем кнопку
* в невидимый контейнер который был помещен в основное окно. */
gtk_box_pack_start (gtk_box(box1), button, true, true, 0);
/* обязательное действие для отображения сформированной кнопки */
gtk_widget_show (button);
/* повторяем те же самые действия для создания второй кнопки */
button = gtk_button_new_with_label ("button 2");
/* вызываем туже функцию но в качестве аргумента передаём вторую кнопку. */
g_signal_connect (g_object (button), "clicked",
g_callback (callback), (gpointer) "button 2");
gtk_box_pack_start(gtk_box (box1), button, true, true, 0);
/* порядок отображения виджетов неважен, но рекомендуется
последним вызывать отображение основного окна. */
gtk_widget_show (button);
gtk_widget_show (box1);
gtk_widget_show (window);
/* входим в gtk_main и ждем событий x сервера для начала выполнения действий! */
gtk_main ();
return 0;
}
|