我想有一个表单,其中有几个控件作为透明覆盖在一个位图。此位图受变换矩阵(缩放和滚动)的影响。我正在尝试实现一个类似于GoogleMaps的外观,当背景图像被平移/缩放时,控件不会移动。
我试着在我的OnPaint中模仿这一点。然而,当滚动窗口时,只有新暴露的区域无效,所以我的控件不会重新绘制。
我试图计算旧控件的位置,使该区域无效,并使其本应位于的区域无效。当我这样做的时候,它会闪烁,你仍然可以看到滚动的图像。
我试着把一个ButtonControl放在我的显示窗口上。但是,它始终与其父控件一起滚动。我尝试捕获滚动事件,然后调整ButtonControl的位置。这也有延迟更新的效果,所以它看起来不是很好。
任何想法都将不胜感激。
发布于 2011-05-28 05:12:03
在我看来,您需要对处理OnPaint事件的控件执行Invalidate()。
发布于 2011-05-28 15:34:22
不幸的是,你得到了闪烁,因为自动滚动机制设置了它的位置,然后你恢复它。结果是向按钮发送了两条消息。
将位图和滚动逻辑放在一个单独的控件中,该控件填充整个窗体。这意味着您的位图控件和按钮都是窗体的子控件。
或者,您也可以自己绘制按钮。当然,您还需要做一些工作来使其响应鼠标单击,等等。ControlPaint类有一些方法可以帮助您模拟窗口控件的外观。
https://stackoverflow.com/questions/6157310
复制相似问题