2017-05-08 90 views
0

如何使用C GTK3實現鼠標滾輪加/減事件?如何使用GTK3捕捉鼠標輪上/下的事件?

我已經爲了處理鼠標scoll活動適應了這個code

#include <cairo.h> 
#include <gtk/gtk.h> 

static void do_drawing(cairo_t *); 

struct { 
    int count; 
    double coordx[100]; 
    double coordy[100]; 
} glob; 

static gboolean on_draw_event(GtkWidget *widget, cairo_t *cr, 
    gpointer user_data) 
{ 
    do_drawing(cr); 

    return FALSE; 
} 

static void do_drawing(cairo_t *cr) 
{ 
    cairo_set_source_rgb(cr, 0, 0, 0); 
    cairo_set_line_width(cr, 0.5); 

    int i, j; 
    for (i = 0; i <= glob.count - 1; i++) { 
     for (j = 0; j <= glob.count - 1; j++) { 
      cairo_move_to(cr, glob.coordx[i], glob.coordy[i]); 
      cairo_line_to(cr, glob.coordx[j], glob.coordy[j]); 
     } 
    } 

    glob.count = 0; 
    cairo_stroke(cr);  
} 

static gboolean clicked(GtkWidget *widget, GdkEventButton *event, 
    gpointer user_data) 
{ 
    if (event->button == 1) { 
     glob.coordx[glob.count] = event->x; 
     glob.coordy[glob.count++] = event->y; 
    } 

    if (event->button == 3) { 
     gtk_widget_queue_draw(widget); 
    } 

    return TRUE; 
} 

static gboolean mouse_scroll (GtkWidget *widget, 
       GdkEvent *event, 
       gpointer user_data) 
       { 

    printf("scrolled up! \n"); 



        return TRUE; 
       } 


int main(int argc, char *argv[]) 
{ 
    GtkWidget *window; 
    GtkWidget *darea; 

    glob.count = 0; 

    gtk_init(&argc, &argv); 

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 

    darea = gtk_drawing_area_new(); 
    gtk_container_add(GTK_CONTAINER(window), darea); 

    gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK); 
    gtk_widget_add_events(window, GDK_SCROLL_MASK); 


    g_signal_connect(G_OBJECT(darea), "draw", 
     G_CALLBACK(on_draw_event), NULL); 
    g_signal_connect(window, "destroy", 
     G_CALLBACK(gtk_main_quit), NULL); 

    g_signal_connect(window, "button-press-event", 
     G_CALLBACK(clicked), NULL); 

     g_signal_connect(window, "scroll-event", 
     G_CALLBACK(mouse_scroll), NULL); 

    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); 
    gtk_window_set_default_size(GTK_WINDOW(window), 400, 300); 
    gtk_window_set_title(GTK_WINDOW(window), "Lines"); 

    gtk_widget_show_all(window); 

    gtk_main(); 

    return 0; 
} 

然而,這僅僅抓住一個普通的鼠標事件,不管鼠標是否上下滾動時。我想知道,只有當鼠標滾輪向上滾動時,我怎樣才能得到它printf(「滾動!\ n」)。 任何想法?

回答

2

mouse_scroll*event參數應指向GdkEventScroll結構具有direction構件:

GdkScrollDirection direction;方向滾動到(的 一個GDK_SCROLL_UPGDK_SCROLL_DOWNGDK_SCROLL_LEFTGDK_SCROLL_RIGHTGDK_SCROLL_SMOOTH)。