使用AutoScroll将图像绘制到图片框但保持标题可见

时间:2015-12-21 20:03:15

标签: vb.net picturebox autoscroll

我有一个Picturebox,我绘制了一个视图(在这种情况下是甘特图)并且它工作正常 - 即绘制视图并且AutoScroll属性允许PictureBox中的图像平滑滚动。

我的问题是,当我向下滚动图像时,图像的标题(例如,在这种情况下为日期标题)滚动显示的顶部。

我能解决的问题是如何将标题修复到顶部。我想过简单地将标题绘制到另一个Picturebox中,但后来我不确定如何将标题与主PictureBox的左右滚动同步

有人可以建议处理此问题的最佳方法,还是我需要恢复直接绘制并自行处理滚动?

我在VS 2015中使用VB。

非常感谢

菲尔

更新 - 我现在正在使用屏幕外的位图,但有人可以查看下面的代码并告诉我是否有更快/更好的方法来执行此操作?这一切都有效,但仍在学习,所以总是希望以最好的方式做事

   Public Sub MoveViewPoint(G As Graphics)
    ' G passed in from controls Paint

    G.Clear(Color.WhiteSmoke)
    ' _Plan is off-screen bitmap of image
    ' _HeaderHeight is height of the Header area in _Plan
    Dim Header_src_rect As New Rectangle(_HScroll.Value, 0, _Plan.Width, _HeaderHeight)
    Dim Header_dst_rect As New Rectangle(0, 0, _Plan.Width, _HeaderHeight)
    G.DrawImage(_Plan, Header_dst_rect, Header_src_rect, GraphicsUnit.Pixel)

    Dim src_rect As New Rectangle(_HScroll.Value, _HeaderHeight + 1 + _VScroll.Value, _Plan.Width, _Plan.Height)
    Dim dst_rect As New Rectangle(0, _HeaderHeight + 1, _Plan.Width, _Plan.Height)
    G.DrawImage(_Plan, dst_rect, src_rect, GraphicsUnit.Pixel)

    _HScroll.LargeChange = G.ClipBounds.Width * 0.9
    _VScroll.LargeChange = G.ClipBounds.Height * 0.9

End Sub

1 个答案:

答案 0 :(得分:0)

我会使用GDI图形系统将所有绘图绘制到离屏位图。您可以将标题和图表的其余部分绘制为同一位图中的2个不同阶段。您必须通过观察MouseMove事件并检查按钮状态来自己处理滚动。