Help and Support

文書番号: 417434 - 最終更新日: 2002年7月30日 - リビジョン: 1.0

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

この記事は、以前は次の ID で公開されていました: JP417434
すべて展開する | すべて折りたたむ

概要

Windows XP では、MS ゴシックや MS 明朝など日本語 固定ピッチフォントの全角文字幅を選択する仕様が、これまでの Windows と異なっています。これまでの Windows オペレーティング システムでは、固定ピッチフォントの全角文字の幅が正確に半角文字の 2 倍とならないことがありました。そのため、全角文字が半角文字の 2 倍の文字幅であることを期待してアプリケーションを実装すると、帳票などで文字の位置が合わない問題が発生します。Windows XP では、固定ピッチフォントの全角文字の幅は、常に半角文字の幅の 2 倍となるため、このような問題は発生しません。 しかし、全角文字の文字幅が半角文字の 2 倍となるようなサイズのフォントが選択されるため、指定した文字のサイズによっては、これまでよりも1ピクセル大きなフォントが選択されることがあります。そのため、文字列の表示位置や表示領域をこれまでの Windows オペレーティングシステムの仕様に合わせて厳密に設定しているアプリケーションでは、文字の位置が若干ずれたり、文字の一部が欠ける現象が発生する可能性があります。この現象は、画面の表示上でも、プリンタでの印刷でも発生する可能性があります。

詳細

Windows オペレーティング システムでは、GDI(Graphics Device Interface) モジュールが、画面への描画とプリンタでの印刷の管理を行っています。この GDI 内部では、フォントのサイズはピクセル (プリンタの場合ドット) の単位で扱われます。例えば、アプリケーション上で 15 ポイントのフォントを選択した場合、96dpi の画面上では、以下の計算により、20 ピクセルのフォントが使用されます。
  20(ピクセル)  =  15(ポイント)  ×  96(dpi)  /  72
この場合、全角文字の幅は 20 ピクセル、半角文字の幅は 10 ピクセルとなり、全角文字の幅が半角文字の幅の 2 倍となります。しかし、14 ポイントのフォントを選択した場合従来の Windows では以下の計算により 19 ピクセルのフォントが使用されます。
  19(ピクセル)  ≒  18.666  =  14(ポイント)  ×  96(dpi)  /  72
この場合、全角文字の幅は 19 ピクセル、半角文字の幅は 10 ピクセルとなり、全角文字の幅が正確に半角文字の幅の 2 倍とならない現象が発生します。 Windows の画面表示では、コントロールパネルの「画面」アプレットを選択して表示されるプロパティダイアログで、DPI 設定に「通常のサイズ (96 DPI) 」または「小さいフォント」を選択した場合 (「設定」タブの「詳細」-> 「全般」)、実際のディスプレイの解像度とは無関係に、常に 96dpi として GDI 内部で処理されます。また、「大きなサイズ (120 DPI) 」または「大きいフォント」を選択した場合には、常に 120dpi として処理されます。そのため画面上では、ポイント単位で 3 の倍数のフォントサイズを選択した場合 (15,18,21 ポイントなど)、上記の計算式でピクセルの単位にしたときに常に偶数の値となるため、全角文字の幅は半角文字の幅の 2 倍となり、文字の描画位置がずれることはありません。しかし、それ以外のサイズを指定した場合、全角文字の幅が半角文字の 2 倍とならないことがありました。プリンタの場合、使用するプリンタ機器やドライバの設定によって、さまざまな解像度(dpi) が選択されるため、それに応じた計算が必要となります。 Windows XP では、どのフォントサイズを選択した場合でも、常に全角文字の幅が半角文字の幅の 2 倍となるように調整されます。しかし、半角文字のサイズを元に、その 2 倍の幅となる全角文字が選択されるため、従来の Windows に比べて 1 ピクセル大きなサイズのフォントが選択されることがあります。例えば、上記の 14 ポイントのフォントの場合、Windows XP では、20 ピクセルのフォントが選択されます。

状況

この動作は、仕様です。

対処方法

従来の Windows と Windows XP の両方をサポートする汎用的なアプリケーションを実装する場合、以下のような点に注意するようにしてください。
  1. 可能な限り固定ピッチフォントではなく、MS P ゴシックなどのプロポーショナル フォントを使用する
  2. 可能な限り、文字の表示領域に余裕を持たせる
  3. 文字の表示位置が重要である場合には、個々の文字ごとに表示位置を明確に指定する
  4. Visual Basic のフォーム編集や、Visual C++ のダイアログリソースの編集など開発 ツールを使用してウィンドウやダイアログを設計する際には、配置するテキスト フィールドやボタンで使用されるフォントが固定ピッチのフォントではないか、また 従来の Windows と Windows XP で大きさの異なるフォントサイズを指定していないか 確認する
  5. 必要であれば、フォントのサイズを指定する際に、最終的に使用される文字のポイン トサイズを判断し、それに応じた処理を行うようにする
また、Windows XP では、既存のアプリケーションのために、この問題に対する暫定的な回避策も提供されますが、この回避策は、今後の Windows のバージョンでも保障されるものではなく、また他のアプリケーションにも影響を及ぼすため、上記の対応をお願いします。

関連情報

Windows 2000 での固定ピッチフォントの対応については、以下の資料を参照してください。
文書番号: 254049? (http://support.microsoft.com/kb/254049/JA/ )
タイトル: 固定ピッチフォントのポイントサイズによりピクセル幅が既存と異る

この資料は以下の製品について記述したものです。
  • Microsoft Windows XP Professional
キーワード:?
kbinfo KB417434
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"