|
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周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|