GTK学习笔记之菜单相关[0611]

本文介绍了一个GTK菜单布局的示例程序,演示了如何创建多级菜单,并解释了menu、menubar和menu_item的区别及用法。
GTK学习笔记
            --菜单及其相关
Written By Pingf
ContractedBlock.gifExpandedBlockStart.gifCode
#include <gtk/gtk.h>
//对原文的例子稍加修改以便理解gtk的菜单布局的原理
int main( int argc, char *argv[])
{
  GtkWidget 
*window;
  GtkWidget 
*vbox;
  GtkWidget 
*menubar;
  GtkWidget 
*filemenu1,*filemenu2;
  GtkWidget 
*file;
  GtkWidget 
*quit;
  GtkWidget 
*realquit;
  gtk_init(
&argc, &argv);
  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), 
250200);
  gtk_window_set_title(GTK_WINDOW(window), 
"menu");
  vbox 
= gtk_vbox_new(FALSE, 0);
  gtk_container_add(GTK_CONTAINER(window), vbox);
//menubar 和 menu 是不同的
  menubar = gtk_menu_bar_new();
  filemenu1 
= gtk_menu_new();
  filemenu2 
= gtk_menu_new();
//menu_item和menu及menubar也是不同的
//如果说menu和menubar是定义了菜单的框体
//那么menu_item则定义了菜单了菜单的内容
//但这么说又不是很科学,因为每级菜单向上一层挂接时,要通过menu_item来挂接
//下面定义menu_item的内容
  file = gtk_menu_item_new_with_label("File");
  quit 
= gtk_menu_item_new_with_label("Quit");
  realquit
=gtk_menu_item_new_with_label("RealQuit");
//下面将menu挂接在上级菜单的某个菜单项(menu_item)中
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), filemenu1);
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(quit),filemenu2);
//下面对每级菜单填入具体的菜单项
  gtk_menu_shell_append(GTK_MENU_SHELL(filemenu2),realquit);
  gtk_menu_shell_append(GTK_MENU_SHELL(filemenu1), quit);
  gtk_menu_shell_append(GTK_MENU_SHELL(menubar), file);
  gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 
3);

  g_signal_connect_swapped(G_OBJECT(window), 
"destroy",
        G_CALLBACK(gtk_main_quit), NULL);
//说明一下active信号,对于最后一级的菜单项来说,点击后触发
//但若是该菜单项下面还有子菜单,则鼠标移动至其上即触发
//可以将下面链接函数中realquit改为quit测试一下
  g_signal_connect(G_OBJECT(realquit), "activate",
        G_CALLBACK(gtk_main_quit), NULL);
  gtk_widget_show_all(window);
  gtk_main();
  
return 0;
}
再附一张图片以便理解
 

转载于:https://www.cnblogs.com/pingf/archive/2009/06/11/1501061.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值