-->

Основы программирования в Linux

На нашем литературном портале можно бесплатно читать книгу Основы программирования в Linux, Мэтью Нейл-- . Жанр: Программирование / ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Основы программирования в Linux
Название: Основы программирования в Linux
Дата добавления: 16 январь 2020
Количество просмотров: 667
Читать онлайн

Основы программирования в Linux читать книгу онлайн

Основы программирования в Linux - читать бесплатно онлайн , автор Мэтью Нейл
В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

Перейти на страницу:

Второй и третий элементы структуры определяют текст пункта меню и всплывающей подсказки. (Подсказка выводится в строке состояния, у нижнего края окна.)

Назначение элемента

moreinfo
зависит от типа. В случае
ITEM
и
TOGGLEITEM
он указывает на функцию обратного вызова, которую следует вызвать при активации пункта меню. Для
RADIOITEMS
он указывает на массив структур
GnomeUIInfo
, в которых группируются переключатели.

user_data
— произвольный указатель, передаваемый в функцию обратного вызова. Элементы
pixmap_type
и
pixmap_info
позволяют добавить к пункту меню растровую пиктограмму, a
accelerator_key
и
ac_mods
помогут определить клавиатурный эквивалент пункта меню.

И наконец, элемент

widget
применяется для внутреннего хранения указателя на виджет пункта меню функцией создания меню.

Выполните упражнение 16.9.

Упражнение 16.9. Меню GNOME

Вы сможете опробовать меню с помощью данной короткой программы. Назовите ее menu1.с.

#include <gnome.h>

void closeApp(GtkWidget *window, gpointer data) {

 gtk_main_quit();

}

1. Определите для пунктов меню функцию обратного вызова, названную

item_clicked
:

void item clicked(GtkWidget *widget, gpointer user_data) {

 printf("Item Clicked!n");

}

2. Далее следуют определения меню. У вас есть подменю, меню верхнего уровня и массив строки меню:

static GnomeUIInfo submenu[] = {

 {GNOME_APP_UI_ITEM, "SubMenu", "SubMenu Hint",

  GTK_SIGNAL_FUNC(item_clicked), NULL, NULL, 0, NULL, 0, 0, NULL},

 {GNOME_APP_UI_ENDOFINFO, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0,

  NULL}

};

static GnomeUIInfo menu[] = {

 {GNOME_APP_UI_ITEM, "Menu Item 1", "Menu Hint",

  NULL, NULL, NULL, 0, NULL, 0, 0, NULL},

 {GNOME_APP_UI_SUBTREE, "Menu Item 2", "Menu Hint",

  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.

Основы программирования в Linux - image062.jpg

Рис. 16.12

Структура

GnomeUIInfo
едва ли дружественная по отношению к программисту, если учесть, что она состоит из 11 элементов, большинство из которых обычно равно
NULL
или нулю. При их вводе очень легко допустить ошибку и трудно отличить одно поле от другого в длинном массиве элементов. Для улучшения сложившейся ситуации в среде GNOME определены макросы, устраняющие необходимость определения структур вручную. Эти макросы также вставляют пиктограммы и клавиатурные акселераторы для вас, и все даром. На самом деле редко возникают причины, заставляющие использовать вместо них что-то другое.

Существуют два набора макросов, первый из которых определяет отдельные пункты меню. Эти макросы принимают два параметра: указатель на функцию обратного вызова и данные пользователя.

<b>#include &lt;libgnomeui/libgnameui.h&gt;</b>

<b>#define GNOMEUIINFO_MENU_OPEN_ITEM(cb, data)</b>

<b>#define GNOMEUIINFO_MENU_SAVE_ITEM(cb, data)</b>

<b>#define GNOMEUIINFO_MENU_SAVE_AS_IТЕМ(cb, data)</b>

<b>#define GNOMEUIINFO_MENU_PRINT_ITEM(cb, data)</b>

<b>#define GNOMEUIINFO_MENU_PRINT_SETUP_ITEM(cb, data)</b>

<b>#define GNOMEUIINFO_MENU_CLOSE_IТЕМ(cb, data)</b>

<b>#define GNOMEUIINFO_MENU_EXIT_IТЕМ(cb, data)</b>

<b>#define GNOMEUIINFO_MENU_QUIT_IТЕМ(cb, data)</b>

<b>#define GNOMEUIINFO_MENU_CUT_ITEM(cb, data)</b>

<b>#define GNOMEUIINFO_MENU_COPY_ITEM(cb, data)</b>

<b>#define GNOMEUIINFO_MENU_PASTE_ITEM(cb, data)</b>

<b>#define GNOMEUIINFO_MENU_SELECT_ALL_ITEM(cb, data)</b>

...

Перейти на страницу:
Комментариев (0)
название