Winforms 不与其父对象滚动的透明覆盖

Winforms 不与其父对象滚动的透明覆盖,winforms,forms,Winforms,Forms,我想有一个表单,其中有一些控件作为位图上的透明覆盖。此位图受制于变换矩阵(缩放和滚动)。我正在尝试实现一种类似谷歌地图的外观,当背景图像被平移/缩放时,控件不会移动 我尝试在我的OnPaint中模仿这一点。但是,当滚动窗口时,只有新暴露的区域无效,因此我的控件不会重新绘制 我试图计算旧控件所在的位置,使该区域无效,并使它应该所在的区域无效。当我这样做时,它会闪烁,你仍然可以看到滚动的图像 我试图在我的显示窗口上放置一个按钮control。但是,它总是与其父控件一起滚动。我试图捕获滚动事件,然后调

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

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

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

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


如果您有任何想法,我们将不胜感激。

我觉得您需要控制处理OnPaint事件的控件。

不幸的是,由于自动滚动机制设置了其位置,然后您将其还原,因此您会得到闪烁。结果是两条消息被发送到按钮

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

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