6

描画時に Rect サイズ (テキストの高さ) を計算する必要がある文字列があります。私の実装では、フラグDrawTextW()付きの関数を使用しています。DT_WORDBREAK or DT_CALCRECT

私の文字列の例:

thisisaverylonglonglonglineoftextthatneedstofitinsideagivenrectwidth

MSDN docsで確認できますが、そのDrawTextW()方法は次のように述べています。

最大の単語が四角形よりも広い場合、幅が拡張されます。テキストが四角形の幅より小さい場合は、幅が縮小されます。テキストが 1 行しかない場合、DrawText は四角形の右側を変更して、行の最後の文字を囲むようにします。

ただし、MSDNのドキュメントでは、DrawTextExW()メソッドはこれを述べていません。

そのため、メソッドを使用して高さを計算しようとしましたDrawTextExW()が、結果は関数と同じでDrawTextW()、テキストの最大行に合わせて四角形の幅を拡張します。

DT_WORDBREAKでは、とが指定されている大きな文字列 (スペースなし) を描画するときに、特定の (固定) 幅でテキスト四角形の高さを正しく計算するにはどうすればよいDT_CALCRECTですか?

編集:

補足として、Microsoft Excel がセル テキストを描画する方法を知っている人はいますか? このテキスト描画の API 呼び出しはありますか? これが私の最初の質問の由来でしたが、Excel での実装方法は、(スペースだけでなく) 任意の文字にテキストとワードブレーク/ワードラップを描画することです。

4

1 に答える 1

8

パラメータでDT_WORD_ELLIPSISフラグを使用する必要があります(もちろん)。これにより、スペースのない長い文字列による拡大が防止されます。それでも長い文字列が壊れることはありませんが、幅の問題は解決されます。uFormatDT_WORDBREAK

も指定すると、最後の描画の前に、その長い文字列をどこで切断するかを自分で把握DT_MODIFYSTRINGできます。

DrawText(W)との違いについてはDrawTextEx(W)、後者はタブの書式設定、余白の設定を提供し、実際に描画された文字数を返します。(寸法付け) 機能に違いはありません。

于 2011-10-24T05:47:49.010 に答える