WindowsのAPIでラバーバンド

教えてクンモードです。

WindowsAPI(GDI)で、ドローツールとかでよく見る「ラバーバンド」を実現するにはどうすればいいんでしょうか。

ラバーバンドといえばXOR、それにはSetROP2()、というところまではすぐにわかったのですが、ラバーバンドの線の色を制御できません。

もちろんXORで描画する以上、下にある色によって色は変わってしまいますが、少なくともウインドウの背景色の上での色くらい制御したいと思うのですが…

原理的に、ウインドウの背景色のビットパターンと描画したい色のビットパターンでXORを取ったもので、XORで描画すれば、背景色の上ではその色になるはずなのですが、背景色のビットパターンもPenのビットパターンも取得方法がわかりませんです。ビットパターンからPenを作る方法もわからないですし。

背景がデフォルトの白であれば、R2_NOTXORPENでうまくいったのですが、背景色に(SolidBrushであれ)色を指定するとやはり目的の色にはならないようです。

えらいひと、教えてくださいませ。

追記:関係ないっちゃないですが。
http://java.sun.com/j2se/1.3/ja/docs/ja/guide/2d/spec/j2d-intro.fm2.html

簡単なレンダリングシステムでは、基本的なブール演算だけで色の混合が行われます。 たとえば、ブール演算による合成規則では、ソース色の値とデスティネーション色の値の論理積 (AND)、論理和 (OR)、または排他的論理和 (XOR) を求めることが可能です。 このような方法には、いくつか問題があります。

  • 人間にわかりにくい。 たとえば、赤と青を混ぜるのではなく論理積を計算する場合、できあがる色を想像することは難しい
  • ブール演算による合成は、異なるカラー領域での正確な色の合成をサポートしていない
  • 直接的なブール合成は、色のカラーモデルを考慮していない。 たとえば、インデックス形式カラーモデルの場合、イメージの 2 つのピクセル値に対するブール演算の結果は、2 つの色の合成ではなく、2 つの行列の合成である

いやまあ、そりゃそうなんですがね。