文档章节

绘图板【或画板】

非著名程序员Bla
 非著名程序员Bla
发布于 2016/05/18 18:04
字数 1047
阅读 8
收藏 0
<img src="http://img.blog.csdn.net/20150419002147281?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWWFuZ1J1bmthbmdCbGE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
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.Drawing.Drawing2D;
namespace Draw
{
    public partial class PrintForm : Form
    {
        public PrintForm()
        {
            InitializeComponent();
        }  
        #region   成员变量
        Graphics g = null;//画布,在窗体加载事件中生成
        Pen p = null;//笔,在窗体加载的时间中生成
      //  Brush b = new ;//填充
        Brush b = null;
        Color color = Color.Black;//画笔的颜色,默认为黑色
        string shape = "";//绘什么图形
        float width = 1;//笔的粗细,默认为1
        Point beginPoint = new Point();//开始的点坐标,在鼠标按下事,进行获取
        Point endPoint = new Point();//结束的点坐标,在鼠标释放时,进行获取

        #endregion

        #region 加载事件只负责初始化  设置笔的粗细  颜色的选择
        /// <summary>
        /// 颜色的选择
        /// </summary>
        private void 选择颜色ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //接受用户选择的按钮,这个按钮为颜色控件上的按钮
            DialogResult result= this.colorDialog1.ShowDialog();
            if (result == DialogResult.OK)//如果用户选择了Ok按钮
            {
                color = this.colorDialog1.Color;//获取用户选择的颜色
                
            }
        }

        private void PrintForm_Load(object sender, EventArgs e)
        {
            //在窗体的加载事件中创建Panel控件的Graphics
            g = this.panelDraw.CreateGraphics();
            p = new Pen(color, width);//设置笔的颜色和粗细
         
       
        }

        //设置笔的粗细
        private void toolStripTextBox2_TextChanged(object sender, EventArgs e)
        {
            try
            {
                width = Convert.ToInt32(this.toolStripTextBox2.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("请输入有效的内容");
            }
        }

        #endregion

        #region  逻辑的处理
        bool isMouseUp = false;//鼠标是否释放
        bool isMouseDown = false;//鼠标是否按下
     //   bool roundPaint = false;//控制圆只画一次
        #endregion

        //在panel控件上,按下鼠标
        private void panelDraw_MouseDown(object sender, MouseEventArgs e)
        {
            if (!isMouseUp)//在释放鼠标之前,进if
            {
                beginPoint.X = e.X;
                beginPoint.Y = e.Y;
                isMouseUp = true;//记录下来之后,就把鼠标的状态isMouseUp设为true,给下面的鼠标移动使用
                
            }
           
        }

        //在panel控件上,处理鼠标的移动
        private void panelDraw_MouseMove(object sender, MouseEventArgs e)
        {
            if (shape == "")
            {
                convenientlyPaint(sender, e);
                return;
            }
            if (shape == "橡皮擦")
            {
                xiangpicao(sender, e);
                return;
            }

            

            if (shape == "空心圆" && isMouseUp)//光是一个条件,圆会一直重复花,而且会重叠,所以得在来一个条件,就是鼠标释放时,画一次,画最后的一次
            {
                BlankRound(sender,e);
                return;
            }

            
           
           
        }

        #region 随手绘
        /// <summary>
        /// 随手绘制图形
        /// </summary>
        /// <param name="sender"></param>//巧妙的地方 传参
        /// <param name="e"></param>
        public void convenientlyPaint(object sender, MouseEventArgs e)
        {
            if (isMouseUp)//在移动过程中,如果释放
            {
                endPoint.X = e.X;
                endPoint.Y = e.Y;
                g.DrawLine(p, beginPoint, endPoint);
            }
            //重写设置起点---->轨迹
            beginPoint.X = e.X;
            beginPoint.Y = e.Y;
            //如果不设置,是使用默认的,设置了,是使用设置后的
            p.Color = color;
            p.Width = width;
        }


        public void xiangpicao(object sender, MouseEventArgs e)
        {
            if (isMouseUp)//在移动过程中,如果释放
            {
                endPoint.X = e.X;
                endPoint.Y = e.Y;
                g.DrawLine(p, beginPoint, endPoint);
            }
            //重写设置起点---->轨迹
            beginPoint.X = e.X;
            beginPoint.Y = e.Y;
            //如果不设置,是使用默认的,设置了,是使用设置后的
            p.Color = Color.White;
            p.Width = 5;
        }
        

        #endregion

        /// <summary>
        /// 绘制空心圆
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void BlankRound(object sender, MouseEventArgs e)
        {
           
            if (isMouseUp)//在移动过程中,如果释放
            {
                endPoint.X = e.X;
                endPoint.Y = e.Y;
           }
        }
        
        //当我鼠标释放时,停止绘图--->说白了,一切恢复到初始化之前
        private void panelDraw_MouseUp(object sender, MouseEventArgs e)
        {
            isMouseUp = false;//鼠标是否释放
           
            isMouseDown = false;//鼠标是否按下
            //beginPoint = new Point();//起点坐标初始化,下次点击就有了---------------被这行代码坑死了
            endPoint.X = e.X;
            endPoint.Y = e.Y;

            if (shape == "空心圆")//是可以的
            {
                 p.Color = color;
                p.Width = width;
                g.DrawEllipse(p, beginPoint.X, beginPoint.Y, Math.Abs(beginPoint.X - endPoint.X), Math.Abs(beginPoint.Y - endPoint.Y));
            }

            if (shape == "实心圆")//是可以的
            {
                 p.Color = color;
                 p.Width = width;
                 SolidBrush solidBrush = new SolidBrush(color);
                Rectangle rec=new Rectangle(beginPoint.X, beginPoint.Y, Math.Abs(beginPoint.X - endPoint.X), Math.Abs(beginPoint.Y - endPoint.Y));
                g.FillEllipse(solidBrush,rec);
                g.DrawEllipse(p, beginPoint.X, beginPoint.Y, Math.Abs(beginPoint.X - endPoint.X), Math.Abs(beginPoint.Y - endPoint.Y));
            }

            if( shape == "直线")
            {
                 p.Color = color;
                 p.Width = width;
                g.DrawLine(p, beginPoint, endPoint);
            }
            if (shape == "空心正方形")
            {
                p.Color = color;
                p.Width = width;
                Rectangle rec = new Rectangle(beginPoint.X, beginPoint.Y, Math.Abs(beginPoint.X - endPoint.X), Math.Abs(beginPoint.Y - endPoint.Y));
                g.DrawRectangle(p,rec);
            }

            if (shape == "实心正方形")
            {
                p.Color = color;
                p.Width = width;

                SolidBrush solidBrush = new SolidBrush(color);
                Rectangle rec = new Rectangle(beginPoint.X, beginPoint.Y, Math.Abs(beginPoint.X - endPoint.X), Math.Abs(beginPoint.Y - endPoint.Y));
                g.FillRectangle(solidBrush, rec);
              
                g.DrawRectangle(p, rec);
            }
        }

        #region  用户选择绘制的具体图形

        private void 绘图ToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            shape = "空心圆";
        }

        private void toolStripMenuItem1_Click_1(object sender, EventArgs e)
        {
            shape = "实心圆";
           
        }

        private void 直线ToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            shape = "直线";
        }

        private void 正方形ToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            shape = "空心正方形";
        }

        private void 实心正方形ToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            shape = "实心正方形";
        }
        

        private void 笔的粗细ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            shape = "";
        }
        #endregion

        private void 橡皮擦ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            shape = "橡皮擦";
        }

        private void 清空画板ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.panelDraw.Invalidate();
           
            
        }
    }
}

本文转载自:http://blog.csdn.net/yangrunkangbla/article/details/45120163

共有 人打赏支持
非著名程序员Bla
粉丝 15
博文 75
码字总数 0
作品 0
合肥
后端工程师
私信 提问
MyPaint 0.9.1 发布,绘图小程序

该版本是个bug修复版,没有任何新功能。 MyPaint是一个图像绘画程序。它支持的压力敏感的绘图板,并配备了一个易于使用的刷子收集。有一个复杂的接口,用于创建自己的画笔,把重点放在刷动力...

红薯
2011/03/05
524
0
绘图软件--MyPaint

MyPaint是一个图像绘画程序。它支持的压力敏感的绘图板,并配备了一个易于使用的刷子收集。有一个复杂的接口,用于创建自己的画笔,把重点放在刷动力学(变化的速度,压力,或随机) 。画布的...

匿名
2009/06/07
12.5K
0
MyPaint 0.8.2 发布

MyPaint是一个图像绘画程序。它支持的压力敏感的绘图板,并配备了一个易于使用的刷子收集。有一个复杂的接口,用于创建自己的画笔,把重点放在刷动 力学(变化的速度,压力,或随机) 。画布...

红薯
2010/02/28
166
0
MyPaint 0.8.1 发布,绘图软件

MyPaint是一个图像绘画程序。它支持的压力敏感的绘图板,并配备了 一个易于使用的刷子收集。有一个复杂的接口,用于创建自己的画笔,把重点放在刷动力学(变化的速度,压力,或随机) 。画布...

红薯
2010/02/22
153
0
MyPaint 1.1.0 发布,Linux 绘图软件

MyPaint 1.1.0 增加了新的支持域约束的颜色对话框;工具栏增加新的几何工具(直线、曲线和圆圈);新的混合模型;改进文档框架;支持对称绘制等等,同时还有 bug 修复和优化。 MyPaint是一个...

oschina
2013/01/03
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Netty handle方法周期 (四)

写了一个练习之后,发现自定义的助手类每次肯定是必须的,对于不同的业务逻辑需求,会写相对应的逻辑 最简单的查看Handle生命周期的方式,就是重写上级方法,看名字差不多应该可以知道方法的作用 ...

_大侠__
6分钟前
0
0
vue主动刷新页面及列表数据删除后的刷新实例

1.场景 在处理列表时,常常有删除一条数据或者新增数据之后需要重新刷新当前页面的需求。 2.遇到的问题 1. 用vue-router重新路由到当前页面,页面是不进行刷新的 2.采用window.reload(),或者...

前端小攻略
17分钟前
1
0
闲话高并发的那些神话,看京东架构师如何把它拉下神坛

高并发也算是这几年的热门词汇了,尤其在互联网圈,开口不聊个高并发问题,都不好意思出门。高并发有那么邪乎吗?动不动就千万并发、亿级流量,听上去的确挺吓人。但仔细想想,这么大的并发与...

James-
22分钟前
3
0
Emacs 系列:让我们拥抱 Emacs 和 org 模式

导读 我必须承认,在使用了几十年的 vim 后, 我被 Emacs 吸引了。长期以来,我一直对如何组织安排事情感到沮丧。我也有用过 GTD 和 ZTD 之类的方法,但是像邮件或是大型文件这样的事务真的很...

问题终结者
23分钟前
3
0
解析Node.js通过axios实现网络请求

本次给大家分享一篇node.js通过axios实现网络请求的方法,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 1、使用Npm 下载axios n...

前端攻城老湿
36分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部