Chinaunix首页 | 论坛 | 博客
  • 博客访问: 173643
  • 博文数量: 35
  • 博客积分: 287
  • 博客等级: 二等列兵
  • 技术积分: 353
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-02 21:01
个人简介

君子务本,本立则道生。

文章分类
文章存档

2014年(4)

2013年(12)

2012年(19)

分类: C/C++

2012-05-09 09:15:03

昨天考软件工程,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上面


阅读(1907) | 评论(0) | 转发(0) |
0

上一篇:vim 配置

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

给主人留下些什么吧!~~