none
クリック判定について RRS feed

  • 質問

  • いつもお世話になっております。

    WindowsメッセージにWM_LBUTTONDBLCLKというダブルクリックのメッセージはありますがシングルクリックのWM_LBUTTONCLKはないですよね?
    シングルクリックされたということを知るには、一般的にどのように処理すべきなのでしょうか?
    2009年11月18日 1:51

回答

  • ダブルクリックを行ったと判定されたらWM_LBUTTONDBLCLKがくるわけですから、
    WM_LBUTTONDOWNがきてから、GetDoubleClickTime()で取得できる時間以上
    WM_LBUTTONDBLCLKがこなかったらシングルクリックとみなすことができます。

    注意しなければならないのは、CS_DBLCLKSが設定されたクラスのウィンドウでないと、
    WM_LBUTTONDBLCLKがこないということと、
    GetDoubleClickTime()で取得できる時間はシステムがこの間隔以内でクリックされたら
    ダブルクリックとみなす、という時間のことなので、少し余裕をもってみた方がいいだろうと
    いうことです。
    • 回答としてマーク ひろ太 2009年11月18日 4:53
    2009年11月18日 4:17

すべての返信

  • 左ボタンを押された時は、WM_LBUTTONDOWN
    左ボタンを離された時は、WM_LBUTTONUP がきます。

    ダブルクリックの際には、
    WM_LBUTTONDOWN
    WM_LBUTTONUP
    WM_LBUTTONDBLCLK
    WM_LBUTTONUP
    という感じでメッセージがきます。
    2009年11月18日 2:15
  • Atsushi777さん、こんにちは。

    >左ボタンを押された時は、WM_LBUTTONDOWN 
    >左ボタンを離された時は、WM_LBUTTONUP がきます。
    >
    それは分かるのですが、私が知りたいのはシングルクリックされたかどうかの判定方法です。
    一般的にどのようにするものなのでしょうか?
    2009年11月18日 4:02
  • ダブルクリックを行ったと判定されたらWM_LBUTTONDBLCLKがくるわけですから、
    WM_LBUTTONDOWNがきてから、GetDoubleClickTime()で取得できる時間以上
    WM_LBUTTONDBLCLKがこなかったらシングルクリックとみなすことができます。

    注意しなければならないのは、CS_DBLCLKSが設定されたクラスのウィンドウでないと、
    WM_LBUTTONDBLCLKがこないということと、
    GetDoubleClickTime()で取得できる時間はシステムがこの間隔以内でクリックされたら
    ダブルクリックとみなす、という時間のことなので、少し余裕をもってみた方がいいだろうと
    いうことです。
    • 回答としてマーク ひろ太 2009年11月18日 4:53
    2009年11月18日 4:17
  • >左ボタンを押された時は、WM_LBUTTONDOWN 
    >左ボタンを離された時は、WM_LBUTTONUP がきます。
    >
    それは分かるのですが、私が知りたいのはシングルクリックされたかどうかの判定方法です。
    一般的にどのようにするものなのでしょうか?
    WindowsのSDKには「シングルクリック」を意味する概念はありません。
    従って「シングルクリック」という言葉を使用する人がその意味を定義しなければなりません。

    一般にあるウインドウのある「領域」内でDOWNが発生し、当該「領域」内のDOWNされた点の
    近傍でUPが発生したとみなせる場合に「シングルクリック」といえるかもしれませんが、
    「ドラッグ」動作等との切り分けをしなければならない場合が想定され、それほど単純ではありません。

    DOWNのみUPのみのきっかけだけでコードするのが気に入らない場合は
    hiro-taさんの好みにコードすればよいと思います。
    2009年11月18日 4:38
  • ありがとうございます。ありがたく参考にさせていただきます。
    やっぱり結構面倒なんですね。
    何故WM_LBUTTONCLKがないのだろうか・・・

    2009年11月18日 4:53
  • 仲澤さん、こんにちは。
    なるほど、それでWM_LBUTTONCLKがないのですね。
    いやー目から鱗です。

    2009年11月18日 6:15