2014-01-10 28 views
0

我使用C,GTK +和cairo編碼。我正在嘗試使用滑塊來更改變量的值。這是我到目前爲止:GTK調整變量

adj = (GtkAdjustment *) gtk_adjustment_new (300.0, -50.0, 500.0, 1.0, 1.0, 1.0); 
scale = gtk_hscale_new (GTK_ADJUSTMENT (adj)); 
gtk_box_pack_start (GTK_BOX (vbox1), scale, FALSE, TRUE, 5); 
gtk_signal_connect(GTK_OBJECT(adj), "value_changed", GTK_SIGNAL_FUNC(value_changed), NULL); 

這是我創建調整,並在用戶移動滑塊時發送信號。

double 
value_changed (GtkAdjustment *adj) 
{ 
    pos1x = gtk_adjustment_get_value(adj); 
    printf ("\n%lf", pos1x); 
    return pos1x; 
} 

這裏我將pos1x值更改爲滑塊所具有的值。

gboolean 
on_expose_event (GtkWidget *widget, 
     GdkEventExpose *event, 
     gpointer data) 
{ 
    cairo_t *cr; 
    double posy; 
    static gdouble pos2x = 450., pos2y = 290.; //Coordenadas Espelho 
    static gdouble pos3x = 450., pos3y = 250.; 

    cr = gdk_cairo_create(widget->window); 
    pos1x = gtk_adjustment_get_value(adj); 
    posy = 250.; 

    cairo_set_source_rgb (cr, 0, 0, 0); 
    cairo_set_line_width (cr, 1.0); 
    cairo_rectangle (cr, (double) pos1x, (double) posy, 20, 80); 
    cairo_stroke_preserve (cr); 
    cairo_set_source_rgb (cr, 1, 1, 1); 
    cairo_fill (cr); 

現在我想用pos1x變量當用戶移動滑塊以更改我創建的矩形的座標與開羅。但是,我只能得到調整的初始值,而不是變化。我很難想出一個辦法來做到這一點,如果你能幫我一把,我會很感激。

在此先感謝。

回答

1

您需要致電gdk_window_invalidate_rect()或從您的value_changed()功能類似的東西讓GTK +重新發射expose-event