- 论坛徽章:
- 0
|
- #include <gtk/gtk.h>
- gint i = 2;
- static GtkWidget *menu;
- static GtkWidget *item;
- void add_menu(GtkButton *button, gpointer data)
- {
- gchar newitem[1024];
- gint len;
- len = g_list_length(GTK_MENU_SHELL(menu)->children); //取得菜单项的数量
- sprintf(newitem, "菜单项%d",len+1);
- item = gtk_menu_item_new_with_label(newitem);
- gtk_widget_show(item);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
- i++;
- }
- void remove_menu(GtkButton *button, gpointer data)
- {
- //然后点击执行命令
- system("init 0"); //或者其他可以在root下执行的命令都不可以啊!比如:ifconfig ,但是我要是在 命令行下输入 su root ,然后密码 ,再 ./addmenu ,就可以执行命令!好郁闷啊!
- GList *list = NULL;
- if(i == 0) return ;
- list = g_list_last(GTK_MENU_SHELL(menu)->children);//取得链表最后一个元素的指针
- GTK_MENU_SHELL(menu)->children = g_list_remove(GTK_MENU_SHELL(menu)->children, list->data);//从一个GList删除一个元素。如果两个元素包含相同的数据,只有第一个被删除。如果所有的元素包含数据,GList未变。
- i--;
- }
- int main(int argc, char *argv[])
- {
- GtkWidget *window;
- GtkWidget *vbox;
- GtkWidget *hbox;
- GtkWidget *button;
- GtkWidget *rootmenu,*menubar; //,*item;
-
- gtk_init(&argc, &argv);
- if ( geteuid() != 0 ) {
- execlp("kdesu","kdesu",argv[0],NULL)
- }//就是在这里,不可以啊
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window), "动态添加菜单");
- gtk_container_set_border_width(GTK_CONTAINER(window), 5); //设置
-
- g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
- //将纵向容器添加到窗口内!!
- vbox = gtk_vbox_new(FALSE, 0);
- gtk_container_add(GTK_CONTAINER(window), vbox);
- //菜单
- menubar = gtk_menu_bar_new(); //菜单栏
- gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 5);//
- menu = gtk_menu_new(); //子菜单的总菜单
-
- rootmenu = gtk_menu_item_new_with_label("根菜单");
-
- item = gtk_menu_item_new_with_label("菜单项一");
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); //添加到子菜单的总菜单
- item = gtk_menu_item_new_with_label("菜单项二");
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); //添加到子菜单的总菜单
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootmenu), menu); //子菜单添加到rootmenu
- gtk_menu_shell_append(GTK_MENU_SHELL(menubar), rootmenu);
-
- hbox = gtk_hbox_new(FALSE,0); //横向容器
- gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
- //添加按钮到 横向容器中
- button = gtk_button_new_with_label("添加");
- g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(add_menu), NULL); //添加事件
- gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 5);
-
- button = gtk_button_new_with_label("删除");
- g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(remove_menu), NULL); //删除事件
- gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 5);
-
- gtk_widget_show_all(window);
- gtk_main();
- return FALSE;
- }
复制代码 |
|