Шаг 9 - Пример программы, работающей с контейнером-таблицей

Табличка будет такая:

0+----1----2
 |----|----|
1+----+----+

Постейший вариант. Две кнопки мы поставим в два верхних квадрата, а третью растянем на два нижних квадрата. Вот код:

#include <gtk/gtk.h>

// Обработчик события нажатия на кнопки

void callback (GtkWidget * widget, gpointer data)
{
	g_print ("Усем здрасть - нажата кнопка %s\n", (char *) data);
}

// Как это принято, обработчик, завершающий программу
gint delete_event (GtkWidget * widget, GdkEvent * event, gpointer data)
{
	gtk_main_quit ();
	return (FALSE);
}

int main (int argc, char *argv[])
{
	GtkWidget *window;
	GtkWidget *button;
	GtkWidget *table;

	gtk_init (&argc, &argv);

	/* Новое окно */
	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

	/* Наводим красоту */
	gtk_window_set_title (GTK_WINDOW (window), "Table");

	/* Ну, а это лучше никогда не забывать */
	gtk_signal_connect (GTK_OBJECT (window), "delete_event",
		GTK_SIGNAL_FUNC (delete_event), NULL);

	/* Опять-таки чтобы было покрасивше */
	gtk_container_set_border_width (GTK_CONTAINER (window), 20);

	/* Табличку состряпаем */
	table = gtk_table_new (2, 2, TRUE);

	/* Без этого табличку мы не увидим */
	gtk_container_add (GTK_CONTAINER (window), table);

	/* Первую кнопочку */
	button = gtk_button_new_with_label ("button 1");

	/*
	* Маленькое ухищрение... Чтоб не придумывать
	* для каждой кнопочки свой обработчик, вставим название
	* кнопочки в вызов обработчика 
	*/
	gtk_signal_connect (GTK_OBJECT (button), "clicked",
		GTK_SIGNAL_FUNC (callback), (gpointer) "button 1");

	/* Всунем кнопочку в таблицу */
	gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 0, 1);
	gtk_widget_show (button);

	/* То же самое для второй кнопки */
	button = gtk_button_new_with_label ("button 2");
	gtk_signal_connect (GTK_OBJECT (button), "clicked",
		GTK_SIGNAL_FUNC (callback), (gpointer) "button 2");
	gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 0, 1);
	gtk_widget_show (button);

	/* Теперь кнопку "Quit" */
	button = gtk_button_new_with_label ("Quit");

	/* По нажатию кнопки завершаем программу. */
	gtk_signal_connect (GTK_OBJECT (button), "clicked",
		GTK_SIGNAL_FUNC (delete_event), NULL);

	/* Вставим кнопку в два нижних квадрата */
	gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 2, 1, 2);

	gtk_widget_show (button);
	gtk_widget_show (table);
	gtk_widget_show (window);
	gtk_main ();

	return 0;
}

Вот так. Смотрите, разбирайтесь...


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Аванесов Самвел.