MSVB2005を使用しています。自動テキストスクローラーであるユーザーコントロールを作成し、固定テキストを垂直方向にスムーズに、たとえばピクセルごとに(行ごとではなく)スクロールしたいと思います。これはマーキーとも呼ばれます (HTML などで)。
タイマーを使用してこのようなコントロールを既に実装しました。タイマーが刻むたびに、テキストがコントロールのサーフェスに 1 ピクセル上にレンダリングされます。これは非常にうまく機能しますが、グラフィック ハードウェア アクセラレーションが使用されず、すべてのレンダリング計算がメイン CPU に "落ちる" ため、かなりの CPU パワーを消費します。
Form/Control 垂直スクロールなど、OS (つまり Windows) に組み込まれたグラフィカル メカニズムを使用して、コントロールのパフォーマンスを向上させたいと考えています。OSが下でハードウェアアクセラレーションを使用していると確信しています。
私のユーザーコントロールは、ScrollableControlクラス、またはPanelなどのScrollableControlを継承する別のクラスから継承できると考えました。私はそれを行い、前述のタイマーの各ティックで、次のことが実行されます。
Y += 1
Me.AutoScrollPosition = New Point(0, Y)
whereY
はクラス メンバーであるため、タイマー ティックごとに 1 ずつ増加します。これもうまくいきますが、
1)OnPaint
コントロールのイベント ハンドラーを呼び出すたびにテキスト レンダリングが実行される場合のみ。もしそうなら... この形式のソリューションによって何が得られましたか? (テキストレンダリングは、CPU 時間のほとんどを消費する部分のようです)
テキスト全体を一度だけコントロールの表面にレンダリングし、OS にスクロールを完全に管理させる方法はありますか。OnPaintへのすべての呼び出しでテキストの関連部分)?
2)垂直スクロール バーが表示されます。アクティブにする必要がありますが、表示されません。
どうぞよろしくお願いいたします。
PS
コントロールは Winforms アプリケーションを対象としているため、現在 WPF に切り替えることはできません。私は DirectX と OpenGL に慣れていないので、これらのテクノロジをすぐに学習する時間はありません。したがって、現在、これらの方向のいずれかでの解決策は実行可能とは見なされません。ありがとう。