Windows 8 でアプリケーションを実行した場合に文字列の表示結果が変わる

適用対象: Windows 8

現象


Windows 8 でアプリケーションを実行すると、Windows 7 など以前のバージョンと比較し、文字列の表示結果が変化する場合があります。

次のような状況で表示結果が変わる可能性があります。

・Multiline の TextBox、RichTextBox コントロールにおいて、文字列の描画位置が数ピクセル右にずれます。
  Win32 アプリケーションにおいて、Multiline の Edit コントロールを利用した場合にも同様の現象が発生します。

・TextBox コントロールにおいて TextRenderingHint.AntiAlias のアンチエイリアスの処理結果が異なります。


本現象は、Windows Server 2012 でも同様に確認することができます。



原因


Windows 8 では、MS ゴシック、MS 明朝などの日本語フォントに対して字形の追加が行われております。
これにより、フォントファイルのヘッダー情報の一部の値が変更され、文字列の描画結果に影響を与えています。

なお、同様の原因により GetTextMetrics API で取得される TEXTMETRIC.tmMaxCharWidth の値も変化しています。



解決方法


本現象は、Windows 8 の所定の動作となります。
文字列の描画位置や描画サイズの変化により、アプリケーションに影響がある場合には、対象となるコントロールのサイズを十分な大きさに変更してください。
コントロールのサイズを変更することが難しい場合には、フォントサイズの変更などを検討してください。