Основы программирования в Linux
Шрифт:
};
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;
}
Попробуйте
Рис. 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),
Поделиться:
Популярные книги
Некромант . Трилогия
Перстень некромансера
Фантастика:
фэнтези
7.64
рейтинг книги
По зову сердца
Фантастика:
фэнтези
6.40
рейтинг книги
Вернувшийся: Первые шаги. Том II
2. Вернувшийся
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Чтоб знали! Избранное (сборник)
Русская потаенная литература
Поэзия:
поэзия
5.00
рейтинг книги
"Фантастика 2025-79". Компиляция. Книги 1-32
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Астроном
Проза:
современная проза
5.00
рейтинг книги
Двенадцатая реинкарнация. Трилогия
Фантастика:
боевая фантастика
5.60
рейтинг книги
"Фантастика 2023-134". Компиляция. Книги 1-22
Фантастика 2023. Компиляция
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Как воспитать здорового и умного ребенка. Ваш малыш от А до Я
Научно-образовательная:
педагогика
5.00
рейтинг книги
Страдание
22. Анита Блейк
Фантастика:
фэнтези
ужасы и мистика
8.37
рейтинг книги
Аристократ из прошлого тысячелетия
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.25
рейтинг книги
Досье Дрездена. Книги 1 - 15
Досье Дрездена
Фантастика:
фэнтези
ужасы и мистика
5.00
рейтинг книги
Имперец. Том 3
2. Имперец
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.50
рейтинг книги
"Фантастика 2023-201. Компиляция. Книги 1-26
Фантастика 2023. Компиляция
Фантастика:
боевая фантастика
попаданцы
5.00