Windows XP での全角固定ピッチフォントの仕様変更
ホワイトペーパー
この記事の ファイル (FixedPitchFont.doc) をダウンロードする (806 KB)
要約 : この記事では、Microsoft® Windows® オペレーティング システムの次期バージョン Windows XP での、固定ピッチフォントの全角文字幅に関する仕様変更について説明します。
目次
はじめに
仕様変更の詳細
従来の Windows の仕様
Windows XP での仕様変更
既存のアプリケーションへの影響
新しい仕様への対応
汎用的なアプリケーションの実装
既存のアプリケーションの対応
Windows XP で用意される暫定回避策とガイドライン
追加情報
問題報告
はじめに
Microsoft® Windows® オペレーティング システムの次期バージョン Windows XP では、MS ゴシックやMS明朝など日本語 固定ピッチフォントの全角文字幅の選択方法が一部変更されます。
これまでの Windows® オペレーティング システムでは、固定ピッチフォントの全角文字の幅が正確に半角文字の 2 倍とならないことがありました。そのため、全角文字が半角文字の 2 倍の文字幅であることを期待してアプリケーションを実装すると、帳票などで文字の位置が合わない問題が発生します。Windows XP では、固定ピッチフォントの全角文字の幅は、常に半角文字の幅の2倍となるため、このような問題は発生しません。(図1を参照)
しかし、全角文字の文字幅が半角文字の 2 倍となるようなサイズのフォントが選択されるため、指定した文字のサイズによっては、これまでよりも 1 ピクセル大きなフォントが選択されることがあります。そのため、文字列の表示位置や表示領域をこれまでの Windows® オペレーティング システムの仕様に合わせて厳密に設定しているアプリケーションでは、文字の位置が若干ずれたり、文字の一部が欠ける現象が発生する可能性があります。この現象は、画面の表示上でも、プリンタでの印刷でも発生する可能性があります。
この記事では、仕様変更の詳細と、既存のアプリケーションでの対応方法について説明しています。
図 1. 仕様変更による文字列幅の違い
仕様変更の詳細
従来の Windows の仕様
Windows® オペレーティング システムでは、GDI (Graphics Device Interface) モジュールが、画面への描画とプリンタでの印刷の管理を行っています。この GDI 内部では、フォントのサイズはピクセル (プリンタの場合ドット) の単位で扱われます。例えば、アプリケーション上で 15 ポイントのサイズのフォントを選択した場合、96 dpi の画面上では、以下の計算により、20 ピクセルのフォントが使用されます。
20 (ピクセル) = 15 (ポイント) × 96 (dpi) / 72
この場合、全角文字の幅は 20 ピクセル、半角文字の幅は 10 ピクセルとなり、全角文字の幅が半角文字の幅の 2 倍となります。
次に、14 ポイントのフォントを選択した場合、以下の計算により 19 ピクセルのフォントが使用されます。
19 (ピクセル) ≒ 18.666 = 14 (ポイント) × 96 (dpi) / 72
この場合、全角文字の幅は 19 ピクセル、半角文字の幅は 10 ピクセルとなり、全角文字の幅が正確に半角文字の幅の2倍とならない現象が発生します。
Windows® の画面表示では、コントロールパネルの「画面」アプレットを選択して表示されるプロパティダイアログで、「設定」タブの「詳細」の「全般」で「小さいフォント」を選択した場合、実際のディスプレイの解像度とは無関係に、常に 96 dpi として GDI 内部で処理されます。また、「大きいフォント」を選択した場合には、常に 120 dpi として処理されます。
そのため画面上では、ポイント単位で 3 の倍数のフォントサイズを選択した場合 (15,18,21 ポイントなど)、上記の計算式でピクセルの単位にしたときに常に偶数の値となるため、全角文字の幅は半角文字の幅の 2 倍となり、文字の描画位置がずれることはありません。しかし、それ以外のサイズを指定した場合、全角文字の幅が半角文字の 2 倍とならないことがありました。
プリンタの場合、使用するプリンタ機器やドライバの設定によって、さまざまな解像度(dpi)が選択されるため、それに応じた計算が必要となります。
このような仕様により、従来の Windows® で固定ピッチフォントの全角文字の幅が正確に半角文字の 2 倍とする必要がある場合、アプリケーション内で選択するフォントのポイント値を計算して確認するか、個々の文字の表示位置をアプリケーションから明示的に指定する必要がありました。
Windows XP での仕様変更
Windows XP では、どのフォントサイズを選択した場合でも、常に全角文字の幅が半角文字の幅の 2 倍となるように調整されます。そのため、従来の Windows® で発生していたような表示位置の問題はなくなり、表示位置を合わせるための回避処理も必要なくなります。
表 1 は、従来の Windows® と Windows XP で使用されるフォントのサイズを示しています。この表は、96 dpi の画面に表示される場合の値です。
表 1 ディスプレイ (96 dpi) 上での MS ゴシックの文字幅の例
ポイント値 |
n(lfHeight=-n) |
半角文字幅 |
全角文字幅 |
全角文字幅 |
13 ポイント |
17 |
9 |
18 |
17 |
14 ポイント |
19 |
10 |
20 |
19 |
15 ポイント |
20 |
10 |
20 |
20 |
Windows XP では、半角文字のサイズを元に、その 2 倍の幅となる全角文字が選択されます。そのため、常に全角文字の幅は半角文字の 2 倍となりますが、従来の Windows® に比べて 1 ピクセル大きなサイズのフォントが選択されることがあります。
既存のアプリケーションへの影響
Windows XP で固定ピッチフォントの日本語文字を使用した場合、従来の Windows® に比べて 1 ピクセル大きなサイズのフォントが選択されることがあるため、従来のアプリケーションの表示や印刷で一部不具合が生じる可能性があります。
図 2 に、従来の仕様に合わせて開発されたアプリケーションを Windows XP で実行させた際の表示不正の例を示します。
意図した表示例 | 表示不正の例 |
図 2. 従来の仕様で開発されたアプリケーションを新しい仕様のOS上で稼動させた場合の表示不正例
この例では、1 ポイント大きなフォントが選択された部分で文字の表示が欠ける現象が発生しています。ポイント値が 3 の倍数 (18,24,36 など) で、これまでと同じサイズのフォントが選択される部分では、問題は発生していません。
アプリケーションが、以下のような条件を満たす場合、Windows XP では表示や印刷で不具合が発生する可能性があります。
- 固定ピッチの日本語フォントを指定している
- 従来の仕様に基づいた計算で、文字を表示または印刷する領域の大きさを固定しており、且つその領域が文字を表示するための必要最小限のサイズしかとられていない
- 新しい仕様と従来の仕様とで大きさが異なるフォントのサイズを指定している(ディスプレイ上では、3 の倍数以外のポイントサイズ。印刷の際は、プリンタの解像度に依存)
問題が発生した際の現象は、アプリケーションの実装に依存します。図 2 の例のように、末尾の文字がまったく表示されなくなる可能性もありますが、末尾の文字が 1,2 ポイント欠けるだけで、実際の使用上大きな問題とならない場合もあります。特に、一般的に解像度が高いプリンタの場合、文字の印字位置が数ドットずれるだけで、事実上問題が確認できないケースも考えられます。
新しい仕様への対応
汎用的なアプリケーションの実装
従来の Windows® と Windows XP の両方をサポートする汎用的なアプリケーションを実装する場合、以下のような点に注意するようにしてください。
- 可能な限り固定ピッチフォントではなく、MS P ゴシックなどのプロポーショナルフォントを使用する
- 可能な限り、文字の表示領域に余裕を持たせる
- 文字の表示位置が重要である場合には、個々の文字ごとに表示位置を明確に指定する
- Visual Basic のフォーム編集や、Visual C++ のダイアログリソースの編集など開発ツールを使用してウィンドウやダイアログを設計する際には、配置するテキストフィールドやボタンで使用されるフォントが固定ピッチのフォントではないか、また従来の Windows® とWindows XP で大きさの異なるフォントサイズを指定していないか確認する
- 必要であれば、フォントのサイズを指定する際に、最終的に使用される文字のポイントサイズを判断し、それに応じた処理を行うようにする
既存のアプリケーションの対応
既存のアプリケーションで、本仕様の変更による問題が発生していないか、Windows XP 上でテストを行うようにしてください。テストは、「従来のアプリケーションへの影響」で記述した条件に一致する実装を行ったアプリケーションを中心に行ってください。
末尾の文字が欠けるなど、致命的な問題が発生する場合には、修正モジュールやマイナーバージョンアップ版の提供を行う必要があります。
また、Windows XP ではこの問題に対する暫定的な回避策を提供します。この回避策を使用することは推奨されませんが、やむをえず使用する場合には、下記に述べますガイドラインに従ってください。
Windows XP で用意される暫定回避策とガイドライン
Windows XP では、以下のレジストリ値を設定すれば、従来の Windows® と同様の仕様で固定ピッチフォントのサイズが選択されます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize "Jpn98FixPitch"=dword:00000001
この設定はシステム全体に適用されるため、設定適用後、新しい Windows XP の仕様に合わせて実装されたアプリケーションでは、文字の表示や印刷で不具合が発生する可能性があります。これらのサイドエフェクトを最小限にするため、この設定を用いる場合、次のガイドラインに従ってください。
- この暫定的な回避策は、既存のアプリケーションに対してのみ用いてください。現在開発中、もしくはこれから開発されるアプリケーションに対しましては、先に述べました「汎用的なアプリケーションの実装」に従い、Windows XP に対応してください。このレジストリの設定をアプリケーションのインストーラーが無条件に設定するようなことはしないでください。
- アプリケーションベンダーが、この回避策を使用して自社のソフトウェア製品の問題を回避しようとするときには、この回避策を使用することによる影響(例:変更がシステム全体に適用される等)を十分にユーザに通知してください。
- アプリケーションベンダーが、この回避策を使用して自社のソフトウェア製品の問題を回避しようとするときには、この回避策を使用する・しないをエンドユーザーが選択できるようにしてください。
- ユーザが手動でレジストリの設定を変更した場合、弊社ではそのレジストリの編集の結果によるいかなる問題に対して、保証はいたしかねます。
注意: この設定は Windows XP でのみ有効な一時的な回避策であり、今後のWindows® のバージョンでも保証されるものではありません。
追加情報
問題報告
Windows XP に関する問題やお問い合わせは、Beta 版のバグ レポート チャネル経由で連絡してください。サポート担当者または開発者が、問題を再現および修正することができるように、詳細なレポートをお願いします。