c# - 使直线而不是矩形无效

标签 c# line invalidation

为了提高在 C# 中通过用户鼠标单击绘制多点线的性能,我需要使一条线而不是矩形无效。有什么办法可以做到这一点吗?

panel1.Invalidate();

最佳答案

(假设我们正在讨论 Windows 窗体)

底层 Windows API 永远不会使矩形以外的任何内容无效,因此尝试这样做是完全没有意义的。 (您可以设置非矩形剪辑区域,但这并不能真正提高绘图速度。)

请参阅 Microsoft 文章 "Rendering a Windows Forms Control"有关详细信息,特别要注意标题为绘图区域的几何图形的部分,其中指出“采用 Rectangle 或 Region 作为参数的 Invalidate 的重载版本使用该参数来生成PaintEventArgs”

因此,矩形始终用于通过创建包围它的剪辑矩形来表示无效区域。

另一个需要注意的重要事项是,如果在重新绘制窗口之前将多个无效区域添加到 Windows 消息队列中,则所有未处理的区域将组合成包含所有这些区域的单个边界矩形。

最后一点在 About Messages and Message Queues 中有描述。 MSDN 文章。请注意“排队消息”部分,其中指出“同一窗口的多个 WM_PAINT 消息合并为一个 WM_PAINT 消息,将客户区的所有无效部分合并为一个区域”。

>

关于c# - 使直线而不是矩形无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23382591/

相关文章:

c# - C++/CLI Dll 与 C# 连接问题

c# - 正则表达式 IsMatch 随机无法匹配模式

c# - 如何在表格单元格中创建斜线

c# - .NET 图表控件 : How to use a LineAnnotation?

jsp - 如何验证/无效 session jsp/servlets?

c# - 刷新/更新 WPF 控件,如 winforms

c# - 如何发送带有查询字符串的 URL 作为查询字符串

c# - 通过 C# 将 LINQ to XML

algorithm - 交叉点查找算法的优化

c++ - 将有根层次结构的对象存储在 vector 中