submenu, NULL, NULL, 0, NULL, 0, 0, NULL},
{GNOME_APP_UI_ENDOFINFO, NULL, NULL, null,
NULL, NULL, 0, NULL, 0, 0, NULL}
};
static GnomeUIInfo menubar[] = {
{GNOME_APP_UI_SUBTREE, "Toplevel Item", NULL,
menu, NULL, NULL, 0, NULL, 0, 0, NULL},
{GNOME_APP_UI_ENDOFINFO, NULL, NULL, NULL,
NULL, NULL, 0, NULL, 0, 0, NULL}
};
3. Π ΡΡΠ½ΠΊΡΠΈΠΈ main Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π΄Π΅Π»ΠΎ Ρ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ Π²Π°Ρ Π²ΠΈΠ΄ΠΆΠ΅Ρ GnomeApp ΠΈ Π·Π°Π΄Π°Π΅ΡΠ΅ Π²ΡΠ΅ ΠΌΠ΅Π½Ρ:
int main (int argc, char *argv[]) {
GtkWidget *app;
gnome_program_init("gnome1", "0.1", LIBGNOMEUI_MODULE,
argc, argv, GNOME_PARAM_NONE);
app = gnome_app_new("gnome1", "Menus, menus, menus");
gtk_window_set_default_size(GTK_WINDOW(app), 300, 200);
g_signal_connect(GTK_OBJECT(app), "destroy",
GTK_SIGNAL_FUNC(closeApp), NULL);
gnome_app_create_menus(GNOME_APP(app), menubar);
gtk_widget_show(app);
gtk_main();
return 0;
}
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ menu1 ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ ΡΡΡΠΎΠΊΡ ΠΌΠ΅Π½Ρ, ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ ΠΈ ΠΌΠ΅Π½Ρ GNOME ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π½Π° ΡΠΈΡ. 16.12.
Π ΠΈΡ. 16.12
Π‘ΡΡΡΠΊΡΡΡΠ° GnomeUIInfo Π΅Π΄Π²Π° Π»ΠΈ Π΄ΡΡΠΆΠ΅ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΠ½Π° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 11 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°Π²Π½ΠΎ NULL ΠΈΠ»ΠΈ Π½ΡΠ»Ρ. ΠΡΠΈ ΠΈΡ Π²Π²ΠΎΠ΄Π΅ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠΏΡΡΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΈ ΡΡΡΠ΄Π½ΠΎ ΠΎΡΠ»ΠΈΡΠΈΡΡ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π² Π΄Π»ΠΈΠ½Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠ»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΡΠ»ΠΎΠΆΠΈΠ²ΡΠ΅ΠΉΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π² ΡΡΠ΅Π΄Π΅ GNOME ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΌΠ°ΠΊΡΠΎΡΡ, ΡΡΡΡΠ°Π½ΡΡΡΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡ Π²ΡΡΡΠ½ΡΡ. ΠΡΠΈ ΠΌΠ°ΠΊΡΠΎΡΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΡΠ΅ Π°ΠΊΡΠ΅Π»Π΅ΡΠ°ΡΠΎΡΡ Π΄Π»Ρ Π²Π°Ρ, ΠΈ Π²ΡΠ΅ Π΄Π°ΡΠΎΠΌ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ΅Π΄ΠΊΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ, Π·Π°ΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π½ΠΈΡ ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅.
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄Π²Π° Π½Π°Π±ΠΎΡΠ° ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠ½ΠΊΡΡ ΠΌΠ΅Π½Ρ. ΠΡΠΈ ΠΌΠ°ΠΊΡΠΎΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°: ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
#include <libgnomeui/libgnameui.h>
#define GNOMEUIINFO_MENU_OPEN_ITEM(cb, data)
#define GNOMEUIINFO_MENU_SAVE_ITEM(cb, data)
#define GNOMEUIINFO_MENU_SAVE_AS_IΠ’ΠΠ(cb, data)
#define GNOMEUIINFO_MENU_PRINT_ITEM(cb, data)
#define GNOMEUIINFO_MENU_PRINT_SETUP_ITEM(cb, data)
#define GNOMEUIINFO_MENU_CLOSE_IΠ’ΠΠ(cb, data)
#define GNOMEUIINFO_MENU_EXIT_IΠ’ΠΠ(cb, data)
#define GNOMEUIINFO_MENU_QUIT_IΠ’ΠΠ(cb, data)
#define GNOMEUIINFO_MENU_CUT_ITEM(cb, data)
#define GNOMEUIINFO_MENU_COPY_ITEM(cb, data)
#define GNOMEUIINFO_MENU_PASTE_ITEM(cb, data)
#define GNOMEUIINFO_MENU_SELECT_ALL_ITEM(cb, data)
...
ΠΡΠΎΡΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π² Π½Π΅Π³ΠΎ Π²Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ².
#define GNOMEUIINFO_MENU_FILE_TREE (tree)
#define GNOMEUIINFO_MENU_EDIT_TREE (tree)
#define GNOMEUIINFO_MENU_VIEW_TREE (tree)
#define GNOMEUIINFO_MENU_SETTINGS_TREE (tree)
#define GNOMEUIINFO_MENU_FILES_TREE (tree)
#define GNOMEUIINFO_MENU_WINDOWS_TREE (tree)
#define GNOMEUIINFO_MENU_HELP_TREE (tree)
#define GNOMEUIINFO_MENU_GAME_TREE (tree)
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.10.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.10. ΠΠ΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² GNOMEΠ ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ΡΡ ΡΠΆΠ΅ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅Π½Ρ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ. ΠΠ½Π΅ΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ menu1.Ρ ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡΠ΅ Π½ΠΎΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ menu2.c. ΠΠ»Ρ ΠΏΡΠΎΡΡΠΎΡΡ Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π»Ρ ΠΏΡΠ½ΠΊΡΠΎΠ² ΠΌΠ΅Π½Ρ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° β ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² GNOME, ΡΠΎΡΠΌΠΈΡΡΡΡΠΈΡ ΠΌΠ΅Π½Ρ.
#include <gnome.h>
static GnomeUIInfo filemenu[] = {
GNOMEUIINFO_MENU_NEW_ITEM("New", "Menu Hint", NULL, NULL),
GNOMEUIINFO_MENU_OPEN_ITEM(NULL, NULL),
GNOMEUIINFO_MENU_SAVE_AS_ITEM(NULL, NULL),
GNOMEUIINFO_SEPARATOR,
GNOMEIINFO_MENU_EXIT_ITEM(NULL, NULL),
GNOMEUUINFO_END
};
static GnomeUUInfo editmenu[] =
GNOMEUIINFO_MENU_FIND_ITEM(NULL, NULL),
GNOMEUIINFO_END
};
static GnomeUIInfo menubar[] = {
GNOMEUIINFO_MENU_FILE_TREE(filemenu),
GNOMEUIINFO_MENU_EDIT_TREE(editmenu),
GNOMEUIINFO_END
};
int main(int argc, char *argv[]) {
GtkWidget *app, *toolbar;
gnome_program_init("gnome1", "0.1", LIBGNOMEUI_MODULE,
argc, argv, GNOME_PARAM_NONE);
app = gnome_app_new("gnome1", "Menus, menus, menus");
gtk_window_set_default_size(GTK_WINDOW(app), 300, 200);
gnome_app_create_menus(GNOME_APP(app), menubar);
gtk_widget_show(app);
gtk_main();
return 0;
}
ΠΡΠΈΠΌΠ΅Π½ΠΈΠ² ΠΌΠ°ΠΊΡΠΎΡΡ libgnomeui Π² menu2.c, Π²Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΠ»ΠΈ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ Π½Π°Π±ΠΈΡΠ°ΡΡ, ΠΈ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π΅Π³ΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅. ΠΠ°ΠΊΡΠΎΡΡ ΡΠΊΠΎΠ½ΠΎΠΌΡΡ Π²Π°ΡΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈ ΡΡΠΈΠ»ΠΈΡ, ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΠ΅ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ΅Π½Ρ ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ° ΠΌΠ΅Π½Ρ, ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΡΡ Π°ΠΊΡΠ΅Π»Π΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΈ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ GNOME. Π‘ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΈΡ Π² Π²Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
ΠΠ° ΡΠΈΡ. 16.13 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° menu3.c Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ Π½Π° ΡΠ΅ΠΉ ΡΠ°Π· ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π² ΡΡΠ΅Π΄Π΅ GNOME ΠΏΡΠ½ΠΊΡΠ°ΠΌΠΈ ΠΌΠ΅Π½Ρ.
Π ΠΈΡ. 16.13
ΠΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΠ΅ ΠΎΠΊΠ½Π°
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ°ΡΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ GUI β Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΎ Π²Π°ΠΆΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΡΡ . ΠΠ±ΡΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ OK ΠΈ Cancel ΠΈ, Π΅ΡΠ»ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π²Π°ΠΆΠ½Π°, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡΠΊΠ»ΠΈΠΊΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°, Π²Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΎΠΊΠ½Π°ΠΌ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅Ρ Π²ΡΠ±ΠΎΡ (ΡΠ°ΠΊΠΈΠ΅ ΠΎΠΊΠ½Π° Π½Π°Π·ΡΠ²Π°ΡΡ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΡΠΌΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ).
ΠΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΎΠΏΠΈΡΠ°Π»ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΈ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ΅ GTK+ Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΡ ΠΎΠΊΠΎΠ½, ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°ΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° GtkWindow, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡΠΊΡΡ ΡΠ°Π±ΠΎΡΡ.
GtkDialog
ΠΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ, ΠΎΠ±ΡΠ΅ΠΊΡ GtkDialog β ΠΏΠΎΡΠΎΠΌΠΎΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ° GtkWindow ΠΈ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ΅ Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°.
GtkWindow
+----GtkDialog
GtkDialog Π΄Π΅Π»ΠΈΡ ΠΎΠΊΠ½ΠΎ Π½Π° Π΄Π²Π΅ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΎΠ΄Π½Π° Π΄Π»Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΠΈ Π΄ΡΡΠ³Π°Ρ Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π²Π΄ΠΎΠ»Ρ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΡΠ°Ρ ΠΎΠΊΠ½Π°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π΄Π°ΡΡ Π½ΡΠΆΠ½ΡΠ΅ Π²Π°ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ.
GtkWidget* gtk_dialog_new_with_buttons(const gchar *title,
GtkWindow *parent, GtkDialogFlags flags,
const gchar *first button text, ...);
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ. ΠΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, parent, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ GTK+ ΠΌΠΎΠ³ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠΌ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΌΡ ΠΎΠΊΠ½Ρ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ flags ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°:
β‘ GTK_DIALOG_MODAL;
β‘ GTK_DIALOG_DESTROY_WITH_PARENT;
β‘ GTK_DIALOG_NO_SEPARATOR.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»Π°Π³ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ OR; Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΈ ΠΎΠΊΠ½ΠΎ Π±Π΅Π· ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡΡ ΠΎΠΊΠ½Π° ΠΈ ΠΎΠ±Π»Π°ΡΡΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ.
ΠΡΡΠ°Π²ΡΠΈΠ΅ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ β ΡΡΠΎ NULL-ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈ ΠΊΠΎΠ΄ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΎΡΠΊΠ»ΠΈΠΊΠ°. ΠΡ ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΎΡΠΊΠ»ΠΈΠΊΠ°, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΠ΅ΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ gtk_dialog_run. ΠΠ±ΡΡΠ½ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π²ΡΠ±ΠΈΡΠ°ΡΡΡΡ ΠΈΠ· Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π³ΠΎΡΠΎΠ²ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ GTK+, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ .
ΠΠ°Π»Π΅Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π±Ρ Π²Ρ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ OK ΠΈ Cancel, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ GTK_RESPONSE_ACCEPT ΠΈ GTK_RESPONSE_REJECT ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΡΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ:
GtkWidget *dialog = gtk_dialog_new_with_buttons("Important question",
parent_window,
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK,
GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL,
GTK_RESPONSE_REJECT, NULL);
ΠΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ Π½Π° Π΄Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ , Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π½Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΈΠ· ΡΡΠ΄Π° ΡΠ»Π°Π³ΠΎΠ² ΡΠΈΠΏΠ° ΠΎΡΠΊΠ»ΠΈΠΊΠ°. Π€Π»Π°Π³ΠΈ accept (ΠΏΡΠΈΠ½ΡΡΡ) ΠΈ reject (ΠΎΡΠ²Π΅ΡΠ³Π½ΡΡΡ) Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ GNOME ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Π²Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΏΠΎ Π²Π°ΡΠ΅ΠΌΡ ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ. (ΠΠΎΠΌΠ½ΠΈΡΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ accept Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ·Π½Π°ΡΠ°ΡΡ "ΠΏΡΠΈΠ½ΡΡΡ".) ΠΡΡΠ³ΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΎΡΠΊΠ»ΠΈΠΊ OK ΠΈ CANCEL, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΡΠΈΠΏΠ΅ GtkResponseType enum Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅.
ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π² Π²Π°ΡΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ GtkDialog ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π³ΠΎΡΠΎΠ²ΡΠΉ ΡΠΏΠ°ΠΊΠΎΠ²ΠΎΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ GtkVBox Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ. ΠΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΏΡΡΠΌΠΎ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ°:
GtkWidget *vbox = GTK_DIALOG(dialog)->vbox;
ΠΡΠΎΡ GtkVBox ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ gtk_box_pack_start ΠΈΠ»ΠΈ ΡΠ΅Π³ΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΎ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ β ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΆΠ΄Π°ΡΡ ΠΎΡ Π½Π΅Π³ΠΎ ΠΎΡΠ²Π΅ΡΠ°. Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ: Π² ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π²Π΅ΡΡ Π²Π²ΠΎΠ΄ Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, ΠΈΠ»ΠΈ Π² Π½Π΅ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΊΠ°ΠΊ Π»ΡΠ±ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π·Π°ΠΏΡΡΠΊ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.