栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在WinForms中绘制形状

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在WinForms中绘制形状

我寻找的示例代码既简单又有效,却什么也没找到。您不需要屏幕外的位图

CreateGraphics
,也不需要这样做,但是您将需要跟踪鼠标的位置,在屏幕上绘图以及按照Eric的建议将绘制的形状添加到形状列表中。要处理交互式图形,您需要在窗体处理程序中存储鼠标状态,初始单击位置和当前矩形:

bool mouseDown;Point clickPos;Rectangle rect;

然后,当用户单击时,请记住初始位置:

private void MouseDown(object sender, MouseEventArgs e){    mouseDown = true;    clickPos = e.Location;    rect = new Rectangle(clickPos, new Size(0, 0));}

当用户用鼠标向下拖动时,创建一个包含开始位置和当前位置的矩形:

private void MouseMove(object sender, MouseEventArgs e){    if (mouseDown)    {        this.Invalidate(rect);        if (e.Location.X > clickPos.X && e.Location.Y > clickPos.Y)        { rect = new Rectangle(clickPos.X, clickPos.Y, e.Location.X - clickPos.X, e.Location.Y - clickPos.Y);        }        else if (e.Location.X > clickPos.X && e.Location.Y < clickPos.Y)        { rect = new Rectangle(clickPos.X, e.Location.Y, e.Location.X - clickPos.X, clickPos.Y - e.Location.Y);        }        else if (e.Location.X < clickPos.X && e.Location.Y < clickPos.Y)        { rect = new Rectangle(e.Location.X, e.Location.Y, clickPos.X - e.Location.X, clickPos.Y - e.Location.Y);        }        else if (e.Location.X < clickPos.X && e.Location.Y > clickPos.Y)        { rect = new Rectangle(e.Location.X, clickPos.Y, clickPos.X - e.Location.X, e.Location.Y - clickPos.Y);        }        this.Invalidate(rect);    }}

当用户释放鼠标时,停止绘制:

private void MouseUp(object sender, MouseEventArgs e){    mouseDown = false;}

Windows窗体中最重要的#1规则是: 仅在Paint事件中绘制到屏幕上 。永远不要画图

MouseMoved

private void Paint(object sender, PaintEventArgs e){    e.Graphics.FillRectangle(Brushes.DarkGray, rect);}

完成此工作后,创建一个表单

List<Rectangle>
并在
MouseUp
事件中添加当前矩形,并在事件中绘制所有矩形
Paint
。您可能还希望将图形裁剪到要在其中进行绘图的面板或窗口。您还可以进行一些优化,
MouseMoved
以仅使更改后的屏幕区域无效,而不会使旧矩形和新矩形无效。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/465289.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号