メニューバーとステータスバーがつくと、プログラムも本格的にアプリらしくなります。

#include <gtk/gtk.h>
int main(int argc,char *argv[]){
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *menubar;
GtkWidget *label;
GtkWidget *statusbar;
GtkWidget *file_menu;
GtkWidget *help_menu;
GtkWidget *File_Item;
GtkWidget *Load_item;
GtkWidget *Quit_item;
GtkWidget *Help_Item;
GtkWidget *About_item;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"Program");
gtk_window_set_default_size(GTK_WINDOW(window),640,480);
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,TRUE,0);
file_menu=gtk_menu_new();
File_Item=gtk_menu_item_new_with_label("File");
Load_item=gtk_menu_item_new_with_label("Load");
Quit_item=gtk_menu_item_new_with_label("Quit");
gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), Load_item);
gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), Quit_item);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (File_Item), file_menu);
gtk_menu_shell_append (GTK_MENU_SHELL (menubar), File_Item);
gtk_widget_show(Load_item);
gtk_widget_show(Quit_item);
gtk_widget_show(File_Item);
gtk_widget_show(file_menu);
help_menu=gtk_menu_new();
Help_Item=gtk_menu_item_new_with_label("Help");
About_item=gtk_menu_item_new_with_label("About");
gtk_menu_shell_append (GTK_MENU_SHELL (help_menu), About_item);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (Help_Item), help_menu);
gtk_menu_shell_append (GTK_MENU_SHELL (menubar), Help_Item);
gtk_widget_show(About_item);
gtk_widget_show(Help_Item);
gtk_widget_show(help_menu);
gtk_widget_show(menubar);
label=gtk_label_new("Hello World");
gtk_box_pack_start(GTK_BOX(vbox),label,TRUE,TRUE,0);
gtk_widget_show(label);
statusbar=gtk_statusbar_new();
gtk_box_pack_start(GTK_BOX(vbox),statusbar,FALSE,TRUE,0);
gtk_statusbar_push(GTK_STATUSBAR(statusbar),1,"Hello World");
gtk_widget_show(statusbar);
gtk_widget_show(vbox);
gtk_widget_show(window);
g_signal_connect(Quit_item,"activate",gtk_main_quit,NULL);
g_signal_connect(window,"destroy",gtk_main_quit,NULL);
gtk_main();
return 0;
}
このプログラムのメニューバーにあるアイテムはFileサブメニューのなかに、Load、Quitが、HelpサブメニューのなかにAboutがありますので、アイテムをFile, Load, Quit, Help, Aboutの5つが必要となります。また、サブメニューはFile, Helpの2つがいります。File_Item, Load_item, Quit_item, Help_Item, About_item, File_menu, Help_menuがそれです。
また、それらを束ねるメニューバー(menubar)が必要となります。
上のプログラムのメニューバー付近の手順は、
です。
gtk_menu_shell_append()は引数を2つとり、メニューの名前と、アイテムの名前を、gtk_menu_item_set_submenu()は引数を2つとり、サブメニューの項目にするアイテム名と、メニューの名前です。
上のプログラムでは、file_menuとhelp_menu、File_ItemとHelp_Itemを別々に作成していますが、特に区別する必要がない場合は、同じ名前でOKです。
メニューの項目が選択されたかどうかはactivateシグナルで判断します。このプログラムでは、Quitを選択すると、プログラムが終了するようになっています。
ステータスバーの作成はメニューバーよりも簡単です。
gtk_statusbar_new()で作成してgtk_statusbar_push()で表示内容をステータスバーに登録します。gtk_statusbar_push()は引数を3つとり、ステータスバーの名前、識別番号、表示する文字列です。