マウス入力2010年2月11日 | |
![]() ファイル使い方ウインドウ上でマウスを動かしたりボタンを押したりすると、コンソール上にメッセージが表示されます。 内容マウスの入力を拾うには、コールバック関数を使います。 g_signal_connect(win, "button-press-event", G_CALLBACK(buttonPress), NULL); g_signal_connect(win, "button-release-event", G_CALLBACK(buttonRelease), NULL); g_signal_connect(win, "scroll-event", G_CALLBACK(buttonScroll), NULL); g_signal_connect(win, "motion-notify-event", G_CALLBACK(motionNotify), NULL);
"button-press-event", "button-release-event", "motion-notify-event" を拾うには、次のようにマスクの設定が必要です。 gtk_widget_set_events(win, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK ); "button-press-event", "button-release-event" のコールバック関数でボタンの状態を得るには、第 2 引数 event の event->button, event->state を調べます。
gboolean buttonPress(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
printf("BUTTON PRESS\n");
mouseButtonKind(event->button);
modifierKind(event->state);
return FALSE;
}
event->button
void mouseButtonKind(int button)
{
switch(button){
case 1:
printf("LEFT\n");
break;
...
event->state ("=" ではなく "&" で調べる)
void modifierKind(int state)
{
if(state & GDK_SHIFT_MASK){
printf("Shift\n");
}
...
"scroll-event" のコールバック関数では、第 2 引数 event の event->direction でホイールの移動方向を調べることができます。
gboolean buttonScroll(GtkWidget *widget, GdkEventScroll *event, gpointer data)
{
switch(event->direction){
case GDK_SCROLL_UP:
printf("BUTTON SCROLL UP\n");
break;
case GDK_SCROLL_DOWN:
printf("BUTTON SCROLL DOWN\n");
break;
default:
break;
}
...
event->direction
マウスの位置を知るには、第 2 引数 event の event->x, event->y を調べます。
gboolean motionNotify(GtkWidget *widget, GdkEventMotion *event, gpointer data)
{
printf("(%3d, %3d)\n", (int)event->x, (int)event->y);
return FALSE;
}
| |
| PENGUINITIS | |