2017-05-08 2 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 파라미터 direction 부재를 갖는 구조 GdkEventScroll 가리켜 야 :로 스크롤

GdkScrollDirection direction; 방향 ( 하나 GDK_SCROLL_UP, GDK_SCROLL_DOWN, GDK_SCROLL_LEFT, GDK_SCROLL_RIGHT 또는 GDK_SCROLL_SMOOTH).

관련 문제