2017-05-19 8 views
2

GTK + 3에서 마우스 이벤트에 응답하기 위해 drawing_area를 얻으려면 어떻게해야합니까?GTK + 3에서 마우스 이벤트에 응답 할 수있는 드로어 영역을 얻는 방법은 무엇입니까?

g_signal_connect(drawing_area, "button-press-event", G_CALLBACK(clicked), NULL); 
: 나는 마우스 클릭 신호로 drawing_area 연결 다음

GtkWidget *drawing_area; 

:

주() 함수에서 내 drawing_area 선언

함수에 의해 정의 '를 클릭 "

static gboolean clicked(GtkWidget *widget, GdkEventButton *event, gpointer user_data) 

    printf("Clicked! \n"); 

    return TRUE; 
} 

프로그램이 실행되고 drawing_area를 표시하지만 나는 그것을 클릭하면, 아무 대답은 아무 일도 발생하지 않습니다! 왜 이런 일이 일어나는 걸까요?

답변

2

이 GtkDrawingArea가 documentation을 살펴보세요 기본

에 의해 마우스 이벤트를 수신 할 수없는 것 같습니다 : 당신이 gtk_widget_add_events와 에게이를 활성화해야합니다

도면 영역에서 마우스 이벤트를 수신하기를(). 키보드 이벤트를 수신하려면 이 도면 영역에 "초점 맞추기"속성을 설정해야하며 은 그림이 영역에 포커스가 있는지 사용자가 볼 수있는 표시를 그려야합니다. 노출 이벤트 핸들러에서 gtk_widget_has_focus()를 사용하여 포커스 표시기를 그리는 지 여부를 결정하십시오. 포커스를 그리는 한 가지 방법은 gtk_render_focus()를 참조하십시오.

또는 창에 이벤트 "button-press-event"를 연결합니다 : 대신

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

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

를이 예와 같이 :

http://zetcode.com/gfx/cairo/basicdrawing/

+0

작동하지만 매우 그 내가 가지고 있기 때문에 잘 내 드로잉 영역은 GUI 안에 내장되어 있으므로 GUI 창에서 클릭하면 (도면 영역 외부에 있더라도) 클릭 이벤트가 처리됩니다. 그리기 영역을 클릭하고 다른 곳을 클릭 할 때만 마우스 이벤트를 처리하기를 원합니다. – PintoDoido

+0

좋아, 편집 –

+1

덕분에, 지금 작동합니다. ** gtk_widget_add_events (drawing_area, GDK_BUTTON_PRESS_MASK)를 추가했습니다. ** – PintoDoido