Перейти к содержанию

Как сделать меню 3-его уровня используя библиотеку Gtk+


Рекомендуемые сообщения

Очень интересуюсь тем, как сделать меню 3-его уровня. Ниже приведу листинг, с помощью которого получилось сделать строку меню с пунктом меню, по нажатию которого появляется меню. И для этого меню, свои пункты меню.

#include <gtk/gtk.h>
 
gint32 delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
{
    gtk_main_quit();
    return FALSE;
}
 
int main(int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *menu_bar;
    GtkWidget *menu;
    GtkWidget *box;
 
    gtk_init(&argc, &argv);
 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "menu");
    gtk_container_set_border_width(GTK_CONTAINER(window), 10);
    g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_event), "NULL");
 
    box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
    gtk_container_add(GTK_CONTAINER(window), box);
 
    menu = gtk_menu_new(); // меню
    menu_bar = gtk_menu_bar_new(); // строка меню
    // создаем новые пункты меню
    GtkWidget *file_item = gtk_menu_item_new_with_label("file");
    GtkWidget *open_item = gtk_menu_item_new_with_label("open");
    GtkWidget *save_item = gtk_menu_item_new_with_label("save");
    GtkWidget *quit_item = gtk_menu_item_new_with_label("quit");
    // привязываем пункты меню к меню
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), open_item);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), save_item);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), quit_item);
    // обработчики сигналов для пунктов меню
    g_signal_connect_swapped(G_OBJECT(open_item), "activate", G_CALLBACK(delete_event), "NULL");
    g_signal_connect_swapped(G_OBJECT(save_item), "activate", G_CALLBACK(delete_event), "NULL");
    g_signal_connect_swapped(G_OBJECT(quit_item), "activate", G_CALLBACK(delete_event), "NULL");
 
    gtk_menu_item_set_submenu(GTK_MENU_ITEM(file_item), menu);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), file_item);
 
    gtk_box_pack_start(GTK_BOX(box), menu_bar, FALSE, FALSE, 3);
 
    gtk_widget_show_all(window);
 
    gtk_main();
 
    return 0;
}

Помогите направить меня в правильную сторону. Если не кодом, то идеей..

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...