【问题标题】:Transparent overlay which does not scroll with its parent不随父级滚动的透明叠加层
【发布时间】:2011-05-28 15:34:22
【问题描述】:

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

我试图在我的OnPaint 中模仿这一点。但是,当窗口滚动时,只有新暴露的区域会失效,因此我的控件不会重新绘制。

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

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

任何想法都将不胜感激。

【问题讨论】:

    标签: winforms forms


    【解决方案1】:

    在我看来,您需要 Invalidate() 您的控件来处理 OnPaint 事件。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-17
        • 1970-01-01
        • 2014-10-27
        • 2020-01-07
        相关资源
        最近更新 更多