Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux: ПолноС руководство». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 132

Автор ДСнис ΠšΠΎΠ»ΠΈΡΠ½ΠΈΡ‡Π΅Π½ΠΊΠΎ

 /* О ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… ячССк ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ послС этого листинга */

 gtk_table_attach_defaults(GTK_TABLE(table),

  label, 0, 1, 0, 1);

 gtk_widget_show(label);

 label = gtk_label_new("DNS #1: ");

 gtk_table_attach_defaults(GTK_TABLE(table),

  label, 0, 1, 1, 2);

 gtk_widget_show(label);

 label = gtk_label_new("DNS #2: ");

 gtk_table_attach_defaults(GTK_TABLE(table),

  label, 0, 1, 2, 3);

 gtk_widget_show (label);


 /* ЗаполняСм наш массив ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π°. По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с Delphi,

  я Π½Π°Π·Π²Π°Π» массив edit[]*/

 for (i=0; i<3; i++) {

  /* НовоС ΠΏΠΎΠ»Π΅ */

  edit[i] = gtk_entry_new();

  /* Если Π·Π°Π±Ρ‹Ρ‚ΡŒ этот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅

   смоТСт ввСсти */

  gtk_entry_set_editable(GTK_ENTRY(edit[i]), 1);

  /* ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΎΠ΄Π½Ρƒ для всСх Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π½Π° сигнал activate -

   Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Enter*/

  gtk_signal_connect(GTK_OBJECT(edit[i]), "activate",

   GTK_SIGNAL_FUNC(enter_callback), edit[i]);

  /* ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ edit[i] Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ */

  gtk_table_attach_defaults (GTK_TABLE(table),

   edit[i], 1, 2, i, i+1);

  /* ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ */

  gtk_widget_show(edit[i]);

 }


 /* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ "OK", ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ,

  опрСдСляСм Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ */

 button = gtk_button_new_with_label("OK");

 gtk_table_attach_defaults(GTK_TABLE(table),

  button, 2, 3, 0, 1);

 gtk_signal_connect(GTK_OBJECT(button), "clicked",

  GTK_SIGNAL_FUNC(writetofile), NULL);

 gtk_widget_show(button);


 /* Π’ΠΎ ΠΆΠ΅ самоС для ΠΊΠ½ΠΎΠΏΠΊΠΈ Quit */

 button = gtk_button_new_with_label("Quit");

 gtk_table_attach_defaults(GTK_TABLE(table),

  button, 2, 3, 2, 3);

 gtk_signal_connect(GTK_OBJECT(button),"clicked",

  GTK_SIGNAL_FUNC(delete_event), NULL);

 gtk_widget_show(button);


 gtk_widget_show(table); /* ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ */

 gtk_widget_show(window); /* ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ */


 /* ЗапускаСм GTK-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ */

 gtk_main();


 return 0;

}

Π― старался ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Π½ΠΎ всС ΠΆΠ΅ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π² Ρ‚ΡƒΠΌΠ°Π½Π΅. Π­Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ячССк. Рассмотрим Π½Π°ΡˆΡƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ 3Γ—3:

table = gtk_table_new(3, 3, TRUE);

0      1    2  3

 Domain ПолС OK

1

 DNS1   ПолС

2

 DNS2   ПолС Quit

3

Π‘Π½Π°Ρ‡Π°Π»Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΠΎ X, Π·Π°Ρ‚Π΅ΠΌ β€” ΠΏΠΎ Y. Π’ΠΎΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠ½ΠΎΠΏΠΊΠΈ OK: 2, 3, 0, 1. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ располоТСна Π² послСднСм столбцС (ΠΌΠ΅ΠΆΠ΄Ρƒ 2 ΠΈ 3), Π½ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС (ΠΌΠ΅ΠΆΠ΄Ρƒ 0 ΠΈ 1).

gtk_table_attach_defaults(GTK_TABLE(table), button,

 2, 3, 0, 1);

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ GtkTable я Π½Π΅ Π²ΠΈΠΆΡƒ смысла: основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, я Π΄ΡƒΠΌΠ°ΡŽ, Π²Π°ΠΌ понятны β€” это созданиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π΅Π΅ размСрности ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π²ΠΈΠ΄ΠΆΠΈΡ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ gtk_table_attach_defaults(). Π•Ρ‰Π΅ Ρ€Π°Π· напомню ΠΎ нСобходимости отобраТСния Π²ΠΈΠ΄ΠΆΠΈΡ‚ΠΎΠ², ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΈ самой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

gtk_widget_show (table);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

$ gcc resolv.с -о resolv `gtk-config --cflags` `gtk-config --libs`

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° gtk-config сообщаСт компилятору всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ GTK.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ

#include <gtk/gtk.h>

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² GTK находятся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, gtk-1.2, Π½ΠΎ это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния β€” всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° gtk-config.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ этого ΠΏΡƒΠ½ΠΊΡ‚Π° пСрСчислим события, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Π΅ для ΠΊΠ½ΠΎΠΏΠΎΠΊ (Ρ‚Π°Π±Π»ΠΈΡ†Π° 23.3).


Бобытия ΠΊΠ½ΠΎΠΏΠΎΠΊ Π’Π°Π±Π»ΠΈΡ†Π° 23.3

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ ОписаниС clicked Π©Π΅Π»Ρ‡ΠΎΠΊ pressed Кнопка Π½Π°ΠΆΠ°Ρ‚Π° ΠΌΡ‹ΡˆΡŒΡŽ (ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½Π°) released Кнопка ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½Π° enter Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΊΠ½ΠΎΠΏΠΊΠΈ leave Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Π²Ρ‹ΡˆΠ΅Π» Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΊΠ½ΠΎΠΏΠΊΠΈ

23.4.3. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ Π±Ρ‹Π²Π°ΡŽΡ‚ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ²: зависимыС (radio buttons) ΠΈ нСзависимыС (checkbuttons). ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ, поэтому для Π½ΠΈΡ… Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ Ρ‚Π΅ ΠΆΠ΅ события, Ρ‡Ρ‚ΠΎ ΠΈ для ΠΊΠ½ΠΎΠΏΠΎΠΊ.

НачнСм с нСзависимых ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

GtkWidget *gtk_check_button_new(void);

GtkWidget *gtk_check_button_new_with_label(gchar * label);

ΠŸΠ΅Ρ€Π²Π°Ρ создаСт ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Π±Π΅Π· надписи (Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ надпись ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ), Π° вторая β€” с надписью, которая ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ отобраТаСтся справа ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ. Π—Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ всСгда, ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π²ΠΈΠ΄ΠΆΠΈΡ‚Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ.

ЗависимыС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

GtkWidget *gtk_radio_button_new(GSList *group);

GtkWidget *gtk_radio_button_new_with_label(GSList *group,

 gchar *label);

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ group ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅. Π’ ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π³Ρ€ΡƒΠΏΠΏΡ‹ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ. Π“Ρ€ΡƒΠΏΠΏΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

GSList *gtk_radio_button_group(

 GtkRadioButton *radio_button);

Однако сущСствуСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ β€” Ρ‚Π°ΠΊ ΠΌΡ‹ сэкономим ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ссли Π³Ρ€ΡƒΠΏΠΏ ΠΌΠ½ΠΎΠ³ΠΎ:

button2 = gtk_radio_button_new_with_label(

 gtk_radio_button_group(GTK_RADIO_BUTTON(button1)),

 "button2");

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

void gtk_toggle_button_set_active(

 GtkToggleButton *toggle_button, gint state);

ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΊΠ½ΠΎΠΏΠΎΠΊ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ листинг дСмонстрируСт Ρ€Π°Π±ΠΎΡ‚Ρƒ с трСмя зависимыми ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡΠΌΠΈ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ GtkVBox.

Листинг 23.7. ЗависимыС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ

#include <gtk/gtk.h>

#include <glib.h>


gint close_application( GtkWidget *widget,

GdkEvent * event, gpointer data) {

 gtk_main_quit();

 return(FALSE);

}


int main(int argc, char *argv[]) {

 GtkWidget *window = NULL;

 GtkWidget *box1;

 GtkWidget *box2;

 GtkWidget *button;

 GtkWidget *separator;

 GSList *group;


 gtk_init(&argc,&argv);

 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);


 gtk_signal_connect(GTK_OBJECT(window), "delete_event",

 GTK_SIGNAL_FUNC(close_application), NULL);


 gtk_window_set_title(GTK_WINDOW(window),

  "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ дистрибутив");

 gtk_container_set_border_width(GTK_CONTAINER(window), 0);


 box1 = gtk_vbox_new(FALSE, 0);

 gtk_container_add(GTK_CONTAINER(window), box1);

 gtk_widget_show(box1);


 box2 = gtk_vbox_new(FALSE, 10);

 gtk_container_set_border_width(GTK_CONTAINER (box2), 10);

 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);

 gtk_widget_show(box2);


 button = gtk_radio_button_new_with_label(NULL, "Red Hat");

 gtk_box_pack_start(GTK_BOX(box2), button,

  TRUE, TRUE, 0);

 gtk_widget_show(button);


 group = gtk_radio_button_group(GTK_RADIO_BUTTON(button));

 button =

  gtk_radio_button_new_with_label(group, "Mandrake");

 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),

  TRUE);

 gtk_box_pack_start(GTK_BOX(box2), button,

  TRUE, TRUE, 0);

 gtk_widget_show(button);


 button = gtk_radio_button_new_with_label(

  gtk_radio_button_group(GTK_RADIO_BUTTON(button)),

  "ALT Linux");

 gtk_box_pack_start(GTK_BOX(box2), button,

  TRUE, TRUE, 0);

 gtk_widget_show(button);


 separator = gtk_hseparator_new();

 gtk_box_pack_start(GTK_BOX(box1), separator,

  FALSE, TRUE, 0);

 gtk_widget_show(separator);


 box2 = gtk_vbox_new(FALSE, 10);

 gtk_container_set_border_width(GTK_CONTAINER(box2), 10);

 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, TRUE, 0);

 gtk_widget_show(box2);


 button = gtk_button_new_with_label("OK");

 gtk_signal_connect_object(GTK_OBJECT (button),

  "clicked", GTK_SIGNAL_FUNC(close_application),

  GTK_OBJECT(window));

 gtk_box_pack_start(GTK_BOX (box2), button,

  TRUE, TRUE, 0);

 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);

 gtk_widget_grab_default(button);

 gtk_widget_show(button);

 gtk_widget_show(window);

 gtk_main();

 return(0);

}

Рис. 23.4. ЗависимыС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ

23.4.4. Бписок

Π’ΠΈΠ΄ΠΆΠΈΡ‚ CList прСдставляСт собой список, состоящий ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ. Π―Ρ‡Π΅ΠΉΠΊΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ списка ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ тСкстовыС значСния. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ячСйкС списка. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ список ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

GtkWidget *gtk_clist_new(gint columns);

GtkWidget *gtk_clist_new_with_titles(gint columns,

 gchar *titles[]);

ΠŸΠ΅Ρ€Π²Π°Ρ функция создаСт список Π±Π΅Π· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², Π° вторая с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ columns Π·Π°Π΄Π°Π΅Ρ‚ число ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнт Π² список ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

gint gtk_clist_prepend(GtkCList *clist, gchar *text[]);

gint gtk_clist_append(GtkCList *clist, gchar *text[]);