GTK+图形化应用程序开发学习笔记—菜单

Posted byxdaz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GTK+图形化应用程序开发学习笔记—菜单相关的知识,希望对你有一定的参考价值。

 GTK+图形化应用程序开发学习笔记(九)—菜单

 

一、建立菜单

   

   菜单由菜单条(GtkMenuBar)和从菜单条或其他菜单下拉的菜单(GtkMenu)组成。在建立菜单条以前必须先建立应用程序的纵向组合框。

       建立菜单分为下面几个步骤:

       1)建立菜单条(GtkMenuBar),并把它加到纵向组合框内。函数gtk_menu_bar_new建立GtkMenuBar构件。

 

1

名称:

gtk_menu_bar_new

功能

创建菜单条

头文件

#include <gtk/gtk.h>

函数原形

GtkWidget *gtk_menu_bar_new(void);

参数

返回值

新的菜单条

      

 

 

 

 

 

 

 

 

下面是建立菜单和将它放入纵向组合框的代码:

menuber=gtk_menu_bar_new();

       gtk_box_pack_start(GTK_BOX(vbox),menubar,FALSE,TRUE,0);

       gtk_widget_show(menubar);

 

2)建立后的菜单条是空的,还需要增加菜单项。用gtk_menu_item_new_with_label建立带标号的菜单项。如:建立标号为 “File”的菜单项用下面的语句:

meanFile=gtk_menu_item_new_item_new_with_label(“File”);

 

2

名称:

gtk_menu_item_new_with_label

功能

创建菜单项

头文件

#include <gtk/gtk.h>

函数原形

GtkWidget* gtk_menu_item_new_with_label(const gchar *label);

参数

label   菜单项标号

返回值

新的菜单项

      

      

 

 

 

 

 

 

3)在建立菜单项后,需要将它加到前面建立的菜单条中。gtk_menu_bar_append函数能够实现上面的功能。我们把上面的菜单项加到菜单条里面的代码如下:

       gtk_menu_bar_append(GTK_MENU_BAR(menubar),MenuFile);

 

       注意gtk_menu_bar_append和下面的gtk_menu_bar_append实际上都是宏,gtk_menu_bar_append的定义是这样如下:

#define gtk_menu_bar_append(menu,child)      gtk_menu_shell_append  ((GtkMenuShell *)(menu),(child))

 

       下面我们给出gtk_nenu_shell_append函数的原型:

3

名称:

gtk_menu_shell_append

功能

把菜单项加入菜单

头文件

#include <gtk/gtk.h>

函数原形

void gtk_menu_shell_append(GtkMenuShell *menu,GtkWidget *child);

参数

menu    菜单

child    菜单项

返回值

      

 

 

 

 

 

 

 

 

 

于是上面的代码也可以改成:

       gtk_menu_shell_append(GTK_MENU_SHELL(menubar),MenuFile);

 

 

到这里我们就可以编写如下图的菜单了

 

 

 

/*menu1.h*/

#include <gtk/gtk.h>

 

GtkWidget *CreateMenuItem(GtkWidget *MenuBar,char *test);

 

int main(int argc,char *argv[ ])

GtkWidget *window;/*定义窗体*/

GtkWidget *MenuBar;/*定义菜单条*/

GtkWidget *box;/*定义组合框*/

 

gtk_init(&argc,&argv);

window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_widget_set_usize(window,400,200);/*设置窗体大小*/

gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL);

 

box=gtk_vbox_new(FALSE,0);/*创建纵向组合框*/

gtk_container_add(GTK_CONTAINER(window),box);/*把组合框加入窗体*/

MenuBar=gtk_menu_bar_new();/*创建菜单条*/

gtk_box_pack_start(GTK_BOX(box),MenuBar,FALSE,TRUE,0);/*把菜单条加入组合框*/

 

CreateMenuItem(MenuBar,”Fiel”);/*调用创建菜单项函数*/

CreateMenuItem(MenuBar,”Edit”);

CreateMenuItem(MenuBar,”View”);

CreateMenuItem(MenuBar,”Insert”);

CreateMenuItem(MenuBar,”Tool”);

 

gtk_widget_show(box);

gtk_widget_show(MenuBar);

gtk_widget_show(window);

gtk_main();

 

GtkWidget *CreateMenuItem(GtkWidget *MenuBar,char *test)

GtkWidget *MenuItem

 

MenuItem=gtk_menu_item_new_with_label(test);/*创建菜单项*/

gtk_menu_shell_append(GTK_MENU_SHELL(MenuBar),MenItem);/*把菜单项加入菜单条,注意我们用gtk_menu_shell_append是为了menu2.c程序的方便*/

gtk_widget_show(MenuItem);

return MenuItem;

 

 

       4)建立子菜单。

到这里我们已经建立了一个简单的菜单条,但大多数菜单每个菜单向都包括一个子菜单。这席菜单只有在下拉菜单时才能看到。如:当选择“File”菜单项时,会在下面弹出一个子菜单。其中包括诸如“New”、“Open”、和“Save”等选项。

       Gtk+的做法是先建立包含“New”、“Open”、“Save”等选项的新菜单,再用gtk_menu_item_set_submenu函数将新菜单和“File”菜单项联系在一起。

 

4

名称:

gtk_menu_new

功能

建立菜单

头文件

#include <gtk/gtk.h>

函数原形

void gtk_menu_append(GtkMenu menu,GtkWidget child);

参数

menu    菜单条

child    菜单项

返回值

      

   

      

     

 

 

 

 

  (5)建立子菜单项,并把它加入到子菜单。建立子菜单项和建立父菜单项的函数都是gtk_menu_item_new_with_label.而把子菜单项加入到子菜单可以用gtk_menu_append.也可以用gtk_menu_shell_append函数。因为在gtk_menu_append函数内部也是调用gtk_menu_shell_append函数的。下面是gtk_menu_bar_append函数的定义。

#define gtk_menu_bar_append(menu,child)      gtk_menu_shell_append  ((GtkMenuShell *)(menu),(child))

 

6)建立子菜单于父菜单项的联系

名称:

gtk_menu_item_set_submenu

功能

建立子菜单和父菜单项的联系

头文件

#include <gtk/gtk.h>

函数原形

void gtk_menu_item_set_submenu(GtkMenuItem *menu_item,GtkWidget *submenu);

参数

menu_item     父菜单项

submenu       子菜单

返回值

      

 

 

 

 

 

 

 

 

 

 

下面是建立菜单的例子:

/*menu2.c*/

#include <gtk/gtk.h>

 

GtkWidget *CreateMenuItem(GtkWidget *MenuBar,char *test);

GtkWidget *CreateMenu(GtkWidget *MenuItem);

 

int main(int argc,char *argv[ ])

GtkWidget *window;/*定义窗体*/

GtkWidget *MenuBar;/*定义

以上是关于GTK+图形化应用程序开发学习笔记—菜单的主要内容,如果未能解决你的问题,请参考以下文章

图形开发语言 工具

Java图形化用户界面(GUI)笔记介绍

Python100天学习笔记Day10 图形用户界面和游戏开发

Python100天学习笔记Day10 图形用户界面和游戏开发

Gtk/gtkmm glarea 队列渲染不适用于专用图形

java 图形化界面笔记(1)

(c)2006-2024 SYSTEM All Rights Reserved IT常识