1

MSDN のドキュメントは、GDI ペンに関する次の 2 つの事実について (ある程度) 明確です。

  1. コスメティック ペン (CreatePen または ExtCreatePen w/ PS_COSMETIC で作成) は 1単位幅でなければなりません (まあ、<= 1 ですが、そこには行きません)。

  2. 幾何学的 (ExtCreatePen w/ PS_GEOMETRIC) ペンはソリッドでなければなりません (PS_SOLID のみ、PS_DASH は不可など)。ただし、太い線を描くことはできます。 これは、上記のリンクに9倍の制限として明確に文書化されています(私はばかです)。私の弁護のために、私のコードの(悪い)コメントと(壊れた)ロジックは、そうではないと信じさせました。他のいくつかのグーグル記事は、Windows 9x のみを考慮して書かれているに違いありません。

これらのルールに違反して、GDI がこれらのペンで楽しく描画できるのはなぜですか?

太い (たとえば、幅 = 10) 化粧ペン破線の幾何学ペンを作成できます。なんてこった、太くて破線の幾何学的なペンを作成できます!

これらのペンは、通常は正常に動作するようです。私が見た唯一の問題は、非常に大きな点の配列を渡すときの Polyline です。線のレンダリングが非常に遅くなります。ただし、Polyline は、一般に大きな配列では奇妙な動作をします。悪いペンでは動作が異なります。(私の他のポリラインの問題は別の質問かもしれません...)

幅広のコスメティック ペンやパターン付きの幅広のジオメトリックを使用しても安全ですか?

4

1 に答える 1

1

一般に、文書化された API に従う必要があります。そうしないと、OS バージョン固有の動作に依存する危険があります。

あなたが説明するExtCreatePen制限 (たとえば no PS_DASHwith PS_GEOMETRIC) は、WinNT ではなく Win9x にのみ適用されるため、NT/2000/XP では、「太くて破線の幾何学的なペン」は問題になりません。Polylineまた、Win9x ではいくつかの制限があることに注意してください。

PS_USERSTYLE破線が必要な場合は、デフォルトで提供されるものに頼るのではなく、破線とギャップの長さを制御できるように使用することをお勧めしPS_DASHます。

于 2008-10-30T22:04:45.127 に答える