メニュー

2010年2月11日

ファイル

04-menu.tar.gz

内容

メニューを作成します。はじめにメニューバーを作り、それにメニューアイテム、サブメニューを追加し、またそれぞれのサブメニューにメニューアイテム、サブメニューを追加していく、という流れになります。

まず、部品を入れるためのボックスを用意します。

	box = gtk_vbox_new(FALSE, 0);
	gtk_container_add(GTK_CONTAINER(win), box);

縦方向のボックスを作り、ウインドウに追加しています。

メニューバーを作成します。

	menubar = gtk_menu_bar_new();
	gtk_box_pack_start(GTK_BOX(box), menubar, FALSE, FALSE, 0);

ここでは、部品を入れるボックスを用意したので、メニューバーはウインドウにではなくボックスに追加します。ウインドウ - ボックス - メニューバー という入れ子になります。

メニューバーに項目を追加します。

	miFile = gtk_menu_item_new_with_label("File");
	gtk_menu_shell_append(GTK_MENU_SHELL(menubar), miFile);

メニュー "File" ができます。これに項目を追加するために、サブメニューを設定します。

	mFile = gtk_menu_new();
	gtk_menu_item_set_submenu(GTK_MENU_ITEM(miFile), mFile);

サブメニューにセパレータを追加します。

	miSeparator = gtk_separator_menu_item_new();
	gtk_menu_shell_append(GTK_MENU_SHELL(mFile), miSeparator);

項目 "Quit" を追加します。

	miQuit = gtk_menu_item_new_with_label("Quit");
	gtk_menu_shell_append(GTK_MENU_SHELL(mFile), miQuit);

ここで、部品の構造はウインドウ - ボックス - メニュバー - メニューアイテム ("File") - サブメニュー - メニューアイテム (セパレータ, "Quit" となっています。

"Quit" を選んだらプログラムが終了するように、コールバック関数を設定します。

	g_signal_connect(miQuit, "activate", G_CALLBACK(gtk_main_quit), NULL);

"Quit" にショートカットキー "Ctrl + Q" を設定するため、つぎのようにします。

	accelGroup = gtk_accel_group_new();
	gtk_window_add_accel_group(GTK_WINDOW(win), accelGroup);
	
	...
	
	gtk_widget_add_accelerator(miQuit, "activate", accelGroup,
	  GDK_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);

GTK+ プログラミング 目次へ