当窗口的一部分被遮住的时候,WINDOWS就会发送PAINT事件,应用程序就会调用OnPaint方法,哪怕被遮住的部分没有图象.那没有被遮住的那部分也应该被重绘了,请问下面的情况是什么原因:一个100*100的窗口,OnPaint方法里
e.Graphics.DrawString(e.ClipRectangle.X.ToString(), new Font("t", 20), Brushes.Black, 10, 10);当我用别的窗口来遮这个窗口的时候,如果只遮了右下角一部分,没遮住显示的数字的时候,数字并没变啊?这种情况下,被重绘的也应该是整个窗口啊.为什么数字不变?
e.Graphics.DrawString(e.ClipRectangle.X.ToString(), new Font("t", 20), Brushes.Black, 10, 10);当我用别的窗口来遮这个窗口的时候,如果只遮了右下角一部分,没遮住显示的数字的时候,数字并没变啊?这种情况下,被重绘的也应该是整个窗口啊.为什么数字不变?
数字肯定会变,e.ClipRectangle.X.ToString()是剪切区域的X坐标,怎么可能不变呢.是等于用来遮窗口的那个窗体的左上角X坐标.
当我把前面显示的数字遮住后,数字就改变了.TO:flygoldfish
实际应用是一会事,OnPaint中判断剪切区域(无效区域)是否包括了显示的东西,如果没有的话,则不需要重绘.这点我明白
但我这里是不明白为什么是这种情况.
那么当重画的区域包括数字,那么会修改数字内容;
如果重画的区域不包括数字,那么数字所在的区域就不会刷新。因此在Onpaint中,重画的区域是由ClipRectangle来决定的。
TO:Knight94
实际情况如你的一样,似乎是只绘制无效区域也就是ClipRectangle来决定.
我还有疑问:
1,把问题集中到这样一个问题上来:如果覆盖的区域没有包括数字,那是否调用了OnPaint?如果调用了,那其中的代码就要完全执行啊,怎么会不重绘数字呢?
2,如果OnPaint事件中自己会检测无效区域且只绘制这部分,那WINDOWS也帮我们做了太多事情了吧?