サポートされていないWin32 GDIペンモードの使用に関する問題
質問
MSDN ドキュメントは(やや)GDIペンに関する次の2つの事実について明確にします。
-
化粧ペン(CreatePenまたはExtCreatePen w / PS_COSMETICを使用して作成)は、幅1 unit でなければなりません(まあ、<!> lt; = 1ですが、行かないでください)。
-
Geometric(ExtCreatePen w / PS_GEOMETRIC)ペンはソリッドでなければなりません(PS_SOLIDのみ、PS_DASHなしなど)。ただし、より太い線を引くことはできます。これは、上記のリンクに9xの制限として明確に文書化されています(私は愚かです)。私のコードの(悪い)コメントと(壊れた)ロジックを守るために、そうでないと信じるようになりました。他の一部のグーグル記事は、Windows 9xのみを考慮して書かれている必要があります。
なぜこれらのルールを無効にし、GDIにこれらのペンで楽しく描画させることができますか?
太い(たとえば幅= 10)化粧ペンおよび破線の幾何学的ペンを作成できます。ちなみに、太い破線の幾何学的なペンを作成できます!
これらのペンは正常に動作するようです通常。私が見た唯一の問題は、非常に大きなポイントの配列を渡すときのポリラインです-それは非常にゆっくりとラインをレンダリングします。ただし、ポリラインは一般に大きな配列では奇妙な動作をします。 bad ペンでは動作が異なります。 (他のポリラインの問題は別の質問かもしれません...)
幅の広い化粧ペンまたはパターン付きの幅広Geometricを使用しても安全ですか?
解決
一般に、文書化されたAPIに従う必要があります。そうしないと、OSバージョン固有の動作に依存する危険があります。
説明するExtCreatePen
制限(たとえば、PS_DASH
とPS_GEOMETRIC
なし)は、WinNTではなくWin9xにのみ適用されるため、NT / 2000 / XPでは、<!> quot; fat、破線の幾何学的なペン<! > quot;問題になるべきではありません。また、 Polyline
にはWin9xにいくつかの制限があることに注意してください。
破線が必要な場合は、デフォルトのPS_USERSTYLE
が提供するものに依存するのではなく、ダッシュとギャップの長さを制御するために<=>を使用することをお勧めします。