ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ β ΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠΎΡΠΎΠΉ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π²ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎΡ Π΅Π΅ ΠΏΡΠΎΡΠΎΡΠΈΠΏ:
typedef gint (*GCompareFunc) (gconstpointer a, gconstpointer b); ΠΠ°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. ΠΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅Π»ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
β¦ Π΅ΡΠ»ΠΈ a<b, ΡΠΎ -1 (ΡΠΎΡΠ½Π΅Π΅, Π»ΡΠ±ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ 0);
β¦ Π΅ΡΠ»ΠΈ a==b, ΡΠΎ 0;
β¦ Π΅ΡΠ»ΠΈ a>b, ΡΠΎ 1 (Π»ΡΠ±ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π±ΠΎΠ»ΡΡΠ΅ 0).
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Glib ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π΅ΡΠ΅Π²ΡΡΠΌΠΈ β ΠΊΠ°ΠΊ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌΠΈ, ΡΠ°ΠΊ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌΠΈ, Π½ΠΎ ΠΌΡ ΡΡΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ.
23.2.5. Π’Π°ΠΉΠΌΠ΅ΡΡ Π² Glib
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Glib ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠΌΠ΅ΡΡ Π² Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ .
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ:
β¦ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» gtimer.h;
β¦ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ GTimer *g_timer_new();
β¦ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ g_timer_start(GTimer *timer);
β¦ ΡΠ·Π½Π°ΡΡ Π²ΡΠ΅ΠΌΡ, ΠΎΡΡΡΠΈΡΠ°Π½Π½ΠΎΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠΌ β g_timer_elapsed();
β¦ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ g_timer_reset(GTimer *timer);
β¦ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ g_timer_stop(GTimer * timer);
β¦ ΡΠ½ΠΈΡΡΠΎΠΆΠΈΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ β g_timer_destroy(GTimer *timer).
Π‘ΡΠΎΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ Π»ΠΈΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ g_timer_elapsed(GTimer *timer, gulong *mcs). ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ ΡΠ΅ΠΊΡΠ½Π΄, ΠΎΡΡΡΠΈΡΠ°Π½Π½ΠΎΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠΌ. ΠΠΎ Π°Π΄ΡΠ΅ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ *mcs Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠΈΡΠ»ΠΎ ΠΌΠΈΠΊΡΠΎΡΠ΅ΠΊΡΠ½Π΄.
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 23.1.
ΠΠΈΡΡΠΈΠ½Π³ 23.1. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠ°
#include <stdio.h>
#include <glib.h>
#include <gtimer.h>
int main() {
double sec;
gulong ms;
int i;
GTimer *timer = g_timer_new();
printf("ΠΠ°Π½Π½ΡΠΉ ΡΠΈΠΊΠ» Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 10 ΡΠ΅ΠΊΡΠ½Π΄\n");
g_timer_start(timer);
for (i=1; i>0;) {
sec = g_timer_elapsed(timer,&ms);
if (sec >=10) {
g_timer_stop(timer);
printf("Π’Π°ΠΉΠΌΠ΅Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½. ΠΠΊΡ: %d\n",ms);
break;
}
}
g_timer_destroy(timer);
return 0;
}
23.3. ΠΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° GTK+
23.3.1. ΠΠΈΠ΄ΠΆΠΈΡΡ
ΠΠ΅ΡΠ΅Π΄ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΌΠΎΠΉ ΠΏΡΠΎΡΡΠΎΠΉ GTK-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ GTK. ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ β ΠΎΠΊΠ½Π°, ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΏΠΎΠ»Ρ Π²Π²ΠΎΠ΄Π°, ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ ΠΈ ΡΠΎΠΌΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ β Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΆΠΈΡΠ°ΠΌΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΊΠ½ΠΎ. ΠΠΈΠ΄ΠΆΠΈΡΡ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² ΠΎΠΊΠ½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. Π ΡΠ°ΠΌΠΎΠΌ ΠΎΠΊΠ½Π΅ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π²ΠΈΠ΄ΠΆΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΡ /Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΡ Π±ΠΎΠΊΡΠΎΠ² ΠΈΠ»ΠΈ ΠΆΠ΅ ΡΠ°Π±Π»ΠΈΡ. ΠΡΠΎΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΎΠΊ, Ρ ΠΎΡΡ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π²Π°ΠΌ ΡΠ»ΠΎΠΆΠ½Π΅Π΅.
ΠΠΈΠ΄ΠΆΠΈΡΡ ΠΌΠΎΠ³ΡΡ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΠΈΠ³Π½Π°Π»Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π»ΡΠΎΠΊ ΠΌΡΡΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ (ΡΠΈΠ³Π½Π°Π»Π°), Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΅Π΅.
Π Π°Π±ΠΎΡΠ° Ρ Π²ΠΈΠ΄ΠΆΠΈΡΠ°ΠΌΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΡ Π΅ΠΌΠ΅:
1. ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠΈΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ GTK;
2. ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ² Π²ΠΈΠ΄ΠΆΠΈΡΠ°;
3. ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π²ΠΈΠ΄ΠΆΠΈΡΠ°, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΠΈΠ³Π½Π°Π»Ρ;
4. ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠΈΡΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅, ΡΠΎ Π΅ΡΡΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° Π΅Π³ΠΎ ΠΊ ΠΎΠΊΠ½Ρ;
5. ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠΈΡΠ°.
ΠΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π²ΠΈΠ΄ΠΆΠΈΡ, ΠΈΠ½Π°ΡΠ΅ Π΅Π³ΠΎ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° ΡΠΎΠ·Π΄Π°Π΅Ρ Π²ΠΈΠ΄ΠΆΠΈΡ β ΠΊΠ½ΠΎΠΏΠΊΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ β ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π΅Π΅.
GtkWidget *button;
...
/* Π ΠΈΡΡΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΎΡΠΊΡ Ρ Π½Π°Π΄ΠΏΠΈΡΡΡ Hello, All */
button = gtk_button_new_with_label("Hello, All");
/* ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ hello() */
gtk_signal_connect(GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC(hello), NULL);
/* ΠΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ */
gtk_container_add(GTK_CONTAINER(window), button);
/* ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ. */
gtk_widget_show(button);
ΠΠ΅ΡΠ²ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠ½ΠΎΠΏΠΊΡ (button), Π²ΡΠΎΡΠΎΠΉ β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊΠ½ΠΎΠΏΠΊΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΡΠ΅ ΠΎΠΊΠ½ΠΎ. ΠΠΈΠ΄ΠΆΠΈΡ window Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ ΡΠ°Π½ΡΡΠ΅: Π½Π΅Π»ΡΠ·Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Π±Π΅Π· ΠΎΠΊΠ½Π°. Π’ΠΎΡΠ½Π΅Π΅, ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΡΠΎΠ³Π΄Π° ΠΎΠ½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π° ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ-Π»ΠΈΠ±ΠΎ ΠΎΠΊΠ½Ρ ΠΈ ΠΌΡ Π΅Π΅ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ gtk_widget_show() ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π½Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ. ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΈ ΡΠ°ΠΌΠΎ ΠΎΠΊΠ½ΠΎ. ΠΠΎΡΡΠ΄ΠΎΠΊ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠΈΡΠΎΠ² ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΎΠ»ΠΈ Π½Π΅ ΠΈΠ³ΡΠ°Π΅Ρ, Π½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ.
23.3.2. ΠΠΊΠ½Π°
Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΊΠΎΡΠΊΠΎ. ΠΠ°ΡΠ½Π΅ΠΌ ΡΡΠ°Π·Ρ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° β ΡΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠ΅ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ Π΅ΡΡΡ ΡΡΠΎ.
ΠΠΈΡΡΠΈΠ½Π³ 23.2. ΠΡΠΎΡΡΠΎΠ΅ ΠΎΠΊΠ½ΠΎ (ΡΠ°ΠΉΠ» first.Ρ)
#include <gtk/gtk.h>
int main(int argc, char *argv[]) {
GtkWidget *window1;
gtk_init(&argc, &argv);
window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window1), "ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ");
gtk_widget_show(window1);
gtk_main();
return 0;
}
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» gtk/gtk.h β ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ GTK. Π ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ Π½Π°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ (ΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π² ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅) Π²ΠΈΠ΄ΠΆΠΈΡ β Π²ΠΈΠ΄ΠΆΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°:
GtkWidget *window1;
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²ΠΈΠ΄ΠΆΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½, Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΈΠΌ ΠΏΠΎΠΊΠ° Π½Π΅Π»ΡΠ·Ρ. Π‘Π½Π°ΡΠ°Π»Π° (ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠ΅ΡΠ²ΠΎΠΉ GTK-ΡΡΠ½ΠΊΡΠΈΠΈ) Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ gtk_init() ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅ΠΉ Π΄Π²Π° Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° β Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ main(). ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°, Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ gtk_window_new(), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠΊΠ½ΠΎ (Π½Π°ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ ΠΏΠΎΠΊΠ° ΠΎΠΊΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ, Π½ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΎ). Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ΠΆΠΈΡ ΠΎΠΊΠ½Π° ΡΠΎΠ·Π΄Π°Π½, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° ΡΠΈΠ³Π½Π°Π»Ρ. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Title (Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ) ΠΎΠΊΠ½Π°. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ gtk_window_set_title():
gtk_window_set_title(GTK_WINDOW(window1), "ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ");
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π½Π°ΡΠ΅ ΠΎΠΊΠ½ΠΎ:
gtk_widget_show(window1);
Π§ΡΠΎΠ±Ρ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΡ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π»ΡΠΎΠΊ ΠΌΡΡΠΈ), Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ gtk_main(). Π€ΡΠ½ΠΊΡΠΈΠΈ gtk_init() ΠΈ gtk_main() Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² Π»ΡΠ±ΠΎΠΉ GTK-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π²Π΅Π΄Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅:
$ gcc first.Ρ -ΠΎ first `gtk-config --cflags` `gtk-config --libs`
Π€Π»Π°Π³ΠΈ `gtk config --cflags` `gtk-config --libs` Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π»ΡΠ±ΠΎΠΉ GTK-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π΅ ΡΠ΄Π°Π΅ΡΡΡ, ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π°ΠΏΠΎΡΡΡΠΎΡΡ (`), Π° Π½Π΅ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ ('), ΠΈ ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° gtk-config Ρ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°.
ΠΠ°ΠΏΡΡΡΠΈΠΌ Π½Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° X Window (ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ GNOME/KDE):
$ ./first
ΠΡ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π½ΠΎΠ΅ Π½Π° ΡΠΈΡ. 23.1.
Π ΠΈΡ. 23.1. ΠΡΠΎΡΡΠΎΠ΅ ΠΎΠΊΠ½ΠΎ
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΊΡΠΎΠ΅ΠΌ ΠΎΠΊΠ½ΠΎ ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Ρ: ΠΎΠΊΠ½ΠΎ Π·Π°ΠΊΡΡΡΠΎ, ΠΌΡ Π΅Π³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ, Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π» Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½. ΠΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π½Π° ΡΠΎΠ±ΡΡΠΈΠ΅ Π·Π°ΠΊΡΡΡΠΈΡ ΠΎΠΊΠ½Π°. ΠΠΎ ΠΈΠ΄Π΅Π΅, ΠΊΠΎΠ³Π΄Π° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΠ΅Π΄Π° Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΠΎΠΊΠ½ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ. Π Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΠΎΠ³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ. ΠΠ½Π°ΡΠΈΡ, Π½ΡΠΆΠ½ΠΎ Β«Π½Π°ΡΡΠΈΡΡΒ» Π΅Π΅ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΡ (ΡΠΈΠ³Π½Π°Π»Ρ) ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΆΠΌΠΈΡΠ΅ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ Ctrl+Π‘ ΠΈ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠΈΡΡΠΈΠ½Π³ 23.3. ΠΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΎΠΊΠ½Π°
#include <gtk/gtk.h>
int main(int argc, char *argv[]) {
GtkWidget *window1;
gtk_init(*argc, &argv);
window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window1), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
gtk_widget_show(window1);
gtk_main();
return 0;
}
Π€ΡΠ½ΠΊΡΠΈΡ gtk_signal_connect() ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ΅Π°ΠΊΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° window1 Π½Π° ΡΠΈΠ³Π½Π°Π» destroy ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ qtk_main_quit() Π΄Π»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π ΡΡΠΎ Π΅ΡΠ»ΠΈ Π½Π°ΠΌ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ? Π’ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ destroy (Π»ΠΈΡΡΠΈΠ½Π³ 23.4).
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ destroy_window1(), ΠΈ ΠΌΡ Β«ΠΏΡΠΎΠΏΠΈΡΠ΅ΠΌΒ» Π΅Π΅ Π² ΡΡΠ½ΠΊΡΠΈΠΈ gtk_signal_connect() Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΎΠ±ΡΡΠΈΡ Π·Π°ΠΊΡΡΡΠΈΡ ΠΎΠΊΠ½Π° Π²ΠΌΠ΅ΡΡΠΎ gtk_main_quit(). ΠΠ΅Π»Π°ΡΡ ΠΎΠ½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ, ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ gtk_main_quit().
ΠΠΈΡΡΠΈΠ½Π³ 23.4. ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ
#include <gtk/gtk.h>
void destroy_window1(GtkWidget *widget, gpointer data);
int main(int argc, char *argv[]) {
GtkWidget *window1;
gtk_init(&argc, &argv);
window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window1), "destroy",
(GtkSignalFunc)destroy_window1, &window1);
gtk_widget_show(window1);
gtk_main();
return(0);
}
void destroy_window1(GtkWidget *widget, gpointer data) {
gtk_main_quit();
}
23.3.3. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠΊΠ½Π°
ΠΠ°ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΠΊΠ½ΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠ΅ ΠΈ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ? ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠΊΠ½Π° Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ