为了提高在C#中用户鼠标点击绘制多点线的性能,我需要使线无效而不是矩形。有没有办法做到这一点?
panel1.Invalidate();
答案 0 :(得分:5)
(假设我们正在谈论Windows Forms)
底层Windows API永远不会使矩形以外的任何东西无效,因此尝试这样做完全没有意义。 (您可以设置非矩形剪辑区域,但这对绘制速度没有帮助。)
有关详细信息,请参阅Microsoft文章"Rendering a Windows Forms Control",特别是注意到标题为绘图区域的几何的部分,该部分指出了" Invalidate的重载版本Rectangle或Region作为参数使用该参数生成PaintEventArgs" 的ClipRectangle属性。
因此,矩形总是用于通过创建包含它的剪辑矩形来表示无效区域。
另一个需要注意的重要事项是,如果在重新绘制窗口之前将多个无效区域添加到Windows消息队列中,则所有未处理的区域将合并为一个包含所有未处理区域的边界矩形。
最后一点在About Messages and Message Queues MSDN文章中有所描述。注意"排队消息"部分说明"同一窗口的多个WM_PAINT消息被合并为一个WM_PAINT消息,将客户区的所有无效部分合并为一个区域" 。