C ++でウィンドウ内でビットマップをすばやく移動する
-
06-07-2019 - |
質問
ウィンドウの周りでビットマップをすばやく移動して、移動中に背景を復元できるC ++コードを探しています。現在、アプリの初期化中にウィンドウの内容をビットマップにキャプチャし、OnPaint()でこのビットマップを描画してから、オーバーレイされたビットマップを描画します。ペイントをダブルバッファリングしています。オーバーレイされたビットマップの位置は、ウィンドウを無効にするマウスとともに移動します。
これは正常に機能しますが、バックグラウンドウィンドウが大きく(Windowsデスクトップを考えてください)、PCが遅い場合は遅すぎます。私の推測では、マウスを動かすたびに大きな背景ビットマップを再描画するのがボトルネックだと思います。これを行うにははるかに優れた高速な方法が必要ですが、検索では必要な答えが見つかりませんでした。
解決
おそらく最も簡単な方法は、移動可能な画像を1つのビットマップに保存してから、同じサイズの2番目の一時ビットマップをメモリに保持することです。可動ビットマップをメイン画像上に描画するには、まずBitBlt API関数を使用して、可動ビットマップを描画しようとしている領域を一時ビットマップにコピーし、次に可動ビットマップをメイン画像にBitBltします。移動可能なビットマップを移動すると、1)一時ビットマップを元の場所にBitBlt、2)一時ビットマップに新しい場所をBitBlt、3)メインビットマップの新しい場所に移動可能な画像をBitBltします。
所属していません StackOverflow