質問

私はレンダリングテキストDirect2D/DirectWriteが呼び出し SetLineSpacing() どちらのTextFormatやTextLayoutのように影響はありません。なんだろうけど、日本人はなぜなのか?

役に立ちましたか?

解決

私は、これはバグであることを99%確信しています。の私はDirect2Dのと少しプレーを周りに行っている最近もTextLayoutの上SetLineSpacing()に問題があった、それは何と同じだと思いますその場合には、私はそれはあなただけではないことを確認することができ、記述されています。 MS Connectのバグレポートを再度開き、それが閉じられています。

他のヒント

ドミトリNesterukが言ったように、

私も同じ問題を抱えています。

しかし、私は「あなたがlineSpacingを設定した場合ことを見つけるの後 CreateTextLayout」は、SetLineSpacingは動作しないことができます。

それ以外の場合は、あなたがCreateTextLayout前LineSpacingを設定した場合、 それが今で作業することができます。

たぶん、あなたはこのsolutonを試すことができます。

PS:私のENV。ウィンドウVistaのSP2である。

感謝します。

残念ながら、あなたが何をしようとして示すコードを提供していません。私はあなたがこのような行間隔を設定しようとしていることを仮定しています:

pTextLayout->SetLineSpacing(DWRITE_LINE_SPACING_METHOD_DEFAULT, lineSpacing, baseline);

MSDNのドキュメントは、異なる行間方法についてひどく明確ではありません。デフォルトの方法は、各ラインの間隔は、もしあれば使用されるフォントとインラインオブジェクトから誘導させるので、各ラインは、その内容に応じてする必要がある高さです。この場合、2つのパラメータ、lineSpacingbaselineは、無視されます。

あなたは、単一のフォント(およびフォントサイズ)と(テキストよりも高くなっていないか、またはインラインオブジェクト)なしインラインオブジェクトを使用して、テキスト形式を使用している場合は、

、あなたは、均一な行間隔を指定することができます。これはDWRITE_LINE_SPACING_METHOD_UNIFORMが何のためにあるのかです。私はちょうどそれを試してみましたが、均一なラインで、このメソッドの結果が渡された引数に応じた間隔でSetLineSpacing()を呼び出しました。

は、Windows 10以降では、フォントサイズとインラインオブジェクトが指定した内容を基準と行間隔を達成するために使用することができる第三の行間隔法、DWRITE_LINE_SPACING_METHOD_PROPORTIONALがあります。しかし、これは、Windows 10でサポートされています。

(彼らはまだ何も達成しないながら)

ほとんどの誤解を招くような部分は、私の経験では、SetLineSpacing(DWRITE_LINE_SPACING_METHOD_DEFAULT, x, y)の呼び出しがエラーなしで成功したということです、そしてGetLineSpacing()の方法を使用して、後で行間隔パラメータを取得し、提供された値を返します。 。 APIは、この点で内部的に一貫している、彼らは有益な何かを達成していないにもかかわらず、指定した値を破棄しません。あなたは新しく作成されたGetLineSpacing()またはIDWriteTextFormatインスタンス上IDWriteTextLayoutを呼び出すときも、値が(行間隔法はDWRITE_LINE_SPACING_METHOD_DEFAULTあるので、正しいです)ゼロとして返されます。便利な何かをすることができるようにするためには、あなたが使用しているフォントのデフォルトの行間を決定する必要があります。あなたが使用しているフォントにIDWriteFont::GetMetrics()を呼び出すことによって、これを達成することができます。デフォルトの行間隔はascentdescentlineGap値の合計です。

チャールズ・ペゾルドはDirectWriteのではページネーションについての記事でこれについて書きましたのます。

私何かが足りない?

IDWriteTextFormatIDWriteTextLayout はSetLineHeight機能---

あなたはHRESULTによって返さSetLineSpacing()エラーコードを確認しましたか?

ヒント:Visual Studioを使用している場合はちょうど呼び出しの後に任意の可能性のあるエラーコードを参照して、デバッグウォッチウィンドウの1つでeax,hrを入力し、

ソース

Windows VistaのSP2およびプラットフォーム更新プログラムでWindows 7、Windows Vistaの

最小のクライアントをサポート。

あなたは窓の上記のバージョンのいずれかを実行しますか? 私はDirectWriteの中で)(SetLineSpacingをサポートしていないもの下記のいずれかのバージョンが上記に述べので、あなたはすべての変更が表示されない理由があると信じています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top