《C# GDI+ 破境之道》:第一境 GDI+基础 | 您所在的位置:网站首页 › gdi清除已画的直线 › 《C# GDI+ 破境之道》:第一境 GDI+基础 |
1 private void FormDrawLines_MouseDown(object sender, MouseEventArgs e)
2 {
3 if (startDrawPointToPointLine)
4 {
5 if (Point.Empty.Equals(lastMouseDownLocation))
6 {
7 lastMouseDownLocation = e.Location;
8 ShowInformation($"点点连线,起点:{lastMouseDownLocation},等待终点(鼠标单击画布内任意位置)。");
9 }
10 else
11 {
12 using (var g = CreateGraphics())
13 using (var pen = new Pen(penColor, 2f))
14 {
15 g.Clear(SystemColors.AppWorkspace);
16 g.SmoothingMode = SmoothingMode.HighQuality;
17 g.DrawLine(pen, lastMouseDownLocation, e.Location);
18 }
19
20 ShowInformation($"点点连线,{lastMouseDownLocation}->{e.Location}。");
21
22 startDrawPointToPointLine = false;
23 lastMouseDownLocation = Point.Empty;
24 }
25 }
26 }
点点连线 —— FormDrawLines_MouseDown
原理很简单,当我们点击“点点连线”按钮的时候,激活标记位startDrawPointToPointLine、归位lastMouseDownLocation,并提示需要鼠标操作,选择一个起始点;
当我们在画布区域内单击一个下,就触发了FormDrawLines_MouseDown事件, 它会判断,当startDrawPointToPointLine处于激活状态并且lastMouseDownLocation处于原位时,它就把鼠标的当前位置赋值给lastMouseDownLocation,作为线段的起始点位置,并提示需要鼠标操作,选择一个终点; 当我们再次在画布区域内单击一个下,就又触发了FormDrawLines_MouseDown事件, 它会判断,当startDrawPointToPointLine处于激活状态并且lastMouseDownLocation不处于原位时,它就把鼠标的当前位置作为线段的终点位置,并画出线段;然后就是恢复startDrawPointToPointLine为未激活状态,并归位 lastMouseDownLocation; 恐怕要非常适应这种多事件配合的方式了,因为鼠标跟随也是多事件配合一起玩儿的:P 6、鼠标跟随 在点点连线的基础上,我们把标记位换成了startDrawFollowMouseLine;同时,增加了FormDrawLines_MouseMove事件; ![]() ![]() 原理也不难,就是在选了起点以后,鼠标的移动事件会把鼠标的当前位置作为终点,重绘线段,以达到跟随的效果;由于截图也看不出动态效果,就不上图了,有兴趣的童鞋可以Run代码看看效果:)
Okay,关于GDI+画线的部分,我们就到此告一段落了。
篇外话 这里涉及了坐标系,美术老师说: 横坐标,坐标原点左为负,坐标原点右为正,从左到右越来越大; 纵坐标,坐标原点下为负,坐标原点上为正,从下到上越来越大; 但是在GDI+的世界坐标系里,纵坐标的描述正好相反;并且坐标原点初始时在画布的左上角,而不是画布的中央; 用心体会一下:)
喜欢本系列丛书的朋友,可以点击链接加入QQ交流群(994761602)【C# 破境之道】方便各位在有疑问的时候可以及时给我个反馈。同时,也算是给各位志同道合的朋友提供一个交流的平台。需要源码的童鞋,也可以在群文件中获取最新源代码。 |
CopyRight 2018-2019 实验室设备网 版权所有 |