マウスをキャプチャする

マウスをキャプチャして、移動中の座標を表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 次のファイルを格納して下さい。
    /***************************************/
    /*★ Mouse の移動を調べる    前田 稔 ★*/
    /***************************************/
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Windows.Forms.ComponentModel;
    
    public class MyForm : Form
    {
        int     st,pos;
    
        public MyForm()
        {
            this.Capture = false;
            st = 0;
            pos = 0;
        }
    
        protected override void OnMouseDown(MouseEventArgs e)
        {
            st = e.X;
            this.Capture = true;
            Invalidate();
        }
        protected override void OnMouseMove(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                pos = e.X;
                Invalidate();
            }
        }
        protected override void OnMouseUp(MouseEventArgs e)
        {
            this.Capture = false;
            pos = e.X;
        }
    
        protected override void OnPaint(PaintEventArgs e)
        {
            string  str1,str2;
            base.OnPaint(e);
            Graphics g = e.Graphics;
            str1 = Convert.ToString(st);
            str2 = Convert.ToString(pos);
            Font ft = new Font("MS 明朝", 16);
            RectangleF rf = new RectangleF(10F, 100F, 160F, 60F);
            g.DrawString("StartX=" + str1 + "\nPosX=" + str2, ft, Brushes.Black, rf); 
        }
    }
    
    class capture
    {
        public static void Main()
        {
            MyForm mf = new MyForm();
            Application.Run(mf);
        }
    }
    
  2. st が左クリックされたX座標です。
    pos がドラッグで移動中のX座標です。
    int st,pos;
  3. MyForm の Constructor で初期値を設定します。
    this.Capture = false; でキャプチャを OFF にします。
        public MyForm()
        {
            this.Capture = false;
            st = 0;
            pos = 0;
        }
        
  4. OnMouseDown() をオーバーライドして、ボタンが押されるとX座標を保存してマウスのキャプチャを開始します。
    マウスがキャプチャされると、Frame の外に出ても座標を取得することが出来ます。
        protected override void OnMouseDown(MouseEventArgs e)
        {
            st = e.X;
            this.Capture = true;
            Invalidate();
        }
        
  5. OnMouseMove() をオーバーライドして、マウスの座標を表示します。
        protected override void OnMouseMove(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                pos = e.X;
                Invalidate();
            }
        }
        
  6. OnMouseUp() をオーバーライドして、マウスのキャプチャを終了します。
        protected override void OnMouseUp(MouseEventArgs e)
        {
            this.Capture = false;
            pos = e.X;
        }
        
  7. ドラッグが開始された座標と現在座標を表示する OnPaint() です。
        protected override void OnPaint(PaintEventArgs e)
        {
            string  str1,str2;
            base.OnPaint(e);
            Graphics g = e.Graphics;
            str1 = Convert.ToString(st);
            str2 = Convert.ToString(pos);
            Font ft = new Font("MS 明朝", 16);
            RectangleF rf = new RectangleF(10F, 100F, 160F, 60F);
            g.DrawString("StartX=" + str1 + "\nPosX=" + str2, ft, Brushes.Black, rf);
        }
        

前田稔(Maeda Minoru)の超初心者のプログラム入門