第67页的gtk+编程例子——检查菜单

以下gtk+编程例子是来自书籍《实用技术:开发Linux应用——用GTK+和GDK开发Linux图形用户界面应用》第67页的内容——检查菜单,还是使用上一个例子程序,将gtk_menu_item_new_with_label改为gtk_check_menu_item_new_with_label,所有选项前就有一个空框,这样可以实现多选,gtk_check_menu_item_set_active用来设置选项默认状态是已经勾选的

在openSUSE-Leap-15.3-DVD-x86_64的gnome3.34.7桌面环境下编译的,其中pkg-config --cflags --libs gtk±3.0两边有反引号括起来的
ruhong@localhost:~/gtk> gcc page67.c -o page67 pkg-config --cflags --libs gtk±3.0
ruhong@localhost:~/gtk> ./page67

/* the example on page 67 */

#include <gtk/gtk.h>
/* 准备材料,自定义函数  */
	/*  comments注释  */

/* 程序主体 */
int main( int argc, char *argv[] )
{
	GtkWidget *window;
	/* 声明变量window为构件gtkwidget */
	GtkWidget *vbox;
	GtkWidget *menubar;
	GtkWidget *zhou;
	GtkWidget *fen;
	GtkWidget *mian;
	GtkWidget *fan;
	GtkWidget *qita;
	GtkWidget *zhoumenu;
	GtkWidget *zhou1;
	GtkWidget *zhou2;
	GtkWidget *zhou3;
	GtkWidget *zhou4;
	GtkWidget *zhou5;
	GtkWidget *fenmenu;
	GtkWidget *fen1;
	GtkWidget *fen2;
	GtkWidget *fen3;
	GtkWidget *fen4;
	GtkWidget *fen5;
	GtkWidget *mianmenu;
	GtkWidget *mian1;
	GtkWidget *mian2;
	GtkWidget *mian3;
	GtkWidget *mian4;
	GtkWidget *mian5;
	GtkWidget *fanmenu;
	GtkWidget *fan1;
	GtkWidget *fan2;
	GtkWidget *fan3;
	GtkWidget *fan4;
	GtkWidget *fan5;
	GtkWidget *qitamenu;
	GtkWidget *qita1;
	GtkWidget *qita2;
	GtkWidget *qita3;
	GtkWidget *qita4;
	GtkWidget *qita5;
	
	gtk_init (&argc, &argv);
	/* 初始化gtk */

	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	/*  创建顶级窗口 */
	gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
	/*  设置窗口位置为显示器的中间 */
	gtk_window_set_default_size(GTK_WINDOW(window), 500, 200);
	/*  设置窗口的大小,横为500像素,竖为200像素 */
	gtk_window_set_title (GTK_WINDOW (window), "菜单");
	/*  为窗口顶部加上标题为菜单  */
	g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
	/*  为窗口加上动作,当收到destroy信号,就启动gtk_main_quit事件,gtk_main_quit就是鼠标单击窗口右上角的关闭按钮就终止程序  */
	
	vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
	/*  创建组合框  */
	gtk_container_add (GTK_CONTAINER (window), vbox);
	/*  将组合框装入窗口容器  */

	menubar = gtk_menu_bar_new ();
	/*  创建菜单条  */
	gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, TRUE, 0);
	/*  将菜单条装入组合框容器  */
	zhou = gtk_menu_item_new_with_label ("粥");
	/*  创建名称粥zhou  */
	gtk_menu_shell_append (GTK_MENU_SHELL(menubar), zhou);
	/*  将名称粥zhou加入菜单条menubar  */
	fen = gtk_menu_item_new_with_label ("粉");
	gtk_menu_shell_append (GTK_MENU_SHELL(menubar), fen);
	mian = gtk_menu_item_new_with_label ("面");
	gtk_menu_shell_append (GTK_MENU_SHELL(menubar), mian);
	fan = gtk_menu_item_new_with_label ("饭");
	gtk_menu_shell_append (GTK_MENU_SHELL(menubar), fan);
	qita = gtk_menu_item_new_with_label ("其它");
	gtk_menu_shell_append (GTK_MENU_SHELL(menubar), qita);
	/*  菜单条包含粥粉面饭其它  */
	
	zhoumenu = gtk_menu_new ();
	/*  类似创建菜单条,菜单条可以理解为一级菜单或者叫根菜单, */
	/* 创建粥菜单zhoumenu,粥菜单是二级菜单或者叫做次级菜单, */
	/* 接下的粉菜单fenmenu、面菜单、饭菜单都是二级菜单, */
	/* 粥菜单有6个名称:粥zhou、白粥zhou1、猪红粥zhou2、 */
	/* 八宝粥zhou3、艇仔粥zhou4、皮蛋瘦肉粥zhou5, */
	/* 第一名称粥zhou已经在一级菜单就已经被创建了, */
	/* 在二级菜单就是重复利用第二次,粥zhou作为封面要用 */
	/* gtk_menu_item_set_submenu函数加入粥菜单zhoumenu  */
	
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (zhou), zhoumenu);
	zhou1 = gtk_check_menu_item_new_with_label ("白粥");
	/*  创建名称白粥zhou1  */
	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (zhou1), TRUE);
	/*  设置白粥zhou1的默认状态是已经勾选了  */
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou1);
	/*  将名称白粥zhou1加入二级菜单粥菜单zhoumenu  */
	zhou2 = gtk_check_menu_item_new_with_label ("猪红粥");
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou2);
	zhou3 = gtk_check_menu_item_new_with_label ("八宝粥");
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou3);
	zhou4 = gtk_check_menu_item_new_with_label ("艇仔粥");
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou4);
	zhou5 = gtk_check_menu_item_new_with_label ("皮蛋瘦肉粥");
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou5);

	fenmenu = gtk_menu_new ();
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (fen), fenmenu);
	fen1 = gtk_check_menu_item_new_with_label ("螺蛳粉");
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen1);
	fen2 = gtk_check_menu_item_new_with_label ("桂林米粉");
	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (fen2), TRUE);
	/*  设置桂林米粉fen2的默认状态是已经勾选了  */
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen2);
	fen3 = gtk_check_menu_item_new_with_label ("肠粉");
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen3);
	fen4 = gtk_check_menu_item_new_with_label ("汤粉");
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen4);
	fen5 = gtk_check_menu_item_new_with_label ("炒粉");
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen5);

	mianmenu = gtk_menu_new ();
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (mian), mianmenu);
	mian1 = gtk_check_menu_item_new_with_label ("牛腩面");
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian1);
	mian2 = gtk_check_menu_item_new_with_label ("兰州拉面");
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian2);
	mian3 = gtk_check_menu_item_new_with_label ("捞面");
	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mian3), TRUE);
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian3);
	mian4 = gtk_check_menu_item_new_with_label ("竹升面");
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian4);
	mian5 = gtk_check_menu_item_new_with_label ("刀削面");
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian5);

	fanmenu = gtk_menu_new ();
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (fan), fanmenu);
	fan1 = gtk_check_menu_item_new_with_label ("叉烧饭");
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan1);
	fan2 = gtk_check_menu_item_new_with_label ("扬州炒饭");
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan2);
	fan3 = gtk_check_menu_item_new_with_label ("煲仔饭");
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan3);
	fan4 = gtk_check_menu_item_new_with_label ("蒸饭");
	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (fan4), TRUE);
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan4);
	fan5 = gtk_check_menu_item_new_with_label ("竹筒饭");
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan5);

	qitamenu = gtk_menu_new ();
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (qita), qitamenu);
	qita1 = gtk_check_menu_item_new_with_label ("云吞");
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita1);
	qita2 = gtk_check_menu_item_new_with_label ("萝卜糕");
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita2);
	qita3 = gtk_check_menu_item_new_with_label ("粽");
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita3);
	qita4 = gtk_check_menu_item_new_with_label ("油炸鬼");
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita4);
	qita5 = gtk_check_menu_item_new_with_label ("蛋塔");
	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (qita5), TRUE);
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita5);
	
	gtk_widget_show_all (window);
	/*  显示构件窗口  */
	gtk_main ();
	/*  进入主循环,等待信号(鼠标键盘)输入  */
	return 0;
}

效果图如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值