GTK2..0多級菜單的實現(轉自別人的實現)

來源:互聯網
上載者:User
GTK+多級菜單的實現


學習筆記
2009-12-16 20:20:54
閱讀106

評論0


  字型大小:大



 
訂閱

    GTK+建立菜單的方式有多種,這裡採用的是手工建立菜單的方式。建立多級菜單的過程和方法與建立普通的菜單方法相同,之所以能夠實現菜單的分級形式,關鍵就是重建立立一個菜單,然後將其添加到需要下級菜單的功能表項目中。下面的代碼是整理於一位網友的代碼所得:

#include  <gtk/gtk.h>
 
GtkWidget* form1;
GtkWidget* box1;
GtkWidget* menubar;
GtkWidget* menuitem1;
GtkWidget* menuitem2;
GtkWidget* menuitem3;
GtkWidget* menu1;
GtkWidget* menu2;
GtkWidget* menuitem1_1;
GtkWidget* menuitem1_2;
GtkWidget* menuitem1_3;
GtkWidget* menuitem2_1;
GtkWidget* menuitem2_2;
GtkWidget* menu1_1;
GtkWidget* menuitem1_1_1;
GtkWidget* menuitem1_1_2;
void pt(GtkWidget* w, gpointer p);

int main(int argc, char *argv[])
{gtk_init(&argc,&argv);
form1=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(form1), "destroy", GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
box1=gtk_vbox_new(FALSE,0);

//建立菜單條並把第一級功能表項目放入
menubar=gtk_menu_bar_new();//建立菜單條
menuitem1=gtk_menu_item_new_with_label(" 菜單 1");//建立功能表項目
gtk_menu_bar_append(GTK_MENU_BAR(menubar),menuitem1);//把功能表項目加入到菜單條中
menuitem2=gtk_menu_item_new_with_label(" 菜單 2 ");
gtk_menu_bar_append(GTK_MENU_BAR(menubar),menuitem2);
menuitem3=gtk_menu_item_new_with_label(" 菜單 3 ");
gtk_menu_bar_append(GTK_MENU_BAR(menubar),menuitem3);

//建立menuitem1的子功能表
menu1=gtk_menu_new();//建立菜單
menuitem1_1=gtk_menu_item_new_with_label(" 一級菜單 1_1 ");
gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem1_1);//把功能表項目加入到菜單中
menuitem1_2=gtk_menu_item_new_with_label(" 一級菜單 1_2 ");
gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem1_2);
menuitem1_3=gtk_menu_item_new_with_label(" 一級菜單 1_3 ");
gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem1_3);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem1),menu1);//最後把菜單menu1粘到功能表項目menuitem1上

//如法炮製menuitem2的子功能表
menu2=gtk_menu_new();
menuitem2_1=gtk_menu_item_new_with_label("  一級菜單 2_1 ");
gtk_menu_shell_append(GTK_MENU_SHELL(menu2),menuitem2_1);
menuitem2_2=gtk_menu_item_new_with_label(" 一級菜單 2_2 ");
gtk_menu_shell_append(GTK_MENU_SHELL(menu2),menuitem2_2);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem2),menu2);

//建立二級子功能表,多級菜單的實現關鍵的地方就是 menu1_1=gtk_menu_new() 這一句建立語句,這是第一點
menu1_1=gtk_menu_new();
menuitem1_1_1=gtk_menu_item_new_with_label(" 二級菜單 1_1_1 ");
gtk_menu_shell_append(GTK_MENU_SHELL(menu1_1),menuitem1_1_1);
menuitem1_1_2=gtk_menu_item_new_with_label(" 二級菜單 1_1_2 ");
gtk_menu_shell_append(GTK_MENU_SHELL(menu1_1),menuitem1_1_2);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem1_1),menu1_1);  //將子功能表加入需要子功能表的功能表項目

//串連訊號和函數
gtk_signal_connect(GTK_OBJECT(menuitem1), "activate", GTK_SIGNAL_FUNC(pt), (gpointer)("menuitem1"));
gtk_signal_connect(GTK_OBJECT(menuitem2), "activate", GTK_SIGNAL_FUNC(pt), (gpointer)("menuitem2"));
gtk_signal_connect(GTK_OBJECT(menuitem3), "activate", GTK_SIGNAL_FUNC(pt), (gpointer)("menuitem3"));
gtk_signal_connect(GTK_OBJECT(menuitem1_1), "activate", GTK_SIGNAL_FUNC(pt), (gpointer)("menuitem1_1"));
gtk_signal_connect(GTK_OBJECT(menuitem1_2), "activate", GTK_SIGNAL_FUNC(pt), (gpointer)("menuitem1_2"));
gtk_signal_connect(GTK_OBJECT(menuitem1_3), "activate", GTK_SIGNAL_FUNC(pt), (gpointer)("menuitem1_3"));
gtk_signal_connect(GTK_OBJECT(menuitem2_1), "activate", GTK_SIGNAL_FUNC(pt), (gpointer)("menuitem2_1"));
gtk_signal_connect(GTK_OBJECT(menuitem2_2), "activate", GTK_SIGNAL_FUNC(pt), (gpointer)("menuitem2_2"));
gtk_signal_connect(GTK_OBJECT(menuitem1_1_1), "activate", GTK_SIGNAL_FUNC(pt), (gpointer)("menuitem1_1_1"));
gtk_signal_connect(GTK_OBJECT(menuitem1_1_2), "activate", GTK_SIGNAL_FUNC(pt), (gpointer)("menuitem1_1_2"));

gtk_box_pack_start(GTK_BOX(box1),menubar,FALSE,FALSE,0);
gtk_container_add(GTK_CONTAINER(form1),box1);
gtk_window_set_default_size(GTK_WINDOW(form1),400,200);

gtk_widget_show_all(form1);
gtk_main();
return(0);
}

void pt(GtkWidget* w, gpointer p)
{g_print("%s/n",(gchar*)p);
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.