必要がある:
- テキストを正確に測定します。
- グラフィックス コンテキストに適用される変換とスケーリングの変換が存在する場合に、テキストを 1 行ずつ画面のグラフィックス コンテキストにレンダリングします。
- ヒット テスト: マウスまたは表示されたキャレットを使用してテキストを正確に選択できるようにします。
- 必要に応じて、プリンターでできるだけ正確に結果を印刷します。注:これは二次的なものです。画面のレンダリングとヒット テストが主です。
- Windows XP 以降のオペレーティング システムで実行します。
グラフィックスと画像を同じグラフィックス コンテキストにレンダリングする WinForms アプリケーション内。
私たちが遭遇した4つのテクノロジーがあります。最初の 2 つを使用してみましたが、数か月にわたって説明されている問題に遭遇しました。
GDI+
解像度に依存しないとされるテキスト。ただし、この質問(およびその他の情報源) によると、この技術は品質の問題があるため避けるべきです。
MSDNは、Graphics.MeasureString を呼び出して 、正確な文字列測定値StringFormat.GenericTypographic
を生成すると述べています。TextRenderingHint.AntiAlias
しかし、私たちの経験と他の人の経験では、これは当てはまりません。正確な弦の測定値は得られません。
- 長所:速い
- 短所:弦の測定が不正確。
結果: 弦の測定が不正確なため使用できません。
TextRenderer 経由の GDI
これは、GDI+ の制限を克服するために導入されました。ただし、これには独自の制限が導入されました。
- 非常に遅い
- グラフィック変換では機能しません
結果: これらの理由により使用不可
p/invoke 経由の GDI
GetTextExtentExPoint
テキストの測定とDrawText
/ DrawTextEx
/ExtTextOut
レンダリングの呼び出し。
これはまだ試していません。
ダイレクトライト
これは、GDI/GDI+ を含む他のテクノロジと相互運用できるため、有望に思えます。おそらく、グラフィックス レンダリングの残りの部分は変更されないでしょう。ただし、Windows Vista 以降の Windows バージョンでのみ使用できます。Windows XP には依然としてかなりのインストール ベースがあるため、これは現在問題になっています。
質問
要件を考慮して、これらのテクノロジのうちどれを機能させることができますか?
注: このトピックについては多くの誤った情報が飛び交っているため、この分野の専門知識がある場合にのみ、この質問に回答してください。また、WPF を提案しないでください。これは、使用を検討しているものではありません。