不与其父级滚动的透明叠加层

时间:2011-05-27 20:20:46

标签: winforms forms

我希望有一个表单,其中有一些控件作为位图上的透明叠加层。该位图受变换矩阵(缩放和滚动)的影响。我正在尝试实现类似于GoogleMaps的外观,其中当平移/缩放背景图像时控件不会移动。

我试图在我的OnPaint中模仿这个。但是,当滚动窗口时,只有新曝光的区域无效,因此我的控件不会重新绘制。

我试图计算旧控件的位置,使该区域无效,并且还使该区域无效。当我这样做时,它会闪烁,你仍然可以看到图像滚动。

我试图在我的显示窗口放一个ButtonControl。但是,它始终使用其父控件滚动。我尝试捕获滚动事件,然后调整ButtonControl的位置。这也有延迟更新效果,所以看起来不太好。

非常感谢任何想法。

2 个答案:

答案 0 :(得分:0)

听起来我觉得你需要Invalidate()你的控件来处理OnPaint事件。

答案 1 :(得分:0)

不幸的是,你得到了闪烁,因为自动滚动机制设置了它的位置,然后你恢复它。结果是两条消息被发送到按钮。

将位图和滚动逻辑放在一个单独的控件中,以填充整个表单。这意味着您的位图控件和按钮都是表单的子控件。

或者,自己画按钮。然后,您当然需要做一些工作来让它响应鼠标点击等.ControlPaint类有一些方法可以帮助您模仿Windows控件的外观。