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

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

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

Ѐункция gtk_window_set_default_size Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ Π½Π° экранС Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ… отобраТСния GTK+. Π―Π²Π½ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠΊΠ½Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ содСрТимоС ΠΎΠΊΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ Ρ‡Π΅ΠΌ-Π»ΠΈΠ±ΠΎ ΠΈΠ»ΠΈ скрыто. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΊΠ½Π° послС Π΅Π³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ gtk_window_resize. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΊΠ½Π°, пСрСмСщая ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ способом Π΅Π³ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ ΠΌΡ‹ΡˆΡŒΡŽ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ этому, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ gtk_window_set_resizeable, ΠΏΡ€ΠΈΡ€Π°Π²Π½Π΅Π½Π½ΡƒΡŽ FALSE.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ вашС ΠΎΠΊΠ½ΠΎ присутствуСт Π½Π° экранС ΠΈ Π²ΠΈΠ΄Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Ρ‚.Π΅. Π½Π΅ свСрнуто ΠΈΠ»ΠΈ скрыто, ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ функция gtk_window_present. Она ΠΏΠΎΠ»Π΅Π·Π½Π° для Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½, Ρ‚.ΠΊ. позволяСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠ½Π° Π½Π΅ свСрнуты, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, для раскрытия ΠΎΠΊΠ½Π° Π½Π° вСсь экран ΠΈ Π΅Π³ΠΎ сворачивания Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gtk_window_maximize ΠΈ gtk_window_minimize.

GtkEntry

GtkEntry β€” Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ однострочного тСкстового поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ примСняСтся для Π²Π²ΠΎΠ΄Π° простых тСкстовых Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, адрСса элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹, ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΡƒΠ·Π»Π° сСти. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ API, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ считываниС Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ тСкста, Ρ‚Π°ΠΊ ΠΈ Π΅Π³ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ Π² символах, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ мСстополоТСниСм тСкста ΠΈ Π΅Π³ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ.

GtkWidget

 +----GtkEntry

МоТно Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ GtkEntry Π½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π²Π΅Π·Π΄ΠΎΡ‡Π΅ΠΊ (ΠΈΠ»ΠΈ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ символа) Π½Π° мСстС Π½Π°Π±Ρ€Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… символов, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для Π²Π²ΠΎΠ΄Π° ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ заглядывал Ρ‡Π΅Ρ€Π΅Π· вашС ΠΏΠ»Π΅Ρ‡ΠΎ ΠΈ Ρ‡ΠΈΡ‚Π°Π» тСкст.

ΠœΡ‹ опишСм Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ самых ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° GtkEntry:

GtkWidget* gtk_entry_new(void);

GtkWidget* gtk_entry_new_with_max_length(gint max);

void gtk_entry_set_max_length(GtkEntry *entry, gint max);

G_CONST_RETURN gchar* gtk_entry_get_text(GtkEntry *entry);

void gtk_entry_set_text(GtkEntry *entry, const gchar *text);

void gtk_entry_append_text(GtkEntry *entry, const gchar *text);

void gtk_entry_prepend_text(GtkEntry* entry, const gchar *text);

void gtk_entry_set_visibility(GtkEntry *entry, gboolean visible);

void gtk_entry_set_invisible_char(GtkEntry *entry, gchar invch);

void gtk_entry_set_editable(GtkEntry *entry, gboolean editable);

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ GtkEntry с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gtk_entry_new ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ тСкста фиксированной Π΄Π»ΠΈΠ½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gtk_entry_new_with_max_length. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ тСкста избавляСт вас ΠΎΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ коррСктности Π΄Π»ΠΈΠ½Ρ‹ Π²Π²ΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, нСобходимости ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ тСкст слишком Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ.

Для получСния содСрТимого Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° GtkEntry Π²Ρ‹Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ gtk_entry_get_text, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ const char, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ GtkEntry (G_CONST_RETURN β€” макрос, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ GLib). Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ тСкст ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π΅Π³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, слСдуСт ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ strcpy.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ содСрТимоС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° GtkEntry, примСняя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ _set_text, _append_text ΠΈ _modify_text. Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ const.

Для примСнСния GtkEntry Π² качСствС поля Π²Π²ΠΎΠ΄Π° пароля, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΈ Π½Π° мСстС символов, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ gtk_entry_set_visibility, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ visible со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ FALSE. Π‘ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ символ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² соотвСтствии с вашими трСбованиями с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gtk_entry_set_invisible_char.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.4.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.4. Π’Π²ΠΎΠ΄ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ пароля

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, познакомившись с функциями Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° GtkEntry, посмотрим Π½Π° Π½ΠΈΡ… Π² дСйствии Π² нСбольшой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° entry.c Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ пароля ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ с сСкрСтным.

1. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ сСкрСтный ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, остроумно Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ secret:

#include <gtk/gtk.h>

#include <stdio.h>

#include <string.h>

const char * password = "secret";

2. Π£ вас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° уничтоТаСтся ΠΎΠΊΠ½ΠΎ ΠΈ щСлкаСтся ΠΌΡ‹ΡˆΡŒΡŽ ΠΊΠ½ΠΎΠΏΠΊΠ° OK:

void closeApp(GtkWidget *window, gpointer data) {

 gtk_main_quit();

}


void button_clicked(GtkWidget *button, gpointer data) {

 const char *password_text =

  gtk_entry_get_text(GTK_ENTRY((GtkWidget *) data));

 if (strcmp(password_text, password) == 0)

 printf("Access granted!\n");

 else printf("Access denied!\n");

}

3. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main создаСтся, компонуСтся интСрфСйс ΠΈ ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ с сигналами. Для ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ hbox ΠΈ vbox:

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

 GtkWidget *window;

 GtkWidget *username_label, *password_label;

 GtkWidget *username_entry, *password_entry;

 GtkWidget *ok_button;

 GtkWidget *hbox1, *hbox2;

 GtkWidget *vbox;

 gtk_init(&argc, &argv);

 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

 gtk_window_set_title(GTK_WINDOW(window), "GtkEntryBox");

 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

 gtk_windowset_default_size(GTK_WINDOW(window), 200, 200);

 g_signal_connect(GTK_OBJECT(window), "destroy",

 GTK_SIGNAL_FUNC(closeApp), NULL);

 username_label = gtk_label_new("Login:");

 password_label = gtk_label_new("Password:");

 username_entry = gtk_entry_new();

 password_entry = gtk_entry_new();

 gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE);

 ok_button = gtk_button_new_with_label("Ok");

 g_signal_connect(GTK_OBJECT(ok_button), "clicked",

  GTK_SIGNAL_FUNC(button_clicked), password_entry);

 hbox1 = gtk_hbox_new(TRUE, 5);

 hbox2 = gtk_hbox_new(TRUE, 5);

 vbox = gtk_vbox_new(FALSE, 10);

 gtk_box_pack_start(GTK_BOX(hbox1), username_label, TRUE, FALSE, 5);

 gtk_box_pack_start(GTK_BOX(hbox1), username_entry, TRUE, FALSE, 5);

 gtk_box_pack_start(GTK_BOX(hbox2), password_label, TRUE, FALSE, 5);

 gtk_box_pack_start(GTK_BOX(hbox2), password_entry, TRUE, FALSE, 5);

 gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 5);

 gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 5);

 gtk_box_pack_start(GTK_BOX(vbox), ck_button, FALSE, FALSE, 5);

 gtk_container_add(GTK_CONTAINER(window), vbox);

 gtk_widget_show_all(window);

 gtk_main();

 return 0;

}

Когда Π²Ρ‹ запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΠΊΠ½ΠΎ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π½Π° рис. 16.8.

Рис. 16.8 


Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаСт Π΄Π²Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° Ρ‚ΠΈΠΏΠ° GtkEntry, username_entry ΠΈ password_entry, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Π΅Ρ‚ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ password_entry, Ρ€Π°Π²Π½ΠΎΠΉ FALSE, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ GtkButton, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ связываСтС сигнал clicked с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° button_clicked.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈ сравнит Π΅Π³ΠΎ с сСкрСтным ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ, Π½Π° экран выводится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ для вставки Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π² свои ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π²Ρ‹ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ gtk_box_pack_start. Для сокращСния этого ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция.

GtkSpinButton

ΠŸΠΎΡ€ΠΎΠΉ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²Π΅Π» числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ инструмСнта, ΠΈ Π² Ρ‚Π°ΠΊΠΎΠΉ ситуации Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ GtkSpinButton (ΠΊΠ½ΠΎΠΏΠΊΠ°-счСтчик) ΠΈΠ΄Π΅Π°Π»Π΅Π½. Он ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π²Π²ΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ символами ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ допустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚ Π½ΠΈΠΆΠ½Π΅ΠΉ Π΄ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. Π’ΠΈΠ΄ΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ содСрТит стрСлки, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π²Π΅Ρ€Ρ… ΠΈ Π²Π½ΠΈΠ·, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ "Π½Π°ΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒ" Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, для удобства ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ΡˆΡŒΡŽ.

GtkWidget

 +---- GtkEntry

        +---- GtkSpinButton

И снова API понятСн, ΠΈ ΠΌΡ‹ пСрСчислим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто примСняСмыС Π²Ρ‹Π·ΠΎΠ²Ρ‹:

GtkWidget* gtk_spin_button_new(GtkAdjustment *adjustment,

 gdouble climb_rate, guint digits);

GtkWidget* gtk_spin_button_new_with_range(gdouble min, gdouble max,

 gdouble step);

void gtk_spin_button_set_digits(GtkSpinButton *spin_button, guint digits);

void gtk_spin_button_set_increments(GtkSpinButton *spin_button,

 gdouble step, gdouble page);

void gtk_spin_button_set_range(GtkSpinButton *spin_button, gdouble min,

 gdouble max);

gdouble gtk_spin_button_get_value(GtkSpinButton *spin_button);

gint gtk_spin_button_get_value_as_int(GtkSpinButton *spin_button);

void gtk_spin_button_set_value(GtkSpinButton *spin button, gdouble value);

Для создания Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° GtkSpinButton с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gtk_spin_button_new Π²Ρ‹ сначала Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ GtkAdjustment. Π’ΠΈΠ΄ΠΆΠ΅Ρ‚ GtkAdjustment β€” это абстрактный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, содСрТащий Π»ΠΎΠ³ΠΈΠΊΡƒ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΡƒΡŽΡΡ управлСния значСниями с ограничСниями. Он Ρ‚Π°ΠΊΠΆΠ΅ примСняСтся ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ GtkHScale ΠΈ GtkVScale.

Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° GtkAdjustment ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ниТнюю ΠΈ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ приращСния.