レイヤー効果を作成するために、さまざまなオブジェクトによって描画される 1 つのウィンドウがあります (1 つのオブジェクトがコンパスを描画し、もう 1 つのオブジェクトがグリッド線を描画し、別のオブジェクトが高度計の読み取り値などを描画するヘッドアップ ディスプレイを考えてみてください)。そのため、各オブジェクトには描画先の黒いメモリ ビットマップがあります。そのオブジェクトの Draw 関数を呼び出すと、メモリ ビットマップがアプリケーション ウィンドウにブリットされます。メモリ ビットマップは最初はすべて黒で、オブジェクトはその上に描画されます。黒は透明色なのでマスキングしています。結果はオーバーレイ効果です。
そのため、blt() 関数の論理関数として OR を使用してきましたが、うまくいきました。しかし、前のレイヤーが白く塗られている場合、その上に描画するレイヤーが前のレイヤーの下にあるかのように見えることに気付きました。この効果が発生するのは白(っぽい)の色だけです。他のすべての色は正しくペイントされています (つまり、レイヤーは前のレイヤーの上にペイントされているように見えます)。誰もこの現象を見たことがありますか?