我可以使用哪些事件来通知控件它的一部分已离开屏幕的可视区域?

时间:2009-05-12 15:15:01

标签: .net graphics gdi+

我有一个userControl我正在做一些绘画,当控件移动到屏幕边缘,或者移动以便Vista任务栏重叠时,屏幕边缘/任务栏边缘被绘制到控件,在对照的可涂抹区域留下难看的线条。

检测此问题的最佳方法是什么,并在控件上调用Invalidate? “Moved”和“LocationChanged”事件显然处理控件在其父容器内的移动,而不是屏幕位置的变化。 我相信当控件与Windows XP中的另一个窗口重叠时会发生同样的事情,但我还没有测试过。在这种情况下也适用同样的问题。

我目前正在直接绘制控件的Graphics对象,我认为这是问题的根源。是否更好地吸引Control的BackGroundImage试图回避这个问题?

注意:这是对早期问题的一个重要修改,其措辞非常严厉。我觉得开始一个新问题是要做的事情,而不是试图修复我写过的废话。

编辑:事实证明,任务栏不会导致问题,只是底部屏幕边缘。我原以为任务栏也造成了问题,但看起来我错了

2 个答案:

答案 0 :(得分:2)

是的,您可以绘制控件的背景以给出幻觉问题免费绘图。

您是在尝试绘制图形对象的剪裁区域剪辑矩形)还是使用它的整个表面?我认为每当另一个窗口或对象隐藏其他对象窗口时,它会发送重绘消息,并通过需要重绘的区域(剪切矩形)。

答案 1 :(得分:0)

在制作错误的屏幕截图时,很明显问题是我正在绘制由Paint事件的ClipRectangle描述的区域,而不是控件本身的ClipRectangle。

Paint事件的ClipRectangle描述单个Movement事件正在显示的区域,它不描述Control的边界区域。 我只是碰巧移动控制得足够快,很明显整个控制都被吸引到了显露的空间。我将代码更改为绘制到与控件大小相对应的区域,一切正常。

另一个PEBKAC问题。哦,至少发现了错误。