GTK(三) 菜单

昨天考软件工程,OMG,老师给的简答题一个都没考,哇靠,一个都没有,害我把那么多英文句子背的那么熟还不考!很纠结,方总,您怎么不走寻常路呀……-_-||,回到寝室,看了下GTK关于菜单的应用,好吧,写下来。
先附上一段简单的代码,代码中有比较详细的解释,然后再说说关于menu的一些入门的函数吧。

点击(此处)折叠或打开

  1. #include<gtk/gtk.h>
  2. #include<stdio.h>
  3. void closeApp(GtkWidget *window,gpointer data)
  4. {
  5.     gtk_main_quit();
  6. }

  7. void open_file(GtkWidget *open_item,gpointer data)
  8. {
  9.     printf("opening\n");
  10. }

  11. void save(GtkWidget *save_item,gpointer data)
  12. {
  13.     printf("saving\n");
  14. }

  15. void quit(GtkWidget *quit_item,gpointer data)
  16. {
  17.     printf("quiting\n");
  18. }

  19. int main(int argc,char *argv[])
  20. {
  21.     GtkWidget *window;
  22.     GtkWidget *open_item,*save_item,*quit_item,*file_item;
  23.     GtkWidget *file_menu;
  24.     GtkWidget *menu_bar;
  25.     GtkWidget *vbox;

  26.     gtk_init(&argc,&argv);
  27.     window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
  28.     gtk_window_set_default_size(GTK_WINDOW(window),300,200);
  29.     gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
  30.     g_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(closeApp),NULL);

  31.     //下面是创建子菜单的三个选项:open,save,quit;
  32.     open_item=gtk_menu_item_new_with_label("Open");
  33.     save_item=gtk_menu_item_new_with_label("Save");
  34.     quit_item=gtk_menu_item_new_with_label("Quit");
  35.     
  36.     file_menu=gtk_menu_new();//open,save,quit都要放在file_menu中;

  37.     file_item=gtk_menu_item_new_with_label("File");//file_item用于存放file_menu;
  38.     menu_bar=gtk_menu_bar_new();//即创建一个工具栏,把file_item放在上面
  39.     vbox=gtk_vbox_new(FALSE,0);//这个vbox嘛用于存放工具栏,主要作用是排版

  40.     g_signal_connect(GTK_OBJECT(open_item),"activate",GTK_SIGNAL_FUNC(open_file),"open_file");
  41.     g_signal_connect(GTK_OBJECT(save_item),"activate",GTK_SIGNAL_FUNC(save),"save");
  42.     g_signal_connect(GTK_OBJECT(quit_item),"activate",GTK_SIGNAL_FUNC(quit),"quit");
  43.     
  44.     //将open_item,save_item,quit_item放在file_menu上面
  45.     gtk_menu_shell_append(GTK_MENU_SHELL(file_menu),open_item);
  46.     gtk_menu_shell_append(GTK_MENU_SHELL(file_menu),save_item);
  47.     gtk_menu_shell_append(GTK_MENU_SHELL(file_menu),quit_item);

  48.     //设置子菜单,把file_menu设为file_item的子菜单
  49.     gtk_menu_item_set_submenu(GTK_MENU_ITEM(file_item),file_menu);

  50.     //把file_item放在menu_bar上面
  51.     gtk_menu_bar_append(GTK_MENU_BAR(menu_bar),file_item);

  52.     //把menu_bar放在vbox上
  53.     gtk_box_pack_start(GTK_BOX(vbox),menu_bar,FALSE,FALSE,5);

  54.     //最后,把vbox放在window上,并且显示window和window上所有的构件
  55.     gtk_container_add(GTK_CONTAINER(window),vbox);
  56.     gtk_widget_show_all(window);
  57.     gtk_main();
  58.     return 0;
  59. }
要创建一个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上面


<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(138) | 评论(0) | 转发(0) |
0

上一篇:vim 配置

下一篇:学习单片机技术五周年

给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值