GTK+2.0编程范例代码分析-第二章(2)

转载请注明:http://blog.csdn.net/hubbybob1/article/details/50034387
本文主要是针对 GTK+2.0编程范例–宋国伟老师的书内的代码做一些注释,兼并讨论一下GTK+3.0与2.0的区别.其安装,在网上有很多讲解.
查看各个函数的的说明,就得看说明文档,下面这个网址很好,是GTK+3.0API的目录:
https://developer.gnome.org/gtk3/stable/
或者下载我上传的3.0说明文档,查看:
http://download.csdn.net/detail/hubbybob1/9219553

2.3创建工具条
代码toolbar.c如下所示:

//toolbar.c
#include <gtk/gtk.h>

void on_button_clicked(GtkButton* button,gpointer data)
{
        g_print("你点击的按钮是 %s \n",(gchar*)data);
}

int main(int argc, char* argv[])
{
    GtkWidget* window;
    GtkWidget* box;
    GtkWidget* toolbar;
    GtkWidget* entry;
    GtkWidget* lable;//定义菜单条

  gtk_init(&argc,&argv);

 //window       
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"添加工具条");
    gtk_container_set_border_width(GTK_CONTAINER(window),20);
    g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

//box
    box = gtk_vbox_new(FALSE,0);//非均匀排放
    gtk_container_add(GTK_CONTAINER(window),box);

//toolbar
  toolbar = gtk_toolbar_new();
  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),               //工具条 参考注释1
                           GTK_STOCK_NEW,                      //新建图标的系统固有资源
                           "新建一个文件","新建",              //提示信息
                           GTK_SIGNAL_FUNC(on_button_clicked), //回调函数
                           (gpointer)("新建"),-1);             //回调参数, 插入按钮的位置 -1:表示最后,NULL:依次
  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),
                           GTK_STOCK_OPEN,                  //打开图标
                           "打开一个文件","打开",
                           GTK_SIGNAL_FUNC(on_button_clicked),
                           (gpointer)("打开"),-1);
  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),
                           GTK_STOCK_SAVE,                  //保存图标
                           "保存当前文件","保存",
                           GTK_SIGNAL_FUNC(on_button_clicked),
                           (gpointer)("保存"),-1);

  gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));//在工具条内添加竖线间隔

//lable
  lable = gtk_label_new(" 文件名:");
  gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),lable,"这是一个标签","标签");//添加自己创建你的控件

//entry
  entry = gtk_entry_new();
  gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),entry,"这是一个录入条","录入");
  gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));

  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),
                           GTK_STOCK_CUT,     
                           "剪切","剪切",
                           GTK_SIGNAL_FUNC(on_button_clicked),
                           (gpointer)("剪切"),-1);
  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),
                           GTK_STOCK_COPY,
                           "复制","复制",
                           GTK_SIGNAL_FUNC(on_button_clicked),
                           (gpointer)("复制"),-1);
  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),
                           GTK_STOCK_PASTE,
                           "粘贴","粘贴",
                           GTK_SIGNAL_FUNC(on_button_clicked),
                           (gpointer)("粘贴"),-1);

  gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));

  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),
                           GTK_STOCK_QUIT,
                           "退出","退出",
                           GTK_SIGNAL_FUNC(on_button_clicked),
                           (gpointer)("退出"),-1);
  gtk_toolbar_set_style(GTK_TOOLBAR(toolbar),GTK_TOOLBAR_ICONS);//设定工具条的外观,参考注释2
  gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),GTK_ICON_SIZE_SMALL_TOOLBAR);//设定工具图标的大小,参考注释3

  gtk_box_pack_start(GTK_BOX(box),toolbar,FALSE,FALSE,0);
  gtk_widget_show_all(window);
  gtk_main();
  return FALSE;


}
//1.最关键的函数是gtk_toolbar_insert_stock, 向工具条内插入库固有资源,
//也就是第2个参数,

/*2.gtk_toolbar_set_style 设定工具条的外观
GTK_TOOLBAR_ICONS         只显示图标
GTK_TOOLBAR_TEXT          只显示文字
GTK_TOOLBAR_BOTH          两个都显示,竖直显示
GTK_TOOLBAR_BOTH_HORIZ    图标与文字并排显示
*/

//3.gtk_toolbar_set_icon_size设定大小的参数如下:
/*enum GtkIconSize
GTK_ICON_SIZE_INVALID        Invalid size.
GTK_ICON_SIZE_MENU           Size appropriate for menus (16px).
GTK_ICON_SIZE_SMALL_TOOLBAR  Size appropriate for small toolbars (16px).
GTK_ICON_SIZE_LARGE_TOOLBAR  Size appropriate for large toolbars (24px)
GTK_ICON_SIZE_BUTTON         Size appropriate for buttons (16px)
GTK_ICON_SIZE_DND            Size appropriate for drag and drop (32px)
GTK_ICON_SIZE_DIALOG         Size appropriate for dialogs (48px)
*/
makefile文件
CC=gcc
all:
   $(CC) -o toolbar toolbar.c `pkg-config --cflags --libs gtk+-2.0`

运行的结果如下:
这里写图片描述
当点击时的打印信息如下:
这里写图片描述
这是2.0的结果,如果使用3.0编译就会出错:
这里写图片描述
因此对于gtk3的代码主要变化是gtk_toolbar_insert取代gtk_toolbar_insert_stock,代码写辑更加简单了,使g_signal_connect来产生回调函数

//toolbar1.c
#include <gtk/gtk.h>
int main( int argc, char *argv[])
{

  GtkWidget *window;
  GtkWidget *vbox;
  GtkWidget *toolbar;
  GtkToolItem *new;
  GtkToolItem *open;
  GtkToolItem *save;
  GtkToolItem *sep;
  GtkToolItem *exit;

  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), 250, 200);
  gtk_window_set_title(GTK_WINDOW(window), "toolbar");

   vbox = gtk_vbox_new(FALSE, 0);
   gtk_container_add(GTK_CONTAINER(window), vbox);

   toolbar = gtk_toolbar_new();
   gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);

   gtk_container_set_border_width(GTK_CONTAINER(toolbar), 2);

   new = gtk_tool_button_new_from_stock(GTK_STOCK_NEW);
   gtk_toolbar_insert(GTK_TOOLBAR(toolbar), new, -1);

   open = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
   gtk_toolbar_insert(GTK_TOOLBAR(toolbar), open, -1);

   save = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);
   gtk_toolbar_insert(GTK_TOOLBAR(toolbar), save, -1);

   sep = gtk_separator_tool_item_new();
   gtk_toolbar_insert(GTK_TOOLBAR(toolbar), sep, -1); 

   exit = gtk_tool_button_new_from_stock(GTK_STOCK_QUIT);
   gtk_toolbar_insert(GTK_TOOLBAR(toolbar), exit, -1);

   gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 5);

   g_signal_connect(G_OBJECT(exit), "clicked",  G_CALLBACK(gtk_main_quit), NULL);

   g_signal_connect_swapped(G_OBJECT(window), "destroy",  G_CALLBACK(gtk_main_quit), NULL);

   gtk_widget_show_all(window);
   gtk_main();
   return 0;
}//编译代码
gcc -o toolbar1 toolbar1.c `pkg-config --cflags --libs gtk+-3.0`

运行的结果:
这里写图片描述
系统图标有很多,主要在gtk3-Stock-Items.html内会有定义,下面列出了一些
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值