搜索
bottom↓
回复: 1

[I.P.LED][Innovation Practise Linux&Embedded Department][Flower.c程序分析]

[复制链接]

出0入0汤圆

发表于 2008-6-8 11:15:29 | 显示全部楼层 |阅读模式
http://blog.csdn.net/cxjddd/archive/2005/04/12/344844.aspx

我们从主函数入手,看看程序的结构是什么样子的


int main (int argc, char *argv[])<font color=#660000>主函数开始了

{
  GtkWidget *window;window是最外面的窗口

  GtkWidget *vbox;垂直排列的盒子
  GtkWidget *hbox;水平排列的盒子
  GtkWidget *align;调整控件

  gtk_init (&argc, &argv);gtk初始化函数

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);创建程序的主窗口
  gtk_container_set_border_width (GTK_CONTAINER (window), 5);设置border的宽度
  gtk_window_set_title (GTK_WINDOW (window), "Flower");设置title的内容

  g_signal_connect (G_OBJECT (window), "destroy",
            G_CALLBACK (gtk_main_quit), 0);
  g_signal_connect_swapped (G_OBJECT (window), "delete_event",
                G_CALLBACK (gtk_widget_destroy),
                window);

  vbox = gtk_vbox_new (FALSE, 0);


  // create big circle画大圆
  big = create_adjustment_entry (100, 1.0, 1000.0);创建可以调整的可以输入的框,并且有默认值
  show_adjustment_entry (big, "big  ", vbox);显示出来


  // create small circle画小圆
  small = create_adjustment_entry (60, 1.0, 1000.0);创建可以调整的可以输入的框
  show_adjustment_entry (small, "small", vbox);显示出来


  // create pen创建画笔
  pen = create_adjustment_entry (40, 0.0, 1000.0);创建可以调整的可以输入的框
  show_adjustment_entry (pen, "pen  ", vbox);显示出来


  // create check outer创建检查是不是出界的功能
  outer = gtk_toggle_button_new_with_label ("small outer of big");建立一个新的按钮
  gtk_box_pack_start (GTK_BOX (vbox), outer, TRUE, TRUE, 5);
gtk_box_pack_start()和gtk_box_pack_end()函数是用来将打包对象放入这些盒子中的。
void gtk_box_pack_start( GtkBox *box, GtkWidget *child,gint expand, gint fill, gint padding );
第一个参数是你将组件打进去的盒子指针,第二个参数是你将要打进去的组件指针。Expand参数是用来控制是否允许组件扩展至分配给盒子空间的大小(选TRUE),还是盒子的大小收缩到组件那么大(选FALSE)。函数中的fill参数是用来控制是否将多余的空间分配给组件,即将组件扩展到盒子的大小(选TRUE),或者多余的空间不变,保留作为盒子和打包组件间的间隔。该参数只有在expand参数取TRUE时才有效。Padding参数是指组件四周与盒子的间隔大小。
注意fill取FALSE值,expand取TRUE值时与expand取FALSE值,fill值无效的区别。前者的盒子仍是原来创建盒子时指定的大小,而后者的盒子已经缩小到打包组件的大小了。
gtk_box_pack_end()函数的参数与上面描述的一致。只是排列顺序分别是从下到上
,从右到左。

  g_signal_connect (G_OBJECT (outer), "toggled",
            G_CALLBACK (toggled), outer);
gint gtk_signal_connect( GtkObject *object, gchar *name,GtkSignalFunc callback_func, gpointer func_data );
返回值是一个区分同一对象中的事件与不同回调函数的关联标签。这样可以做到一个对象的一个信号就有任意多个回调函数,并且每一个都会按照声明的顺序执行。函数调用的第一个参数是产生信号的widget组件(即按钮等窗口构件),而name则是希望捕获的信号或事件的名称, callback_func则是事件发生后所调用的回调函数名称,而第四个参数func_data则是传递给回调函数的参数。  

  gtk_widget_show (outer);显示这个按钮


  // create check fill
  fill = gtk_toggle_button_new_with_label ("auto zoom");
  gtk_box_pack_start (GTK_BOX (vbox), fill, TRUE, TRUE, 0);
  g_signal_connect (G_OBJECT (fill), "toggled",G_CALLBACK (toggled), fill);
  gtk_widget_show (fill);

  align = gtk_alignment_new (1.0, 0.0, 0.0, 0.0);
  gtk_container_add (GTK_CONTAINER (align), vbox);
将所有的盒子或组件打包到一个大盒子中,用gtk_container_add()函数将盒子加入窗口即可。  



  drawarea = gtk_drawing_area_new ();添加一个绘图区域
  gtk_widget_set_size_request (drawarea, 200, 200);设置大小
  g_signal_connect (G_OBJECT (drawarea), "expose_event",G_CALLBACK (expose_event_callback), NULL);
  
  hbox = gtk_hbox_new (FALSE, 10);
  gtk_box_pack_start (GTK_BOX (hbox), drawarea, TRUE, TRUE, 0);
  gtk_box_pack_start (GTK_BOX (hbox), align, FALSE, FALSE, 0);

  gtk_container_add (GTK_CONTAINER (window), hbox);
将所有的盒子或组件打包到一个大盒子中,用gtk_container_add()函数将盒子加入窗口即可。  



  gtk_widget_show (drawarea);显示绘图区域
  gtk_widget_show (vbox);显示垂直排列的盒子
  gtk_widget_show (align);显示调整
  gtk_widget_show (hbox);显示水平排列的盒子
  gtk_widget_show (window);显示


  gtk_main ();该设置的都设置了,现在进入主循环体,表示程序开始执行了,等待事件的发生呢

  return 0;主函数结束了
}
</font>

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2008-12-24 15:21:09 | 显示全部楼层
老大,学习了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 18:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表