为了提高在 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/