やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Gtk+でマウスイベントを取得してみた

Gtk+でマウスイベントを取得してみた。

Window Console

入手先

GitHub MEGA

開発環境

ライブラリ

使い方

  1. ウインドウでマウスを動かす
  2. コンソールを見る
  3. マウス操作に応じたイベントログが出ている

マウスイベント

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より分かりやすい。