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

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

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

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, Π² Π½Π΅Π³ΠΎ Π²Ρ‹ просто ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ массив.

<b>#define GNOMEUIINFO_MENU_FILE_TREEΒ Β Β Β  (tree)</b>

<b>#define GNOMEUIINFO_MENU_EDIT_TREEΒ Β Β Β  (tree)</b>

<b>#define GNOMEUIINFO_MENU_VIEW_TREEΒ Β Β Β  (tree)</b>

<b>#define GNOMEUIINFO_MENU_SETTINGS_TREEΒ (tree)</b>

<b>#define GNOMEUIINFO_MENU_FILES_TREEΒ Β Β  (tree)</b>

<b>#define GNOMEUIINFO_MENU_WINDOWS_TREEΒ  (tree)</b>

<b>#define GNOMEUIINFO_MENU_HELP_TREEΒ Β Β Β  (tree)</b>

<b>#define GNOMEUIINFO_MENU_GAME_TREEΒ Β Β  Β (tree)</b>

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

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.10. МСню с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ макросов GNOME

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ ΡƒΠΆΠ΅ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ мСню ΠΈ посмотритС, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ макросы. ВнСситС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ menu1.с ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ menu2.c. Для простоты Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² мСню Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС наша Π·Π°Π΄Π°Ρ‡Π° β€” просто ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ удобство примСнСния макросов GNOME, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… мСню.

#include &lt;gnome.h&gt;

<i>static GnomeUIInfo filemenu[] = {</i>

<i>Β GNOMEUIINFO_MENU_NEW_ITEM(&quot;New&quot;, &quot;Menu Hint&quot;, NULL, NULL),</i>

<i>Β GNOMEUIINFO_MENU_OPEN_ITEM(NULL, NULL),</i>

<i>Β GNOMEUIINFO_MENU_SAVE_AS_ITEM(NULL, NULL),</i>

<i>Β GNOMEUIINFO_SEPARATOR,</i>

<i>Β GNOMEIINFO_MENU_EXIT_ITEM(NULL, NULL),</i>

<i>Β GNOMEUUINFO_END</i>

<i>};</i>

<i>static GnomeUUInfo editmenu[] = </i>

<i>Β GNOMEUIINFO_MENU_FIND_ITEM(NULL, NULL),</i>

<i>Β GNOMEUIINFO_END</i>

<i>};</i>

<i>static GnomeUIInfo menubar[] = {</i>

<i>Β GNOMEUIINFO_MENU_FILE_TREE(filemenu),</i>

<i>Β GNOMEUIINFO_MENU_EDIT_TREE(editmenu),</i>

<i>Β GNOMEUIINFO_END</i>

<i>};</i>

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

Β GtkWidget *app, *toolbar;

Β gnome_program_init(&quot;gnome1&quot;, &quot;0.1&quot;, LIBGNOMEUI_MODULE,

Β  argc, argv, GNOME_PARAM_NONE);

Β app = gnome_app_new(&quot;gnome1&quot;, &quot;Menus, menus, menus&quot;);

Β 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 ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌΠΈ мСню.

ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² Linux - image063.jpg

Рис. 16.13

Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π°

Основная Ρ‡Π°ΡΡ‚ΡŒ любого прилоТСния GUI β€” взаимодСйствиС с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΎ Π²Π°ΠΆΠ½Ρ‹Ρ… событиях. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ для этого Π²Ρ‹ создаСтС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ с ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ OK ΠΈ Cancel ΠΈ, Ссли информация Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π°ΠΆΠ½Π°, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°, Π²Π°ΠΌ приходится Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠΊΠ½Π°ΠΌ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ сдСлаСт Π²Ρ‹Π±ΠΎΡ€ (Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΊΠ½Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ).

ΠœΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ описали Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΈ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ GTK+ Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° GtkWindow, Ρ‡Ρ‚ΠΎ сущСствСнно ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ΡΠΊΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

GtkDialog

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

GtkDialog
β€” ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
GtkWindow
ΠΈ наслСдуСт всС Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ свойства.

GtkWindow

Β +----GtkDialog

GtkDialog
Π΄Π΅Π»ΠΈΡ‚ ΠΎΠΊΠ½ΠΎ Π½Π° Π΄Π²Π΅ области, ΠΎΠ΄Π½Π° для содСрТимого Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ΠΈ другая для ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ вдоль Π½ΠΈΠΆΠ½Π΅Π³ΠΎ края ΠΎΠΊΠ½Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²Π°ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π²ΠΎ врСмя Π΅Π³ΠΎ создания.

<b>GtkWidget* gtk_dialog_new_with_buttons(const gchar *title,</b>

<b>Β GtkWindow *parent, GtkDialogFlags flags,</b>

<b>Β const gchar *first button text, ...);</b>

Π­Ρ‚Π° функция создаСт Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€,

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+, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ….