用鼠标画图

原创 2004年09月02日 16:47:00

用鼠标在窗体中画线

(作者:张均洪)

我们先在同一命名空间中定义一个类和一个接口:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;

public interface Ishape
    {
        void Draw(Graphics g);
    }
    //这个类提供画线的方法
    [Serializable]
    public class Line : Ishape
    {
        Point startP, endP;
        public Line(Point sp, Point ep)
        {
            this.startP = sp;
            this.endP = ep;
        }
        public void Draw(Graphics g)
        {
            g.DrawLine(Pens.Black, startP, endP);
        }
    }

新建一个窗体:FORM1

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization;
using System.Collections;

//定义窗体级公用变量

 //开始画线的起点坐标,此变量的值将在MOUSEDOWN事件中确定
        Point startPoint;
        //定义一个ARRAYLIST,用于存储对象
        private ArrayList shapes=new ArrayList();

 protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            //GETENUMERATOR返回枚举数对象,这个对象为类
            IEnumerator shapeEnum = shapes.GetEnumerator();
            //WHILE是查找出合适的类,并利用其DRAW方法
           while (shapeEnum.MoveNext())
            {
                Ishape shape = (Ishape)shapeEnum.Current;
                //运用相关类的DRAW方法,
                //当我们前面定义多个方法时很有用,比例我们还可以加些
                //画矩形(DrawRectangle)画园(DrawEllipse)等
                //在这里我们只定义一个方法(画线)。

                shape.Draw(g);
               
            }
        }

 

 private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button ==System.Windows.Forms.MouseButtons.Left)
            {
                //鼠标按下确定起点的坐标,把这个变量赋于STARTPOINT值
                startPoint = new Point(e.X, e.Y);
            }
        }

 

 private void Form1_MouseUp(object sender, MouseEventArgs e)
        {                   
            Point endpp = new Point(e.X, e.Y);
            if (e.Button ==System.Windows.Forms.MouseButtons.Left)
            {
                //把LINE类添加到定义好的ARRARYLIST中,以便
                //ONPAINT事件处理。
                shapes.Add(new Line(startPoint, endpp));
            }
            //这句很关键,没有这句你无法看见你的画的线。
            //ONPAINT事件,是在窗体在激活,改变大小,加载,刷新的时候
            //才能进行,所以当我们的动作完成后,必须对窗体进行
            //刷新操作。
            this.Refresh();
          
        }

在新建窗体后注意把窗体背景设为白色喔!!

利用鼠标实现画图功能 java

public class drawPanel extends JPanel implements MouseListener,MouseMotionListener{ Point start=n...
  • yuge1hao
  • yuge1hao
  • 2014年04月08日 09:10
  • 1657

HTML canvas原生js实现鼠标画图

这是一篇对于当前流行的HTTML5 canvas 鼠标画图的总结
  • mixue321
  • mixue321
  • 2015年11月06日 12:05
  • 3610

python opencv入门 鼠标绘图(4)

内容来自OpenCV-Python Tutorials 自己翻译整理 目标: 学习如何操作鼠标事件 学习cv2.setMouseCallback()函数 简单样例: 首先创建一个鼠标的回调函数,当鼠...
  • tengfei461807914
  • tengfei461807914
  • 2017年03月16日 20:14
  • 1719

Win32 鼠标绘图代码研究

http://download.csdn.net/detail/u012313945/9534690 下面摘录绘图部分代码以供研究;winmain和相关窗口过程函数参阅相关资料; #i...
  • bcbobo21cn
  • bcbobo21cn
  • 2017年04月07日 00:06
  • 367

C在控制台上实现鼠标画图功能

#include #include #include HANDLE hOut; HANDLE hIn; void ClearScreen(void); void DispMousePos(COO...
  • morixinguan
  • morixinguan
  • 2016年10月13日 13:52
  • 1162

【OpenCV入门指南】第十一篇 鼠标绘图

前面介绍了图像处理中的Canny边缘检测、轮廓检测、直方图以及直方图均衡化。本篇介绍个互动性强一点内容——用鼠标绘图。在OpenCV中进行鼠标绘图也是非常简易的,主要使用到cvSetMouseCall...
  • u014365862
  • u014365862
  • 2016年09月26日 08:35
  • 468

python+opencv鼠标操作以及制作调色板并画图

鼠标操作: #!/usr/bin/env python import numpy as np import cv2 events=[i for i in dir(cv2) if 'EVENT' i...
  • szfhy
  • szfhy
  • 2016年04月07日 17:02
  • 1834

EmguCV用鼠标绘图

在EmguCV中没有找到OpenCV中的对鼠标的调用的函数。 但是可以用WinFrom的属性来获得鼠标的按键和位置与移动。 EmguCV自带的ImageBox并不能这么用,因为无法使自带的滚轮缩放...
  • qq_22033759
  • qq_22033759
  • 2015年09月19日 12:31
  • 2259

C语言控制鼠标自动画图

最近在研究windows的鼠标自动控制程序,前面也写过一篇这方面的博客,今天又在基本控制的基础上加上了一些好玩的东西,那就是在画图软件中自动画图,是不是很炫酷。 基本思路是既然我们已经能控制鼠标的移动...
  • zjuman2007
  • zjuman2007
  • 2017年08月09日 21:15
  • 168

QT——绘图事件、鼠标事件、QPainter、键盘事件、光标样式、登录框密码回显模式、移除字符串前后的空白、对话框accept()

1、void QWidget::paintEvent(QPaintEvent * event) [virtual protected] ===============================...
  • u012627502
  • u012627502
  • 2014年05月24日 12:47
  • 1588
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用鼠标画图
举报原因:
原因补充:

(最多只允许输入30个字)