C#窗体上绘制矩形
先上效果图

鼠标三个事件
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
//记录开始点
this.mousedown = true;
this.startpoint = e.Location;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
//记录结束点。绘制到窗口上
if (mousedown)
{
this.endpoint = e.Location;
this.Refresh();
gform.DrawImage(, ));
Rectangle rect = new Rectangle();
this.rect_play(ref rect);
gform.DrawRectangle(new Pen(Color.Black), rect);
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
//记录结束点。绘制到bitmap上
this.endpoint = e.Location;
this.mousedown = false;
Rectangle rect = new Rectangle();
this.rect_play(ref rect);
g.DrawRectangle(new Pen(Color.Black), rect);
gform.DrawImage(, ));
}
根据startpoint和endpoint两个点去确定要画的矩形Location和width,heigth
private void rect_play( ref Rectangle rect)
{
//根据两个点确定矩形的左上角点Location
if (this.startpoint.X > this.endpoint.X && this.startpoint.Y < this.endpoint.Y)
{
rect.Location = new Point(this.endpoint.X, this.startpoint.Y);
}
else if (this.startpoint.X < this.endpoint.X && this.startpoint.Y > this.endpoint.Y)
{
rect.Location = new Point(this.startpoint.X, this.endpoint.Y);
}
else if (this.startpoint.X > this.endpoint.X && this.startpoint.Y > this.endpoint.Y)
{
rect.Location = this.endpoint;
}
else
{
rect.Location = this.startpoint;
}
//获取两点的X,Y距离
rect.Width = Math.Abs(this.startpoint.X - this.endpoint.X);
rect.Height = Math.Abs(this.startpoint.Y - this.endpoint.Y);
&& rect.Height == )
{
//防止误点的时候进行绘制
}
)
{
rect.Width = ;
}
)
{
rect.Height = ;
}
}
完整实例代码链接:http://pan.baidu.com/s/1sjkpic1
画的时候窗口闪的特别厉害啊,因为大量的Refresh和Draw,开双缓冲也不起多大作用
迟点有时间用QT c++做一个,QT写出来的应该是不会闪烁的
如果哪位前辈有能解决闪烁问题的,希望在评论区留言,感激不尽
补:http://www.cnblogs.com/magicianlyx/p/4987169.html 这个是QT版本的,不会闪烁
C#窗体上绘制矩形的更多相关文章
- 如何用 matlab 在图片上绘制矩形框 和 添加文字 ?
如何给图像添加矩形框?以及添加想要输入的文字 ? 案例程序,如下所示: clc; close all; clear all;image = imread('/home/wangxiao/Picture ...
- Javascript高级编程学习笔记(86)—— Canvas(3)绘制矩形
绘制矩形 矩形是唯一一种可以直接在2D上下文中绘制的形状. 与矩形有关的方法包括: fillRect() strokeRect() clearRect() 上述方法都接收四个参数: 绘制矩形的 X 坐 ...
- Opencv在视频中静态、动态方式绘制矩形框ROI
Opencv视频处理中的目标跟踪经常用到要在视频上画一个矩形框ROI,标注出要跟踪的物体,这里介绍两种在视频中绘制矩形框的方法,一种是"静态的",一种是"动态的" ...
- vue下canvas绘制矩形
起因:根据项目需求本人写了一个绘制矩形的组件.功能:在图片中绘制矩形,根据图片大小进行自适应展示,获取图片矩形坐标.思路:首先定义一个固定大小的DIV,DIV标签中有监测鼠标变化的四个事件moused ...
- OpenCV之响应鼠标(四):在图像上绘制出矩形并标出起点的坐标
涉及到两方面的内容:1. 用鼠标画出矩形.2.在图像上绘制出点的坐标 用鼠标绘制矩形,涉及到鼠标的操作,opencv中有鼠标事件的介绍.需要用到两个函数:回调函数CvMouseCallback和注册回 ...
- c#在pictureBox控件上绘制多个矩形框及删除绘制的矩形框
在pictureBox上每次只绘制一个矩形框,绘制下一个矩形框时上次绘制的矩形框取消,代码如链接:https://www.cnblogs.com/luxiao/p/5625196.html 在绘制矩形 ...
- [C#绘图]在半透明矩形上绘制字符串
首先要绘制一个半透明的矩形,用到的方法当然是FillRectangle().这个函数在调用的时候除了要指明要绘制的矩形外,还要指明填充矩形的背景色.具体的方法就是在绘制矩形的时候传给它一个画刷Brus ...
- 【MFC】如何在MFC创建的程序中更改主窗口的属性 与 父窗口 WS_CLIPCHILDREN 样式 对子窗口刷新的影响 与 窗体区域绘制问题WS_CLIPCHILDREN与WS_CLIPSIBLINGS
如何在MFC创建的程序中更改主窗口的属性 摘自:http://blog.sina.com.cn/s/blog_4bebc4830100aq1m.html 在MFC创建的单文档界面中: (基于对话框的, ...
- opencv2 使用鼠标绘制矩形并截取和保存矩形区域图像
前言 好长时间没写博文了,今天偷偷懒写篇关于opencv2中鼠标响应操作的文章. 鼠标操作属于用户接口设计,以前一直使用Qt来做,但是如果只需要简单的鼠标,键盘操作,直接调用opencv库的函数也未尝 ...
随机推荐
- 21-nginx单机1W并发优化
一:优化思路 (1)建立socket连接 (2)打开文件,并沿socket返回.二:优化 (1) 修改nginx.conf 进程数量 默认是1024 改成20140 worker_rlimit_no ...
- grep命令:查看配置文件未注释行(转)
FROM: https://linux.cn/article-6958-1.html 可以使用 UNIX/BSD/OS X/Linux 这些操作系统自身提供的 grep,sed,awk,perl或者其 ...
- 【Android】百度地图自定义弹出窗口
我们使用百度地图的时候,点击地图上的Marker,会弹出一个该地点详细信息的窗口,如下左图所示,有时候,我们希望自己定义这个弹出窗口的内容,或者,干脆用自己的数据来构造这样的弹出窗口,但是,在百度地图 ...
- c++中的基本知识点
1 class和struct的区别和联系 在c++中,class和struct只有一点不同,它们是可以完全替代使用的.唯一的不同在于,class中的成员默认是private的,而struct中默认是p ...
- Scipy.sparse矩阵的存储,读取和转化为稠密矩阵
import numpy as np import scipy.sparse as sp m = sp.lil_matrix((7329,7329)) np.save(path,m) #用numpy的 ...
- Java for LeetCode 083 Remove Duplicates from Sorted List
Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...
- 升级pip3的正确姿势
如果你的电脑里装了两个python,就会有两个pip,一个是pip2,一个是pip3,还有可能出现一个既没有2也没有3的pip,一般情况下,pip等于pip2 有时候我们使用pip安装东西会提示我们p ...
- 项目log4j日志管理详解
项目log4j日志管理详解 log4j日志系统在项目中重要性在这里就不再累述,我们在平时使用时如果没有特定要求,只需在log4j.properties文件中顶入输出级别就行了.如果要自定义输出文件,对 ...
- 【Java 语言生态篇】Junit 测试单元
01 概述 JUnit是一个由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework).Junit测试是白盒测试.JUn ...
- TS流分析
http://blog.csdn.net/zxh821112/article/details/17587215 一 从TS流开始 数字电视机顶盒接收到的是一段段的码流,我们称之为TS(Transpor ...