ΠΠ°ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΠΊΠ½ΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠ΅ ΠΈ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ? ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠΊΠ½Π° Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ
void gtk_window_set_default_size(GtkWindow *window,
gint width, gint height);
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΈΡΠΈΠ½Ρ ΠΎΠΊΠ½Π° window ΡΠ°Π²Π½ΠΎΠΉ width, Π° Π²ΡΡΠΎΡΡ β height.
ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΎΠΊΠ½Π° Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ
void gtk_widget_set_uposition(GtkWidget *widget,
gint coord_x, gint coord_y);
ΠΡΡ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠΈΡΠ° β Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±ΡΠ» ΠΎΠΊΠ½ΠΎΠΌ.
ΠΠ΅ΡΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Π² ΡΠ°ΠΉΠ»Π΅ gtk/gtkwindow.h, Π° Π²ΡΠΎΡΠ°Ρ β Π² ΡΠ°ΠΉΠ»Π΅ gtk/gtkwidget.h:
#include <gtk/gtkwindow.h>
#include <gtk/gtkwidget.h>
...
gtk_window_set_default_size(window1, 200, 300);
gtk_wigdet_set_uposition(window1, 50, 50);
23.3.4. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΈΠ³Π½Π°Π»ΠΎΠ²
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΏΡΠ½ΠΊΡΡ, Π½ΡΠΆΠ½ΠΎ Π΅ΡΠ΅ ΡΠ°Π· ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ gtk_signal_connect(). ΠΠ°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ΅ΡΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
β¦ GtkObject *object β ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΡΠ»Π°Π½ ΡΠΈΠ³Π½Π°Π»;
β¦ const gchar *name β ΠΈΠΌΡ ΡΠΈΠ³Π½Π°Π»Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Β«destroyΒ»;
β¦ GtkSignalFunc func β ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, ΡΠΎ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»Π°;
β¦ gpointer data β Π»ΡΠ±ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΈΠ³Π½Π°Π»? ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠ» ΠΌΡΡΡ, ΠΎΠΊΠΎΠ½Π½Π°Ρ ΡΡΠ΅Π΄Π° ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π», ΠΎΠΏΠΎΠ²Π΅ΡΠ°ΡΡΠΈΠΉ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡΡΡ Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½Π°. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π»ΠΊΠ½ΡΠ» ΠΌΡΡΡΡ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠΈΠ³Π½Π°Π» ΠΎΠ± ΡΡΠΎΠΌ ΡΠ΅Π»ΡΠΊΠ΅. ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ½ΠΎ, Π½ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠΈΡΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΈΠ³Π½Π°Π», Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ: ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ (ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅), ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΈ callback-ΡΡΠ½ΠΊΡΠΈΡ. Π’Π°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° (ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ°ΠΌΠ° GTK):
β¦ GtkWidget *widget β Π²ΠΈΠ΄ΠΆΠΈΡ;
β¦ gpointer data β Π΄Π°Π½Π½ΡΠ΅.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ, Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΠΈ Π½Π΅ ΡΠΈΠ³Π½Π°Π» Β«destroyΒ», Π° ΡΠΈΠ³Π½Π°Π» Β«delete-eventΒ», ΡΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΆΠ΅ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
β¦ GtkWidget *widget β Π²ΠΈΠ΄ΠΆΠΈΡ;
β¦ GdkEvent *event β ΡΠΎΠ±ΡΡΠΈΠ΅;
β¦ gpointer data β Π΄Π°Π½Π½ΡΠ΅.
ΠΠΎΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ:
β¦ button_press_event β Π½Π°ΠΆΠ°ΡΠ° Π»Π΅Π²Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ;
β¦ button_release_event β Π»Π΅Π²Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΎΡΠΏΡΡΠ΅Π½Π°;
β¦ motion_notify_event β Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΌΡΡΠΈ;
β¦ delete_event β ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°;
β¦ destroy_event β ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°;
β¦ key_press_event β Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ»Π°Π²ΠΈΡΠ° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ;
β¦ key_release_event β ΠΊΠ»Π°Π²ΠΈΡΠ° ΠΎΡΠΏΡΡΠ΅Π½Π°;
β¦ enter_notify_event β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ Π²ΠΎΡΠ΅Π» Π² ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°;
β¦ leave_notify_event β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ Π²ΡΡΠ΅Π» Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°;
β¦ focus_in_event β ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ°Π» Π°ΠΊΡΠΈΠ²Π½ΡΠΌ (ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠΎΠΊΡΡ);
β¦ focus_out_event β ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½;
β¦ drag_begin_event β Π½Π°ΡΠ°Π»ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°;
β¦ drag_request_event β Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°;
β¦ drag_end_event β ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°;
β¦ drop_enter_event β ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½.
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ GDK (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅) ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π½ΠΈΠΆΠ΅:
β¦ GDK_NOTHING β Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ;
β¦ GDK_DELETE β ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅;
β¦ GDK_DESTROY β ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠ΅;
β¦ GDK_MOTION_NOTIFY β ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ;
β¦ GDK_BUTTON_PRESS β Π½Π°ΠΆΠ°ΡΠ° Π»ΡΠ±Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ;
β¦ GDK_1BUTTON_PRESS β Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ;
β¦ GDK_2BUTTON_PRESS β Π½Π°ΠΆΠ°ΡΠΈΠ΅ Π²ΡΠΎΡΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ;
β¦ GDK_3BUTTON_PRESS β Π½Π°ΠΆΠ°ΡΠ° ΡΡΠ΅ΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ°;
β¦ GDK_BUTTON_RELEASE β ΠΊΠ½ΠΎΠΏΠΊΠ° (Π»ΡΠ±Π°Ρ) ΠΎΡΠΏΡΡΠ΅Π½Π°;
β¦ GDK_KEY_PRESS β Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ»Π°Π²ΠΈΡΠ°;
β¦ GDK_KEY_RELEASE β ΠΊΠ»Π°Π²ΠΈΡΠ° ΠΎΡΠΏΡΡΠ΅Π½Π°;
β¦ GDK_ENTER_NOTIFY β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Π²ΠΈΠ΄ΠΆΠΈΡΠ°);
β¦ GDK_LEAVE_NOTIFY β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ Π²ΡΡΠ΅Π» Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π²ΠΈΠ΄ΠΆΠΈΡΠ°;
β¦ GDK_FOCUS_CHANGE β ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΠΊΡΡΠ° Π²Π²ΠΎΠ΄Π°;
β¦ GDK_OTHER_EVENT β Π΄ΡΡΠ³ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅.
23.3.5. ΠΠΈΠ΄ΠΆΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ β EventBox
ΠΠ°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅ Π²ΠΈΠ΄ΠΆΠΈΡΡ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΎΠΊΠ½Π°ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, GtkLabel (Π½Π°Π΄ΠΏΠΈΡΡ), GtkTable (ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΠ°), GtkHBox (Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ), GtkVBox (Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ) ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Ρ ΠΎΠΊΠ½Π°ΠΌΠΈ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ.
ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΈ Π²ΠΈΠ΄ΠΆΠΈΡΡ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°Π»ΠΈ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ, Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΈΠ΄ΠΆΠΈΡ EventBox, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ ΡΠΈΠ³Π½Π°Π» ΠΊ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΌΡ Ρ ΠΎΠΊΠ½ΠΎΠΌ Π²ΠΈΠ΄ΠΆΠΈΡΡ. Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ button_press_event ΠΊ Π²ΠΈΠ΄ΠΆΠΈΡΡ GtkLabel.
ΠΠΈΡΡΠΈΠ½Π³ 23.5. ΠΠΈΠ΄ΠΆΠΈΡ EventBox
#include <gtk/gtk.h>
int main(int argc, char *argv[]) {
GtkWidget *window1; // Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ
GtkWidget *event_box1; // eventbox
GtkWidget *label; // Π½Π°Π΄ΠΏΠΈΡΡ
/* ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ GTK */
gtk_init( &argc, &argv );
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ "ΠΠ°Π΄ΠΏΠΈΡΡ" */
window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window1), "ΠΠ°Π΄ΠΏΠΈΡΡ");
/* Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΎΠΊΠ½Π° */
gtk_signal_connect(GTK_OBJECT(window1), "destroy",
GTK_SIGNAL_FUNC(gtk_exit), NULL );
/* ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠΈΡΠΈΠ½Ρ ΡΠ°ΠΌΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° β ΠΎΠΊΠ½Π° */
gtk_container_set_border_width(GTK_CONTAINER(window1), 10);
/* ΡΠΎΠ·Π΄Π°Π΅ΠΌ event_box */
event_box1 = gtk_event_box_new();
/* ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ event_box Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ */
gtk_container_add(GTK_CONTAINER(window1), event_box1);
/* ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ event_box */
gtk_widget_show(event_box1);
/* ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½Π°Π΄ΠΏΠΈΡΡ */
label = gtk_label_new(" -== Click here to exit. ==- ");
/* ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π½Π°Π΄ΠΏΠΈΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ event_box */
gtk_container_add(GTK_CONTAINER(event_box1), label);
/* ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ */
gtk_widget_show(label);
/* ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅Π°ΠΊΡΠΈΡ GtkLabel Π½Π° ΡΠ΅Π»ΡΠΎΠΊ */
/*(ΠΏΡΠΈ ΡΠ΅Π»ΡΠΊΠ΅ - Π²ΡΡ ΠΎΠ΄) */
gtk_widget_set_events(event_box1, GDK_BUTTON_PRESS_MASK);
gtk_signal_connect(GTK_OBJECT(event_box1), "button_press_event",
GTK_SIGNAL_FUNC(gtk_exit), NULL);
gtk_widget_realize(event_box1);
/* ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΊΡΡΡΠΎΡ Π½Π°Π΄ Π½Π°Π΄ΠΏΠΈΡΡΡ β ΠΊΡΡΡΠΎΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡΡ Π² ΡΡΠΊΡ */
gdk_window_set_cursor(event_box1->window, gdk_cursor_new(GDK_HAND1));
/* ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ */
gtk_widget_show(window1);
gtk_main();
return 0;
}
ΠΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°Π΄ Π½Π°Π΄ΠΏΠΈΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½ΡΡΡ Π²ΠΈΠ΄ ΡΡΠΊΠΈ (ΠΊΠ°ΠΊ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π½Π°Π΄ ΡΡΡΠ»ΠΊΠΎΠΉ). ΠΡΠΈ ΡΠ΅Π»ΡΠΊΠ΅ Π½Π° Π½Π°Π΄ΠΏΠΈΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡΠ°.
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π°Π΄ΠΏΠΈΡΡ Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅, ΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ locale.h ΠΈ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ:
setlocale(LC_ALL, "ru_RU.KOI8-R");
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΡΡΠ³ΠΈΠΌ. ΠΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΠ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ GTK+.
Π ΠΈΡ. 23.2. ΠΠ°Π΄ΠΏΠΈΡΡ
23.4. ΠΠΈΠ΄ΠΆΠΈΡΡ
23.4.1. Π ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΠΌΠ΅ΡΡΡ ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π²ΠΈΠ΄ΠΆΠΈΡΠ°
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠΈΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΠΈ ΠΏΠ°ΠΌΡΡΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ Π΅ΠΌΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΠΈΠ΄ΠΆΠΈΡΡ ΡΠ½ΠΈΡΡΠΎΠΆΠ°ΡΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ β ΠΏΡΠΈ ΡΠ°Π·ΡΡΡΠ΅Π½ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π±ΡΠ²Π°Π΅Ρ Π½ΡΠΆΠ½ΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠΈΡΡ Π²ΠΈΠ΄ΠΆΠΈΡ. Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ:
void gtk_widget_destroy(GtkWidget *widget);
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Π² ΡΠ°ΠΉΠ»Π΅ gtk/gtkwidget.h. ΠΡΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠΈΡΠ° ΡΠ°ΠΊΠΆΠ΅ ΡΠ½ΠΈΡΡΠΎΠΆΠ°ΡΡΡΡ Π²ΡΠ΅ Π΅Π³ΠΎ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠΈΡΡ.
ΠΡΠ»ΠΈ Π²Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΠ΅ Π²ΠΈΠ΄ΠΆΠΈΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ:
void gtk_container_remove(GtkContainer *cont, GtkWidget *w);
ΡΠΎ Π²ΠΈΠ΄ΠΆΠΈΡ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΡΡΡΠ΅Π½.
ΠΠ½ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ Π²ΠΈΠ΄ΠΆΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ Π±Π΅Π· Π΅Π³ΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ (ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ Π½Π°Π΄ΠΏΠΈΡΡ):
gtk_widget_ref(GTK_WIDGET(label));
gtk_container_remove(GTK_CONTAINER(cont1), label);
gtk_container_add(GTK_CONTAINER(cont2), label);
Β«Π‘ΠΏΡΡΡΠ°ΡΡΒ» Π²ΠΈΠ΄ΠΆΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ
void gtk_widget_hide(GtkWidget *w);
ΠΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π²ΠΈΠ΄ΠΆΠΈΡ ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ gtk_widget_show().
ΠΠΈΠ΄ΠΆΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ:
β¦ GTK_STATE_NORMAL β Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅;
β¦ GTK_STATE_ACTIVE β Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ°);
β¦ GTK_STATE_PRELIGTH β Π½Π°Π΄ Π²ΠΈΠ΄ΠΆΠΈΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ;
β¦ GTK_STATE_SELECTED β Π²ΠΈΠ΄ΠΆΠΈΡ Π²ΡΠ±ΡΠ°Π½ (ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠΎΠΊΡΡ Π²Π²ΠΎΠ΄Π°);
β¦ GTK_STATE_INSENSITIVE β Π²ΠΈΠ΄ΠΆΠΈΡ Π½Π΅ ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π½Π° Π²Π²ΠΎΠ΄ (ΡΠΈΠ³Π½Π°Π»Ρ).
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠΈΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ:
GTK_WIDGET(w)->state
ΠΈΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΠ°:
GTK_WIDGET_STATE(wid)
ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π² ΡΠ°ΠΉΠ»Π΅ gtk/gtkwidget.h.
Π‘Π΄Π΅Π»Π°ΡΡ Π²ΠΈΠ΄ΠΆΠΈΡ Π½Π΅Π°ΠΊΡΠΈΠ²Π½ΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ:
gtk_widget_set_sensitive(widget, FALSE);
ΠΡΠ»ΠΈ Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ gtk_widget_set_sensitive() Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π΅Π½ TRUE, Π²ΠΈΠ΄ΠΆΠΈΡ widget ΡΡΠ°Π½Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ.
Π§ΡΠΎΠ±Ρ Π½Π°Ρ Π²ΠΈΠ΄ΠΆΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠΎΠΊΡΡ Π²Π²ΠΎΠ΄Π°, Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ:
gtk_widget_grab_focus(widget);
23.4.2. Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Π²ΠΈΠ΄ΠΆΠΈΡΠΎΠ², ΠΏΠΎΠ»Ρ Π²Π²ΠΎΠ΄Π° ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ