none
Mouse_Downなどの各種イベントの作成方法 RRS feed

  • 質問

  •  

    お世話になっています。

    テキストボックス上でマウスジェスチャーを実装しようとしているものです。

    ホックをかけるところまでは出来ましたがそのあと、マウスジェスチャーの方向検知などで使う

    MouseDown,Mouse_Up,Mouse_Moseに相当するイベントが作成できなくて困っています。

     

    以下、マウスホックプロシージャーです。

     

    public partial class Form1 : Form

    {

     

     public event MouseEventHandler Mouse_Down_C;
     public event MouseEventHandler Mouse_UP_C;
     public event MouseEventHandler Mouse_Move_C;

     

    public static int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
            {
                //プロシージャーがアクションをしなければならない
                const int HC_ACTION = 0;
                //コールバックからマーシャルのデータ。
                MouseHookStruct MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));
                //このプロシージャーでは処理するな || 処理不要
                if (nCode < 0 || nCode == HC_ACTION)
                {
                    return CallNextHookEx(hHook, nCode, wParam, lParam);
                }
                else
                {
                    switch ((int)wParam)
                    {
                        case WM.WM_MOUSEMOVE:
                        {
                            //イベントの発生
                            break;
                        }
                        case WM.WM_RBUTTONDOWN:
                        {

               //イベントの発生
                            break;
                        }
                        case WM.WM_RBUTTONUP:
                        {

               //イベントの発生
                            break;
                        }
                    }
                    return CallNextHookEx(hHook, nCode, wParam, lParam);
                }

    }

     

    メッセージも振り分けてあるのであとはイベントを発生させるだけのなのですが

    (1)プロシージャーはstaticであるため thisが使えない→イベントを発生させるための第一引数の指定の仕方が分からない

    (2)イベントを発生させるため第二引数が全く分からない

     

    この二つが大きな問題になっています。もしご存じの方がいましたらよろしくお願いします。

    2008年11月8日 9:53

回答

  •  kassyi さんからの引用

    (1)プロシージャーはstaticであるため thisが使えない→イベントを発生させるための第一引数の指定の仕方が分からない

    イベントのデザインをご覧ください。

     

     kassyi さんからの引用

    (2)イベントを発生させるため第二引数が全く分からない

    イベントの型が MouseEventHandler ですよね。MSDN には第二引数にどんな型のオブジェクトを指定すべきか明記されています。

    どんな型か分かれば、次はその型を MSDN で調べて new するときにどんな引数が必要かを確認しましょう。

    2008年11月8日 13:43

すべての返信

  •  kassyi さんからの引用

    (1)プロシージャーはstaticであるため thisが使えない→イベントを発生させるための第一引数の指定の仕方が分からない

    イベントのデザインをご覧ください。

     

     kassyi さんからの引用

    (2)イベントを発生させるため第二引数が全く分からない

    イベントの型が MouseEventHandler ですよね。MSDN には第二引数にどんな型のオブジェクトを指定すべきか明記されています。

    どんな型か分かれば、次はその型を MSDN で調べて new するときにどんな引数が必要かを確認しましょう。

    2008年11月8日 13:43
  • 回答ありがとうございます。

    その辺は自分的には調べ尽くしたつもりだったのですが。。。

     

    具体的にどう取得したらいいのかなどが結局わからなかったので結構強引にダミーの数を入れて

    ごまかしました。

     

    今度からは、こういう「ヘルプ見ろよ」的な質問はしないことにいたします。

    失礼しました。

    2008年11月8日 14:45