我的用户控件旨在作为平滑的垂直文本滚动器运行。它只将文本(要滚动)渲染到控件的表面一次,使用TextRenderer.DrawText
. 然后它启动一个计时器,在它的每个滴答声中,Bit-Blits ( BitBlt
) 整个客户端矩形向上一个像素。控件的设备上下文既是操作的源又是目标BitBlt
,如下:
Protected Sub handleTimerTick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim oG As Graphics = Me.CreateGraphics()
Dim sHdc As IntPtr = oG.GetHdc()
Dim iRes As Integer = BitBlt(sHdc, 0, 0, Me.ClientRectangle.Size.Width, Me.ClientRectangle.Size.Height, sHdc, 0, 1, SRCCOPY)
oG.ReleaseHdc(sHdc)
oG.Dispose()
End Sub
这成功地实现了所需的滚动效果,但前提是我的控件的背景是纯色(例如Me.BackColor = Color.Gray
)。
如果我将图片设置为控件的背景,BitBlt
则将背景与显示在其上的文本一起滚动。当然,我只想滚动文本,而背景图像保持静止。
我找到了以下线程,它建议使用TransparentBlt
而不是BitBlt
背景是要忽略的纯色统一颜色:如何使用 BitBlt 复制?
建议的解决方案不适合手头的情况,其中使用了彩色背景。
请注意,文本本身是纯色的。
您的建议将不胜感激。如果有任何问题,我正在使用 VB.NET 2005。