私のユーザー コントロールは、スムーズな垂直テキスト スクローラーとして動作することを目的としています。を使用して、(スクロールする) テキストをコントロールのサーフェスに一度だけレンダリングしますTextRenderer.DrawText
。次に、タイマーを開始し、各ティックでBitBlt
クライアント全体を 1 ピクセル上に Bit-Blit ( ) します。コントロールのデバイス コンテキストは、次のように、操作のソースと宛先の両方です。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
。
コントロールの background として画像を設定するBitBlt
と、その上に表示されるテキストとともに背景がスクロールされます。もちろん、スクロールするのはテキストだけで、背景画像は静止したままにしたいです。
次のスレッドを見つけました。これは、背景が無地の均一な色であるTransparentBlt
代わりに使用することを提案しています: BitBlt でコピーする方法?BitBlt
このソリューションは、カラフルな背景が使用されている当面のケースには適していないことを示唆していました。
文字自体は単色の単色ですのでご了承ください。
アドバイスをいただければ幸いです。それが問題であれば、私は VB.NET 2005 を使用しています。