C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 116 を表示中)
■68582 / )  Re[2]: ピクチャボックス上で動くマウスの軌跡を描くプログラム
□投稿者/ yoto (2回)-(2013/10/30(Wed) 11:13:49)
No68581 (Azulean さん) に返信
> ■No68578 (yoto さん) に返信
 ご返信とご指摘ありがとうございます。
 早速、そのようにプログラムを書いてみてみました
 軌跡は描けるようになったのですが、どうもピクチャボックスとフォームの領域近くでしか軌跡を描画できませんでした。
 (ピクチャボックスの中心にマウスを動かしても、軌跡を描くことができません)

 再度、修正したプログラムを記述しますのでよろしくお願い致します

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace WindowsFormsApplication1
{

    public partial class Form1 : Form
    {
        int draw_flag = 0;
        Stopwatch sw;
        const int intervalTime = 100; // msなので0.1秒間隔でマウス座標を取得
        const int maxpoint = 100; // 最大100個の座標これ以上は先頭から削除
        List<Point> drawPoints; // 座標を格納するList
        public Form1()
        {
            InitializeComponent();
            drawPoints = new List<Point>();
            sw = new Stopwatch();
            sw.Start();
            this.MouseMove += new MouseEventHandler(pictureBox1_MouseMove);
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            // drawフラグた立っていれば
            if (draw_flag == 1)
            {
                // インターバルタイム以上経過していれば
                if (sw.ElapsedMilliseconds >= intervalTime)
                {
                    // マウス座標を格納する最大数以上なら先頭の座標をリストから削除
                    if (drawPoints.Count >= maxpoint)
                    {
                        drawPoints.RemoveAt(0);
                    }
                    // マウス座標を格納
                    drawPoints.Add(new Point(e.X, e.Y));
                    // ストップウォッチリセット・スタート
                    sw.Reset();
                    sw.Start();
                    // 描画
                    DrawPoints();
                }
            }
        }

        void DrawPoints()
        {
            Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Graphics u = Graphics.FromImage(canvas);
            Font fnt1 = new Font("MS UI Gothic", 5);
            foreach (Point p in drawPoints)
            {
                u.DrawString("●", fnt1, Brushes.Blue, p);
            }
            pictureBox1.Image = canvas;
            u.Dispose();
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            draw_flag ^= 1;

            if (draw_flag == 0)
            {
                Text = "描画しない";

            }
            else if (draw_flag == 1)
            {
                Text = "描画する";
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }
    }
}


返信 編集キー/


管理者用

- Child Tree -