使用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 }

效果展示:

最新文章

  1. Android中使用Notification实现宽视图通知栏(Notification示例二)
  2. Redis集群(九):Redis Sharding集群Redis节点主从切换后客户端自动重新连接
  3. 安卓中級教程(11):深入研究餓了麼的各個java檔運作關係(1)
  4. 微信公众号开发之被逼学web服务端1-----使用SecureCRT连接Linux服务器
  5. android版高仿淘宝客户端源码V2.3
  6. c#多线程生产者消费者(手稿)
  7. cannot modify header information 关于实现widget页面跳转的问题
  8. 【BZOJ】【2324】【ZJOI2011】拯救皮卡丘
  9. HDU 5340 Three Palindromes (Manacher)
  10. poj2482Stars in Your Window(线段树+离散化+扫描线)
  11. asp.net C# 导出EXCEL数据
  12. 外部地址访问xampp
  13. python arvg用法
  14. 使用canvas编写时间轴插件
  15. scala打包jar并在Linux下运行
  16. 使用kubeadm安装kubenetes
  17. Java转型
  18. bootstrap中的对话框-dialog-2
  19. 学习第一天-JAVA
  20. 利用CMake和OpenCV源代码生成Visual Studio工程

热门文章

  1. 3组-Alpha冲刺-1/6
  2. Spring IOC&amp;DI 控制反转和依赖注入
  3. 大爽Python入门教程 2-2 序列: 字符串、元组与列表
  4. vue + cesium开发(4) 绘制图形
  5. R数据分析:纵向数据如何做中介,交叉滞后中介模型介绍
  6. 解决FastJson中&quot;$ref重复引用&quot;的问题方法
  7. 【2020五校联考NOIP #7】伟大的卫国战争
  8. 【豆科基因组】豇豆Cowpea,Vigna unguiculata [L.] Walp.基因组2019PJ
  9. 【机器学习与R语言】7-回归树和模型树
  10. Linux服务器I/O性能分析-2