使用C语言+EGE图形库(Easy Graphics Engine)。思路是通过不断绘制直线来实现鼠标绘图的功能,前一个时刻鼠标的坐标作为直线的起点,现在时刻的坐标作为终点(严格意义是线段而不是直线)。

 1 #include "graphics.h"
2
3 int main() {
4 initgraph(1000, 600, 0);
5 setcolor(GREEN);
6
7 // 开启抗锯齿,使线条更平滑
8 ege_enable_aa(true);
9
10 // 前一个时刻鼠标的坐标,后一个时刻鼠标的坐标
11 // 用这两点坐标绘制直线,实现连续的绘图动作
12 int pre_x, pre_y, now_x, now_y;
13 int toDraw = 0;
14
15 for (; is_run();) {
16 // 时刻获取新的鼠标消息
17 mouse_msg msg = {0};
18 msg = getmouse();
19
20 // 1. 鼠标左键有消息,判断是否绘图操作
21 if(msg.is_left()) {
22 // 若左键按下,则开始绘图
23 if(msg.is_down()) {
24 toDraw = 1;
25 }
26 // 否则不绘图
27 else {
28 toDraw = 0;
29 }
30 }
31
32 // 2. 更换坐标信息
33 // 前一个时刻的坐标为直线起点
34 // 现在时刻的坐标为直线终点
35 // 记录现在时刻的坐标,作为下一个时刻的“前一个时刻的坐标”
36 pre_x = now_x;
37 pre_y = now_y;
38 now_x = msg.x;
39 now_y = msg.y;
40
41 // 实时显示鼠标坐标信息
42 if(msg.x>=0&&msg.x<=1000 && msg.y>=0&&msg.y<=600) {
43 xyprintf(1,1,"[%d,%d]",msg.x, msg.y);
44 }
45 // 3. 用绘制直线的方式实现鼠标连续绘图
46 if(toDraw) {
47 line(pre_x, pre_y, now_x, now_y);
48 }
49 }
50
51 getch();
52 closegraph();
53 return 0;
54 }

效果展示:

C语言实现鼠标绘图的更多相关文章

  1. 【CITE】利用鼠标绘图C#

    实例018 利用鼠标绘图 光盘位置:光盘\MR\01\018 在常用的画图软件中,用户一般都可以通过鼠标在其中绘图,那么该功能是如何实现的呢?本实例将讲解如何使用C#实现通过拖动鼠标在窗体上绘图的功能 ...

  2. 有关Canvas的一点小事--鼠标绘图

    1.  如何根据鼠标位置获取canvas上对应位置的x,y. 2.  canvas的图糊了,设置宽和高的方式不对. 3.鼠标绘图代码 之前听说过canvas这个元素,但是实际上并没有深入了解过.不过日 ...

  3. R语言基础画图/绘图/作图

    R语言基础画图/绘图/作图 R语言基础画图 R语言免费且开源,其强大和自由的画图功能,深受广大学生和可视化工作人员喜爱,这篇文章对如何使用R语言作基本的图形,如直方图,点图,饼状图以及箱线图进行简单介 ...

  4. Emgu 学习(3) 绘图,使用鼠标绘图,使用trackbar

    绘图 class Program { static void Main(String[] args) { Mat img = , , DepthType.Cv8U, ); img.SetTo(, , ...

  5. java程序实现鼠标绘图

    import java.awt.*; import javax.swing.*; class Gstudy extends JFrame{ private int x1,y1,x2,y2; priva ...

  6. 吴裕雄--天生自然 R语言数据可视化绘图(4)

    par(ask=TRUE) # Basic scatterplot library(ggplot2) ggplot(data=mtcars, aes(x=wt, y=mpg)) + geom_poin ...

  7. 吴裕雄--天生自然 R语言数据可视化绘图(3)

    par(ask=TRUE) opar <- par(no.readonly=TRUE) # record current settings # Listing 11.1 - A scatter ...

  8. 吴裕雄--天生自然 R语言数据可视化绘图(2)

    par(ask=TRUE) opar <- par(no.readonly=TRUE) # save original parameter settings library(vcd) count ...

  9. 吴裕雄--天生自然 R语言数据可视化绘图(1)

    par(ask=TRUE) opar <- par(no.readonly=TRUE) # make a copy of current settings attach(mtcars) # be ...

随机推荐

  1. Java学习(十一)

    今天学习了this和static关键字,这两个都是c++中学过的,但讲师还是讲了2个小时... 学得东西大部分都知道吧. this是当前对象的地址,类中带有static的方法不能使用this. 类中带 ...

  2. Linux驱动实践:带你一步一步编译内核驱动程序

    作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...

  3. 使用bs4中的方法爬取星巴克数据

    import urllib.request # 请求url url = 'https://www.starbucks.com.cn/menu/' # 模拟浏览器发出请求 response = urll ...

  4. SQL语句修改字段类型与第一次SQLServer试验解答

    SQL语句修改字段类型 mysql中 alert table name modify column name type; 例子:修改user表中的name属性类型为varchar(50) alert ...

  5. [hdu7099]Just Another Data Structure Problem

    不难发现,问题即求满足以下条件的$(i,j)$对数: 1.$1\le i<j\le n$且$a_{i}=a_{j}$ 2.$\min_{i\le k\le j}y_{k}\ge l$且$\max ...

  6. 状压DP详解+题目

    介绍 状压dp其实就是将状态压缩成2进制来保存 其特征就是看起来有点像搜索,每个格子的状态只有1或0 ,是另一类非常典型的动态规划 举个例子:有一个大小为n*n的农田,我们可以在任意处种田,现在来描述 ...

  7. 洛谷 P6776 - [NOI2020] 超现实树(找性质,神仙题)

    洛谷题面传送门 nb tea 一道! 首先考虑怎样入手分析这个看似非常不可做的问题.首先题目涉及高度无穷的树,根本枚举不了.不过我们冷静一下就会发现,如果我们记 \(mx=\max\limits_{i ...

  8. pcm.x代码分析

    简介 运行说明 pcm 监控结果可以分为核心.socket 和系统三部分.在核心监控部分,结果包括如下内容: • EXEC • IPC:每 CPU 周期指令数 • FREQ:普通CPU频率系数 • A ...

  9. go定义接口以及类怎么使用接口

    go定义接口以及类怎么使用接口 多态是指代码可以根据类型的具体实现采取不同行为的能力.如果一个类型实现了某个接口,所有使用这个接口的地方,都可以支持这种类型的值. 接口是用来定义行为的类型.这些被定义 ...

  10. Metabolomics Workfolw

    推荐R语言界的国内大佬于淼写的代谢组学workflow,包含了大部分代谢组学(以及暴露组)的数据分析方法. Meta-Workflow 主要内容包括: Sample collection Pretre ...