C语言实现鼠标绘图
使用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语言实现鼠标绘图的更多相关文章
- 【CITE】利用鼠标绘图C#
实例018 利用鼠标绘图 光盘位置:光盘\MR\01\018 在常用的画图软件中,用户一般都可以通过鼠标在其中绘图,那么该功能是如何实现的呢?本实例将讲解如何使用C#实现通过拖动鼠标在窗体上绘图的功能 ...
- 有关Canvas的一点小事--鼠标绘图
1. 如何根据鼠标位置获取canvas上对应位置的x,y. 2. canvas的图糊了,设置宽和高的方式不对. 3.鼠标绘图代码 之前听说过canvas这个元素,但是实际上并没有深入了解过.不过日 ...
- R语言基础画图/绘图/作图
R语言基础画图/绘图/作图 R语言基础画图 R语言免费且开源,其强大和自由的画图功能,深受广大学生和可视化工作人员喜爱,这篇文章对如何使用R语言作基本的图形,如直方图,点图,饼状图以及箱线图进行简单介 ...
- Emgu 学习(3) 绘图,使用鼠标绘图,使用trackbar
绘图 class Program { static void Main(String[] args) { Mat img = , , DepthType.Cv8U, ); img.SetTo(, , ...
- java程序实现鼠标绘图
import java.awt.*; import javax.swing.*; class Gstudy extends JFrame{ private int x1,y1,x2,y2; priva ...
- 吴裕雄--天生自然 R语言数据可视化绘图(4)
par(ask=TRUE) # Basic scatterplot library(ggplot2) ggplot(data=mtcars, aes(x=wt, y=mpg)) + geom_poin ...
- 吴裕雄--天生自然 R语言数据可视化绘图(3)
par(ask=TRUE) opar <- par(no.readonly=TRUE) # record current settings # Listing 11.1 - A scatter ...
- 吴裕雄--天生自然 R语言数据可视化绘图(2)
par(ask=TRUE) opar <- par(no.readonly=TRUE) # save original parameter settings library(vcd) count ...
- 吴裕雄--天生自然 R语言数据可视化绘图(1)
par(ask=TRUE) opar <- par(no.readonly=TRUE) # make a copy of current settings attach(mtcars) # be ...
随机推荐
- 15-Transfer Learning
介绍 迁移学习指的就是,假设你手上有一些跟你现在要进行的task没有直接相关的data,那你能不能用这些没有直接相关的data来帮助我们做一些什么事情.比如说:你现在做的是猫跟狗的classifer, ...
- [cf582E]Boolean Function
由于每一个运算都有括号,因此添加的运算不会改变运算顺序 先将其建出一棵表达式树,也就是维护两个栈,是节点和运算符优先级单调递增的栈(设置左括号优先级最低,右括号弹出直至左括号) 每一次运算,也就是新建 ...
- [bzoj5294]二进制
首先可以发现$2^k$模3意义下有循环节,也就是1,-1,1,-1--考虑对于x个1,y个0,判断是否存在3的倍数1.x为偶数时一定可以,选择等量的1和-1即可2.x为奇数,要满足$x\ge 3$且$ ...
- Semaphore信号量的使用
package ThreadTest; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; pub ...
- IEnumerator vs Iterator
IEnumerator vs Iterator IEnumerator 不考虑Reset方法和原始列表的可变性,NoveNext和Current的只读向前用法: Initially, the enum ...
- P6973 [NEERC2016]List of Primes
题目传送门. 题意简述:将质数集合的所有子集按照子集和为第一关键字,字典序为第二关键字从小到大排序,求最终形成的字符串的第 \(l\sim r\) 个字符. 在 cnblogs 内查看. 又是一道妙妙 ...
- vector.erase();vector.clear();map.erase();
vector::erase()返回下一个iter: STL中的源码: //清除[first, last)中的所有元素 iterator erase(iterator first, iterator l ...
- python11文件读写模块
将文件的打开和关闭,交给上下文管理工具with去实现. def read_file(): """ 读取文件 :return: """ fil ...
- DRF请求流程及主要模块分析
目录 Django中CBV请求生命周期 drf前期准备 1. 在views.py中视图类继承drf的APIView类 2. drf的as_view()方法 drf主要模块分析 1. 请求模块 2. 渲 ...
- Linux 中的五种 IO 模型
Linux 中的五种 IO 模型 在正式开始讲Linux IO模型前,比如:同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一 ...