大佬求帮忙!我希望实现简易的画图里的鼠标绘制直线。但是出现问题了。

0

我想实现画图里画直线的绘制过程,就是左键按下为线段起点,移动过程中为边擦边画,最后左键弹起为线段终点。

但是我写的代码只能画一条线段,怎么才能画n条线段呢?求大佬解惑。

#include <easyx.h>			
#include <conio.h>
#include <stdio.h>
int main()
{
	initgraph(640, 480);
	int x0,y0,x1,y1;
	MOUSEMSG m;
	while(m.uMsg != WM_LBUTTONUP)
	{
		m = GetMouseMsg();
		switch(m.uMsg)
		{
			case WM_LBUTTONDOWN:
				x0=m.x;
				y0=m.y;
				break;
			case WM_MOUSEMOVE:
				x1=m.x;
				y1=m.y;
				cleardevice();
				line(x0,y0,x1,y1);
				break;
		}
	}
	_getch();				
	closegraph();			
	return 0;
}
ava
坐!

2020-3-10

1

如果你要画多条线段,你就不能直接用 cleardevice() 擦掉鼠标移动过程中的临时线段了,你需要用背景色再画一遍以达到擦除的目的。

另外给你两个参考:

  1. 可以考虑用 R2_XORPEN 模式实现擦掉同一条线段。具体使用方法请参考:https://codebus.cn/bestans/post/concise-lesson-10
  2. 这个例子里面也用到了 R2_XORPEN 实现擦掉之前的旧线框:https://codebus.cn/yangw/post/zoomable-mandelbrot-set
ava
慢羊羊

2020-3-11

0

只能画一条无非是因为每次鼠标移动你都把整个画布全擦除了再重新画当前这一条,那么对应的解决思路就是:

  1. 只擦鼠标经过的路径,即可保留已经画好的。
  2. 全部擦,但是重画的时候把原来已经画好的再画一遍。
ava
JiaZombie

2020-3-11

技术讨论社区