FC2ブログ
 

Technology へようこそ
ここは技術者の「経験」と「ノウハウ」のブログです


--年--月--日

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


2008年12月03日

WindowsXPでの全角固定ピッチフォントの仕様変更

タイトルにある全角固定ピッチフォントとは、MSゴシックやMS明朝などが該当します。

先日、Windows2000で利用していたVB6のプログラムをWindowsXPで動かした際に、ラベルコントロールやテキストボックスで最後の1文字が改行されてしまいフル桁表示がされていないという現象がありました。

これは、WindowsXPより前のバージョンのWindowsで固定ピッチフォントの全角文字の幅が正確に半角文字の2倍とならないことある為に発生するようです。

◆MicroSoftホワイトペーパーより◆


Windowsではフォントのサイズがピクセルの単位で扱われます。
例えば、アプリ上で15ポイントのサイズのフォントを指定した場合、96dpiの画面上では以下の計算により、20ピクセルのフォントが使用されます。
20(ピクセル)=15(ポイント)・96(dpi)/72

この場合、全角文字の幅は20ピクセル、半角文字の幅は10ピクセルとなり、全角文字の幅が半角文字の2倍となります。
しかし14ポイントのサイズのフォントを指定した場合は、以下の計算により19ピクセルのフォントが使用されます。
19(ピクセル)≒18.666=14(ポイント)・96(dpi)/72

この場合、全角文字の幅は19ピクセル、半角文字の幅は10ピクセルとなり、全角文字の幅が正確に半角文字の幅の2倍とならない現象が発生します。


Windows2000で開発時に全角文字10桁がキッチリ表示されるコントロールを配置した場合などにWindowsXPでは9桁しか表示されないというような現象が発生したのです。
(このプログラムでは10ポイントのサイズのフォントを採用していました。)

WindowsXPで正しく表示させるには、WindowsXPでソースを開き、位置や幅を調整して再コンパイルをする必要があります。急な移行が必要でプログラム数が多い場合は以下の方法で一時的に表示をカスタムしておくこともできます。
ただし、レジストリの変更なので注意が必要です。Microsoftではユーザーが手動でレジストリの編集を行った場合に問題が発生しても保証してくれませんので、必ずバックアップをとってから行いましょう。

WindowsXPでは以下のレジストリ値を設定すれば、従来のWindowsと同様の仕様で固定ピッチフォントのサイズが選択されます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize
"Jpn98FixPitch"=dword:00000001

WindowsXPの仕様に合わせて実装されたアプリでは文字の表示や印刷で不具合が発生する可能性があります。この対応は一時的な回避策であり、今後のWindowsでは保証されないので、あしからず。
あまり役に立たないかなぁ。
[ posted by h.i ]

この記事に対するコメント


この記事に対するコメントの投稿














管理者にだけ表示を許可する



この記事に対するトラックバック
トラックバックURL
http://comfair2.blog24.fc2.com/tb.php/400-56b4b663
この記事にトラックバックする(FC2ブログユーザー)











上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。