2017年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

最近のトラックバック

無料ブログはココログ

« 2016年11月16日 | トップページ | 2016年11月20日 »

2016年11月19日 (土)

Windows10では、時刻表ビューの縦書き表示が正しく表示されない問題

2016日6月26日の記事でお話しましたとおり、Windows10では、OuDiaの時刻表ビューの縦書き表示が正しく表示されません。

  • 縦書きセル中の横書き半角数字が、正しい位置に表示されず、真下の文字と重なる
  • 縦書きのセルの高さが、今までの2倍ほどの大きさになる

Windows10_2

  Widnows10では他にも問題があったので、僕のPCはWindows7に戻してしまいました。このため、この問題を再現させることができなくなりました。

そこで、Windows10の動くPCを借りてきて、リモートデバッグで原因調査をすることにしました。リモートデバッグを使うことにより、Windows10上でOuDiaを動作させて、その動作をWindows7のデバッガーで解析することができます。

その結果明らかになった原因は、

Windows7とWindows10とでは、GetTextMetrics() 関数によって得られる TEXTMETRIC::tmMaxCharWidth  の値が異なる。

ということでした。 "@MS ゴシック" の9ポイントのフォントの場合、TEXTMETRIC::tmMaxCharWidth の値は、

  • Windows7では 13
  • Windows10 では 24

となります。
OuDiaの時刻表ビューは、TEXTMETRIC::tmMaxCharWidth  を使って、縦書きセルの高さや、文字の位置を計算しています。このため、Windows7 と Windows10 とで、時刻表ビューの表示が全く違ってしまうのです。

文字の高さを示す TEXTMETRIC::tmHeight は、Windows7、Windows10 のどちらでも12 です。Windows10の返す 24 という値は、一般的な文字を考えると、おかしな値です。高さ12ピクセル・幅24ピクセルの文字とは、一体どんな文字のことなのでしょう?

というわけで、縦書きセルの描画は、OSの違いの影響を受けない TEXTMETRIC::tmHeight を使って行うことにしました。

Windows10_161119

この変更を行ったOuDiaは、なるべく早くリリースしたいと思います。

« 2016年11月16日 | トップページ | 2016年11月20日 »