Gtk+でマウスイベントを取得してみた。
入手先
開発環境
- Windows XP SP3
- Visual C++ 2010 Express
ライブラリ
- glade3-3.6.7-with-GTK+.exe
- GTK+ 2.16.2.1602
- cairo 1.8.6
使い方
- ウインドウでマウスを動かす
- コンソールを見る
- マウス操作に応じたイベントログが出ている
マウスイベント
gtk_signal_connect() |
gtk_widget_set_events() |
説明 | 詳細 |
---|---|---|---|
button_press_event | GDK_BUTTON_PRESS_MASK | マウスボタン押下 | 左、右、中央、XButton1, XButton2, の5つのボタン押下を検出できる |
button_release_event | GDK_BUTTON_RELEASE_MASK | マウスボタン離す | 左、右、中央、XButton1, XButton2, の5つのボタン押下を検出できる |
motion_notify_event | GDK_POINTER_MOTION_MASK | マウス位置 | マウスの位置が変わるたびに発生する |
enter_notify_event | GDK_ENTER_NOTIFY_MASK | マウスが入ったとき | 起動時にウインドウの描画領域にマウスが乗るような位置にしておいてマウスが入ると発生 |
leave_notify_event | GDK_LEAVE_NOTIFY_MASK | マウスが去ったとき | enter_notify_eventの直後にAlt+Tabでアクティブウインドウを他のものにすると発生 |
scroll_event | GDK_SCROLL_MASK | マウスホイール | 上下に反応する。ただし左右(TiltWheel)はWindowsVista以降のみ。XPやそれ以前は動作しない |
ほかのマウスイベント
今回はやっていないが、以下のイベントもあるらしい。
他
こまかい追加
イベント追加
delete_event
。終了確認するときに編集するdestroy
。Windowを閉じるとメイン関数を終了する。
文字コード変換を関数化
gchar* utf8_1 = NULL;
ConvertFromCp932ToUtf8("1.ウインドウでマウスを動かす", &utf8_1);
g_free(utf8_1);
前回の手抜きをひとつ解消。
ソースコード
問題
cairoが改行できない
cairo_show_text関数に改行コードを渡しても改行してくれない。
改行は自力でどうにかせねばならないっぽい。 こちらが参考になるか。
ウインドウサイズに合わせて自動改行(回りこみ)とかは実装できるのだろうか。
コードがごちゃごちゃ
イベントごとに関数が増えていく。 これを同じファイル&同じ名前空間に書いている。
alloc/free系の関数呼出もうっとおしい。 そろそろGTKmm, cairommが使えるか調べてみるか。
所感
マウスイベントは普通に使えそう。 やはりWindowsAPIより分かりやすい。