嗨,我试着用C中的鼠标在窗体上绘制一个橡皮矩形。

问题

1)鼠标释放后,矩形消失。[我想把它留在表格上]

2)我还需要找到绘制矩形的四个点的坐标。

3)必要时,我还需要删除矩形以绘制新的矩形。

形式:

代码

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace rubberbandrectangle

{

public partial class Form1 : Form

{

Boolean bHaveMouse;

Point ptOriginal = new Point();

Point ptLast = new Point();

public Form1()

{

InitializeComponent();

}

private void Form1_MouseDown(object sender, MouseEventArgs e)

{

bHaveMouse = true;

ptOriginal.X = e.X;

ptOriginal.Y = e.Y;

ptLast.X = -1;

ptLast.Y = -1;

}

private void MyDrawReversibleRectangle(Point p1, Point p2)

{

Rectangle rc = new Rectangle();

p1 = PointToScreen(p1);

p2 = PointToScreen(p2);

if (p1.X < p2.X)

{

rc.X = p1.X;

rc.Width = p2.X - p1.X;

}

else

{

rc.X = p2.X;

rc.Width = p1.X - p2.X;

}

if (p1.Y < p2.Y)

{

rc.Y = p1.Y;

rc.Height = p2.Y - p1.Y;

}

else

{

rc.Y = p2.Y;

rc.Height = p1.Y - p2.Y;

}

ControlPaint.DrawReversibleFrame(rc,

Color.Red, FrameStyle.Dashed);

}

private void Form1_MouseUp(object sender, MouseEventArgs e)

{

bHaveMouse = false;

if (ptLast.X != -1)

{

Point ptCurrent = new Point(e.X, e.Y);

MyDrawReversibleRectangle(ptOriginal, ptLast);

}

ptLast.X = -1;

ptLast.Y = -1;

ptOriginal.X = -1;

ptOriginal.Y = -1;

}

private void Form1_MouseMove(object sender, MouseEventArgs e)

{

Point ptCurrent = new Point(e.X, e.Y);

if (bHaveMouse)

{

if (ptLast.X != -1)

{

MyDrawReversibleRectangle(ptOriginal, ptLast);

}

ptLast = ptCurrent;

MyDrawReversibleRectangle(ptOriginal, ptCurrent);

}

}

private void Form1_Load(object sender, EventArgs e)

{

MouseDown += new MouseEventHandler(Form1_MouseDown);

MouseUp += new MouseEventHandler(Form1_MouseUp);

MouseMove += new MouseEventHandler(Form1_MouseMove);

bHaveMouse = false;

}

}

}

谢谢你的阅读

c语言中如何找坐标,如何在C语言中找到四个坐标并擦除RubberBand矩形的绘图#相关推荐

  1. java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

    java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...

  2. c语言如何输入矩阵_如何在 COMSOL 软件中调试外部材料

    问题描述 我实现了一种用于"结构力学"的外部材料,但我的模型无法求解. 解决方法 外部材料一般通过 C 语言编码,然后被编译到共享库中,供 COMSOL Multiphysics ...

  3. c语言如何输入数字,请问如何在C语言中输入数字获得拼音?

    请问如何在C语言中输入数字获得拼音? 答案:1  信息版本:手机版 解决时间 2018-12-10 16:41 已解决 2018-12-10 08:20 请问如何在C语言中输入数字获得拼音? 最佳答案 ...

  4. c语言编程输出字母倒三角形,如何在C语言中打印倒三角形

    如何在C语言中打印倒三角形 发布时间:2020-07-28 11:53:15 来源:亿速云 阅读:281 作者:Leah 这期内容当中小编将会给大家带来有关如何在C语言中打印倒三角形,文章内容丰富且以 ...

  5. python类中没有属性_如何在python语言中在类中删除属性和添加属性

    在python语言中的类,可以使用class定义类,调用__init__方法进行初始化:默认传入self,可以在后面在添加几个属性.可以使用setattr()添加属性,也可以使用delattr()删除 ...

  6. c 语言 函数返回数组_如何在C ++函数中返回数组

    c 语言 函数返回数组 介绍 (Introduction) In this tutorial, we are going to understand how we can return an arra ...

  7. react中纯函数_如何在纯React中创建电子邮件芯片

    react中纯函数 by Andreas Remdt 由Andreas Remdt 如何在纯React中创建电子邮件芯片 (How to create email chips in pure Reac ...

  8. java excel 操作 jar包_[JAVA]使用POI向Excel中写入数据以及如何在Intellj IDEA中打jar包...

    freddon 发表于2018-05-30 阅读 1383 | 评论 0 给GF写的,现在记录下POI操作Excel读写过程;以及如何在Intellj IDEA中打jar包 代码如下: ``` imp ...

  9. android中的后退功能,如何在Android应用中实现一个返回键功能

    如何在Android应用中实现一个返回键功能 发布时间:2020-11-23 16:28:56 来源:亿速云 阅读:89 作者:Leah 今天就跟大家聊聊有关如何在Android应用中实现一个返回键功 ...

  10. 在vm中安装linux虚拟机,如何在vm虚拟机中安装linux

    1.首先在vm中新建一个虚拟机 2.选择典型 3.点击稍后安装操作系统 4.选择安装linux,版本可以选择centOS64位的,根据自己系统的位数选择即可 5.选择安装路径,建议装在其他盘,..反正 ...

最新文章

  1. integer比较_Java整数缓存Integer.valueOf(127)==Integer.valueOf(127)为True
  2. 长春理工有计算机专业吗,长春理工大学(专业学位)计算机技术考研难吗
  3. CentOS 5 安装as86汇编器
  4. 深入浅出的排序算法-冒泡排序
  5. selenium 图片上传
  6. 复习django项目一——迁移数据库
  7. 今日奇葩事件,一位不懂技术,却来管理技术团队的领导
  8. Cocos2dx 之 ButtonSprite
  9. 蒋方舟:到清华不再做名人 狂热崇拜理工男生
  10. XTDorne平台搭建无人机仿真环境时遇到的问题及解决
  11. ACM-ICPC 2018 南京赛区网络预赛 K. The Great Nim Game(博弈)
  12. java用springboot开发的美食菜谱网(有美食达人)附论文
  13. Linux常用命令及面试题
  14. 树莓派程序开机自启(尝试过很多终于成了)
  15. EM算法-数学原理及其证明
  16. 0代码实现接口自动化测试 —— RF框架实践
  17. PHP 实现 阿里云 短信发送 功能步骤
  18. java发送邮箱_Java发送邮件
  19. html5毕业答辩ppt,【图】毕业论文ppt内容(毕业论文毕业答辩PPT制作和讲述要点)...
  20. ASP.net网页进行数据更新操作

热门文章

  1. 计算机如何提高开机速度?
  2. 解锁中智集团30平方米数据中心备受追捧的密码
  3. php pcntl_alarm,pcntl_alarm定时闹钟信号详解
  4. N4110解决WIN10黑屏问题
  5. netbeans 插件安装
  6. FMI飞马网|如何尽早的接触人工智能才不会被抢饭碗,2030年会怎么样?
  7. html5 图片命名,html5 css命名规范
  8. 马云鼓动年轻人2015创业是存私心的?
  9. 苹果手机的定向广告时代告终
  10. 端口汇聚实现多端口带宽叠加