椿の日記

たぶんプログラムの話をします

wxHaskellでマウスの位置取得

こんな初歩的なことでもドキュメントを漁らないとならん(笑)

美しく書けるのは嬉しいんだけど、大半の関数が知らない関数なので、何をするにもまずドキュメント、という感じになってしまいます。

wxHaskellでマウスの位置を取得するには大雑把に2通りの方法があり、イベント通知を受け取って処理するか、直接関数を叩いて取得するかの方法があります。

イベントの方法の場合は次のような感じ。

onMotion :: Point -> IO ()

...

set wnd [on motion := onMotion]

直接叩く場合には、次の関数を利用します。

windowGetMousePosition :: Window a -> IO Point

後者のほうは、マウス位置の引数を渡してくれないイベントハンドラでマウス位置を取得するのに必要です。リストコントロールとかのイベントに渡されてくる情報って、どの要素を選択したかどうかだけで、どの位置をクリックしたか、とかそういう情報は受け取れないんですよね…