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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 280

Автор ΠœΡΡ‚ΡŒΡŽ НСйл

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² GTK+

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ познакомились с систСмой X Window System, самоС врСмя Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… срСдств GTK+ Toolkit. GTK+ появился Π½Π° свСт ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ популярного графичСского Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° GNU Image Manipulation Program (GIMP), ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ ΠΈ унаслСдовал своС имя (The Gimp ToolKit). ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ программисты GIMP Π²ΡΠ΅Ρ€ΡŒΠ΅Π· ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ GTK+ Π² ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ вырос ΠΈ стал ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· самых ΠΌΠΎΡ‰Π½Ρ‹Ρ… ΠΈ популярных ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ΠΎΠ² инструмСнтов. Π”ΠΎΠΌΠ°ΡˆΠ½ΡŽΡŽ страницу ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° GTK+ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ адрСсу http://www.gtk.org.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’ ΠΈΡ‚ΠΎΠ³Π΅, GTK+ β€” это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ созданиС графичСских интСрфСйсов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (Graphical User Interface, GUI), прСдоставляя Π½Π°Π±ΠΎΡ€ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌΡ‹Ρ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ соСдиняСтС вмСстС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»Π΅Π³ΠΊΠΈΡ… Π² использовании Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру вашСго прилоТСния.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ GTK+ β€” это ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ GNU, ΠΊΠ°ΠΊ ΠΈ GIMP, ΠΎΠ½ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½ Π½Π° условиях Π±ΠΎΠ»Π΅Π΅ Π»ΠΈΠ±Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ (Lesser General Public License, Бтандартная общСствСнная лицСнзия ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ примСнСния GNU), которая освобоТдаСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ°Ρ‚Π΅Π½Ρ‚ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС с Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ), написанноС с использованиСм GTK+, ΠΎΡ‚ ΡƒΠΏΠ»Π°Ρ‚Ρ‹ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½Ρ‹Ρ… Π²ΠΎΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ авторских Π³ΠΎΠ½ΠΎΡ€Π°Ρ€ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π‘Π²ΠΎΠ±ΠΎΠ΄Π°, прСдлагаСмая Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GTK+, ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ этот ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ инструмСнтов ΠΎΡ‚ Π΅Π³ΠΎ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π° Qt (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅), Ρ‡ΡŒΡ лицСнзия GPL Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ коммСрчСского ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния с использованиСм Qt (Π² этом случаС Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΡƒΠΏΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ‡Π΅ΡΠΊΡƒΡŽ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡŽ для Qt).

ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ GTK+ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ написан Π½Π° языкС Π‘ ΠΈ большая Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния GTK+ Ρ‚Π°ΠΊΠΆΠ΅ написана Π½Π° Π‘. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, сущСствуСт ряд привязок ΠΊ языкам (language binding), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ GTK+ Π² ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ Π²Π°ΠΌΠΈ языкС программирования, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ Π‘++, Python, PHP, Ruby, Perl, C# ΠΈΠ»ΠΈ Java.

ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ GTK+ сформирован ΠΊΠ°ΠΊ надстройка для ряда Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, К Π½ΠΈΠΌ относятся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

β–‘Β GLib β€” прСдоставляСт Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΈΠΏΡ‹, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ†ΠΈΠΊΠ»ΠΎΠ² событий ΠΈ динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ;

β–‘Β GObject β€” Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ систСму Π½Π° языкС Π‘, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΡƒΡŽ примСнСния языка Π‘++;

β–‘Β Pango β€” ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста;

β–‘Β ATK β€” ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ прилоТСния с доступом ΠΈ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ваши прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСдств чтСния экрана ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… срСдств доступа;

β–‘Β GDK (GIMP Drawing Kit) β€” ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Xlib;

β–‘Β GdkPixbuf β€” ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ изобраТСниями Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… GTK+;

β–‘Β Xlib β€” прСдоставляСт Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΡƒΡŽ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ Π² систСмах Linux ΠΈ UNIX.

БистСма Ρ‚ΠΈΠΏΠΎΠ² GLib

Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ просматривали ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ GTK+, Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΈ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚ΡŒΡΡ, ΡƒΠ²ΠΈΠ΄Π΅Π² мноТСство Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… языка Π‘ с прСфиксом

g
, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,
gint
,
gchar
,
gshort
, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹
gint32
ΠΈ
gpointer
. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ GTK+ основан Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… пСрСносимости языка Π‘ (portability libraries), Π½Π°Π·Π²Π°Π½Π½Ρ‹Ρ… GLib ΠΈ GObject, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ эти Ρ‚ΠΈΠΏΡ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ½Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌ.

GLib ΠΈ GObject ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΌΠ΅ΠΆΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ½Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌ, обСспСчивая стандартный Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… замСщСния, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ макросов для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ ΠΎΠ±Ρ‰ΠΈΡ… Π·Π°Π΄Π°Ρ‡. Π­Ρ‚ΠΈ Ρ‚ΠΈΠΏΡ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ макросы ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ программисты GTK+, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ наш ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ пСрСносится Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.

Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Glib Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ нСсколько ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… констант:

<b>#include &lt;glib/gmacros.h&gt;</b>

<b>#define FALSE 0</b>

<b>#define TRUE !FALSE</b>

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… β€” это Ρ‚ΠΈΠΏΡ‹, слуТащиС Π·Π°ΠΌΠ΅Π½ΠΎΠΉ для стандартных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… C (ΠΈΠ· сообраТСний совмСстимости ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ) ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² Π±Π°ΠΉΡ‚Π°Ρ… Π½Π°. всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…:

β–‘Β 

gint
,
guint
,
gchar
,
guchar
,
glong
,
gulong
,
gfloat
ΠΈ
gdoubleΒ 
β€” просто Π·Π°ΠΌΠ΅Π½Ρ‹ для стандартных Ρ‚ΠΈΠΏΠΎΠ² Π‘ для совмСстимости;

β–‘Β 

gpointer
β€” синоним Ρ‚ΠΈΠΏΠ° (
void*
);

β–‘Β 

gboolean
β€” ΠΏΠΎΠ»Π΅Π·Π΅Π½ для прСдставлСния логичСских Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ слуТит ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ для
int
;

β–‘Β 

gint8
,
guint8
,
gint16
,
guint16
,
gint32
ΠΈ
guint32
β€” Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ с Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² Π±Π°ΠΉΡ‚Π°Ρ….

Π£Π΄ΠΎΠ±Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ GLib ΠΈ GObject ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ. Glib ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² GTK+, поэтому Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ установка GTK+, Ρ‚ΠΎ Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Glib ΡƒΠΆΠ΅ установлСна. Как Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ·ΠΆΠ΅ Π² этой Π³Π»Π°Π²Π΅, ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π° GTK+ Π²Π°ΠΌ Π΄Π°ΠΆΠ΅ Π½Π΅ придСтся явно Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» glib.h.

БистСма ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² GTK+

ВсС, Ρƒ ΠΊΠΎΠ³ΠΎ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ программирования GUI, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΠΉΠΌΡƒΡ‚ нашС ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ строгой привСрТСнности Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ GUI ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (ООП), Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ строгой, Ρ‡Ρ‚ΠΎ всС соврСмСнныС ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Ρ‹ инструмСнтов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ GTK+, написаны Π² стилС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ инструмСнтов GTK+ написан Π½Π° чистом Π‘, ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ООП благодаря Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ GObject. Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ наслСдованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ макросов.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΎΠ±Ρ€Π°Π·Π΅Ρ† наслСдования ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² GtkWindow, взятой ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ GTK+ API.

GObject

Β +---GInitiallyUnowned

Β +----GtkObject

Β Β Β Β Β Β  +----GtkWidget

Β Β Β Β Β Β Β Β Β Β Β Β  +----GtkContainer

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  +----GtkBin

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  +----GtkWindow

Π­Ρ‚ΠΎΡ‚ список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

GtkWindow
β€” ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ
GtkBin
, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π»ΡŽΠ±ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ
GtkBin
, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ
GtkWindow
. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
GtkWindow
наслСдуСт ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
GtkContainer
, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ наслСдуСт ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
GtkWidget
.

Для удобства всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ создания Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ‚ΠΈΠΏ

GtkWidget
. НапримСр,