比例构件(Scale widgets)一般用于允许用户在一个指定的取值范围你可视地选择和操纵一个值。例如,在图片的缩放预览中调整放大倍数,或控制一种颜色的亮度,或在指定屏幕保护启动之前不活动的时间间隔时,可能需要用到比例构件。

创建一个比例构件

像滚动条一样,有水平和垂直两种不同类型的比例构件。(大多数程序员似乎喜欢水平的比例构件。)既然在本质上它们的工作方式是相同的,那么不需要对它们分别对待。下面的函数分别创建垂直和水平的比例构件:

GtkWidget *gtk_vscale_new( GtkAdjustment *adjustment );

GtkWidget *gtk_vscale_new_with_range( gdouble min,
                                      gdouble max,
                                      gdouble step );

GtkWidget *gtk_hscale_new( GtkAdjustment *adjustment );

GtkWidget *gtk_hscale_new_with_range( gdouble min,
                                      gdouble max,
                                      gdouble step ); 

adjustment 参数可以是一个已经用 gtk_adjustment_new() 创建了的调整对象,或 NULL,此时,会创建一个匿名的调整对象,所有的值都设为0.0(在此处用处不大)。为了避免把自己搞糊涂,你可能想要创建一个 page_size 值设为 0.0 的调整对象,让它的 upper 值与用户能选择的最高值相对应。而 newwith_range() 函数会照顾到创建一个适当的调整对象。(如果你已经彻底困惑了,看看调整对象这一章,它解释了调整对象的作用和怎样创建和操作它们。)

函数和信号(至少讲了函数)

比例构件可以在滑槽的旁边以数字形式显示其当前值。默认行为是显示值,但是可以用下面这个函数改变其行为:

void gtk_scale_set_draw_value( GtkScale *scale,
                               gboolean draw_value ); 

可以猜到,draw_value取值为 TRUE 或 FALSE,结果是显示或不显示。

缺省情况下,比例构件显示的值,也就是在它的调整对象定义中的value域,圆整到一位小数。可以用以下函数改变显示的小数位:

void gtk_scale_set_digits( GtkScale *scale,
                            gint     digits ); 

digits是要显示的小数位数。可以将digits设置为任意位数,但是实际上屏幕上最多只能显示13位小数。

最后,显示的值可以放在滑槽附近的不同位置:

void gtk_scale_set_value_pos( GtkScale        *scale,
                              GtkPositionType  pos ); 

参数pos是GtkPositionType类型,可以取以下值之一:

  GTK_POS_LEFT
  GTK_POS_RIGHT
  GTK_POS_TOP
  GTK_POS_BOTTOM 

如果将值显示在滑槽的“侧面”(例如,在水平比例构件的滑槽的顶部和底部),显示的值将跟随滑块上下移动。

所有前面讲的函数都在<gtk/gtkscale.h>里定义。当你包含了<gtk/gtk.h>文件时,所有 GTK 构件的头文件都自动包含了。但你应该去察看一下所有你感兴趣的构件的头文件,这样才能学到它们的更多的功能和特性。