2016-12-02 44 views
1

Bitbltで作成された画像(ビットマップ)を出力しました。Bitbltの出力を削除するには? (MFC)

今、私はそれを取り除きたいです。どのようにできるのか?あなたはXORを行う非常に特別な場合を除いて(のBitBltまたは任意の他の描画出力を「元に戻す」または「消去」する方法はありません

答えて

2

を(FillSolidRect、などのように、パッチを使用しないでください)ベースの図面、元の上に別のXOR描画操作を行うことで元に戻すことができます)。あなたが行うことができます

唯一のことは、あなたが「パッチ」と呼んでいるものをしている、その上に何か他のものの上に描画することです。通常は、ウィンドウの背景色の実線の四角形を描きます。これは、OnEraseBkgrndメッセージハンドラがデフォルトで実行するもので、OnPaintの直前に実行されます。具体的には、ウィンドウクラスの背景ブラシを使用します。このブラシは、通常、COLOR_3DFACE(ダイアログの場合)または(ウィンドウの場合)のシステムカラーを使用して描画します。

もちろん、ちょうどではなく、でBitBltを最初に実行することができます。 はすべてペイントコードはは常にOnPaintメッセージハンドラ関数の内部で行くべきなので、あなたは「古い」グラフィックスで終わる可能性が方法はありません。ウィンドウが再描画する必要があるときはいつでも、この関数を呼び出すことになり、その関数内のコードはウィンドウを再描画します。ビットマップでペイントしたくない場合は、BitBltを呼び出しないでください。

あなたは(あなたが一般的にないがやるべきこと)の一時的なCDCオブジェクトを使用して、ウィンドウの上部にBitBlt関数をやった場合は、ウィンドウの再描画をトリガすることによって消去されるために、これを強制することができます。最も簡単な方法は、ウィンドウのInvalidateRect()メンバ関数を使用することです。 NULLを無効にする矩形へのポインタとして渡すと、ウィンドウ全体のクライアント領域が無効になるか、またはblittedした領域が無効になります。

関連する問題