マウスのホイール回転を検出する。

概要

ホイールの回転は Gtk::Widget::on_scroll_event() で検出できる。 上下左右の方向は GdkEventScroll構造体の direction により得られる。 またshiftやctrlを押しているかどうかは state により得られる。
なお Gtk::Window のデフォルトでは SCROLL イベントは off になっているので add_events( Gdk::SCROLL_MASK )する必要がある。

ソース

wheel.cpp
#include <gtkmm.h>
#include <iostream>

class MainWin : public Gtk::Window
{
public:
    MainWin();

protected:
    virtual bool on_scroll_event( GdkEventScroll *event );
};

MainWin::MainWin()
{
    // OFFになってるイベントを追加
    add_events( Gdk::SCROLL_MASK );
}

// ホイールの回転
bool MainWin::on_scroll_event( GdkEventScroll *event )
{
    std::cout << "wheel event\n"
              << "time = " << event->time << std::endl
              << "x = " << event->x << std::endl
              << "y = " << event->y << std::endl
              << "state = " << event->state << std::endl
              << "direction = ";

    switch( event->direction ){
        case GDK_SCROLL_UP: std::cout << "up"; break;
        case GDK_SCROLL_DOWN: std::cout << "down"; break;
        case GDK_SCROLL_LEFT: std::cout << "left"; break;
        case GDK_SCROLL_RIGHT: std::cout << "right"; break;
    }

    std::cout << std::endl << std::endl;

    return true;
}

int main( int argc, char *argv[] )
{
    Gtk::Main kit( argc, argv );
    MainWin mainwin;
    Gtk::Main::run( mainwin );

    return 0;
}

コンパイル

必要なコンパイルオプションは pkg-config を使って取得する。

g++ wheel.cpp -o wheel `pkg-config gtkmm-2.4 --cflags --libs`

結果

ウィンドウ上でホイールを回転させるとすると端末に方向が表示される。