昨天考软件工程,OMG,老师给的简答题一个都没考,哇靠,一个都没有,害我把那么多英文句子背的那么熟还不考!很纠结,方总,您怎么不走寻常路呀……-_-||,回到寝室,看了下GTK关于菜单的应用,好吧,写下来。
先附上一段简单的代码,代码中有比较详细的解释,然后再说说关于menu的一些入门的函数吧。
- #include<gtk/gtk.h>
- #include<stdio.h>
- void closeApp(GtkWidget *window,gpointer data)
- {
- gtk_main_quit();
- }
- void open_file(GtkWidget *open_item,gpointer data)
- {
- printf("opening\n");
- }
- void save(GtkWidget *save_item,gpointer data)
- {
- printf("saving\n");
- }
- void quit(GtkWidget *quit_item,gpointer data)
- {
- printf("quiting\n");
- }
- int main(int argc,char *argv[])
- {
- GtkWidget *window;
- GtkWidget *open_item,*save_item,*quit_item,*file_item;
- GtkWidget *file_menu;
- GtkWidget *menu_bar;
- GtkWidget *vbox;
- gtk_init(&argc,&argv);
- window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_default_size(GTK_WINDOW(window),300,200);
- gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
- g_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(closeApp),NULL);
- //下面是创建子菜单的三个选项:open,save,quit;
- open_item=gtk_menu_item_new_with_label("Open");
- save_item=gtk_menu_item_new_with_label("Save");
- quit_item=gtk_menu_item_new_with_label("Quit");
-
- file_menu=gtk_menu_new();//open,save,quit都要放在file_menu中;
- file_item=gtk_menu_item_new_with_label("File");//file_item用于存放file_menu;
- menu_bar=gtk_menu_bar_new();//即创建一个工具栏,把file_item放在上面
- vbox=gtk_vbox_new(FALSE,0);//这个vbox嘛用于存放工具栏,主要作用是排版
- g_signal_connect(GTK_OBJECT(open_item),"activate",GTK_SIGNAL_FUNC(open_file),"open_file");
- g_signal_connect(GTK_OBJECT(save_item),"activate",GTK_SIGNAL_FUNC(save),"save");
- g_signal_connect(GTK_OBJECT(quit_item),"activate",GTK_SIGNAL_FUNC(quit),"quit");
-
- //将open_item,save_item,quit_item放在file_menu上面
- gtk_menu_shell_append(GTK_MENU_SHELL(file_menu),open_item);
- gtk_menu_shell_append(GTK_MENU_SHELL(file_menu),save_item);
- gtk_menu_shell_append(GTK_MENU_SHELL(file_menu),quit_item);
- //设置子菜单,把file_menu设为file_item的子菜单
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(file_item),file_menu);
- //把file_item放在menu_bar上面
- gtk_menu_bar_append(GTK_MENU_BAR(menu_bar),file_item);
- //把menu_bar放在vbox上
- gtk_box_pack_start(GTK_BOX(vbox),menu_bar,FALSE,FALSE,5);
- //最后,把vbox放在window上,并且显示window和window上所有的构件
- gtk_container_add(GTK_CONTAINER(window),vbox);
- gtk_widget_show_all(window);
- gtk_main();
- return 0;
- }
要创建一个menubar和submenus需要创建三个widgets:
a menu item:是菜单中的选项,比如上面程序中的save_item.
a menu:是个容器,容纳menu items
a menubar:这是个容器,放置各个独立的menus
函数原型:
1: menubar:
GtkWidget *gtk_menu_bar_new(void);
英文手册上面有这样的一句话,我觉得我该写下来:
This rather self explanatory function create a new menubar.You use gtk_container_add() to pack this into a window,or the box_pack functions to pack into a box - the same as buttons.这个比较容易理解,就不解释了.
2: menu:
GtkWidget *gtk_menu_new(void);
menu我们是看不到的,它只是个存放menu items的容器.
3: menu items:
GtkWidget *gtk_menu_item_new(void);
GtkWidget *gtk_menu_item_new_with_label(const char *label);
GtkWidget *gtk_menu_item_new_with_mnemonic(const char *label);
menu item是一个和实际操作相关的按钮,它必须停放在menu上面
阅读(1907) | 评论(0) | 转发(0) |