C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Arialを使用した時の全角文字

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■90843 / inTopicNo.1)  Arialを使用した時の全角文字
  
□投稿者/ ビタミンA (1回)-(2019/05/06(Mon) 16:12:30)

分類:[.NET 全般] 


VB2017を使っています。


Arialは欧文フォントですが、

フォーム上のLabelやテキストボックスなどの文字列で、
Arialに設定したとしても

日本語などの全角文字が表示されます。

ただし、デフォルトのMS ゴシックとは異なるフォントが使われているようです。

Arialを設定した時の全角文字には何のフォントが使われているのでしょうか?



引用返信 編集キー/
■90848 / inTopicNo.2)  Re[1]: Arialを使用した時の全角文字
□投稿者/ Atata!! (9回)-(2019/05/07(Tue) 01:58:53)
2019/05/07(Tue) 02:00:48 編集(投稿者)

この問い合わせの回答に対して正確に答えることができる人はいないような気がします。
私が過去に調査した範囲では以下のような結論になっています。私が個人的に調査した結果なので何の保証もありません。

文中で Visual Style と記載していますが、実際の動作はちょっとわかりません。
Visual Studio のデザイン時とデバッグ時でフォントが異なることがあるので、その差を指していると考えてください。


1.FontLinkによる解決
該当フォントに存在しない文字が指定されている場合、FontLink によって描画するフォントが決定されます。
FontLink は参考サイトを貼り付けようかと思いましたが、良いサイトがありませんでした。
FontLink で検索してみてください。
なお、Arial は標準では FontLink に登録されていないので次のステップに進むと推測しています。

2.FontLink のデフォルトによる解決
Visual Style が有効である場合、
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink にある FontLinkDefaultChar で指定されたフォントが決定されます。
Windows 10 では 0x30fb で設定されており、これは MS UI Gothic に相当していると推測しています。
ただし、ここで注意していただきたいのが、1文字単位の描画は MS UI Gothic で行われるのですが、
フォントのピッチやクオリティの設定は Arial のままとなっているため、
純粋にそのフォントを選択した時とは描画結果は異なっていると思われます。
ここでハングル等の日本語フォントにない文字を描画しようとした場合、このデフォルトから FontLink を検索すると推測しています。

3.フォントマッパーによるフォントの選択
Visual Style が有効ではない場合、フォントマッパーによってフォントの選択が行われます。
以下のレジストリキー
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontMapper
フォントマッパーで変換されるフォントが登録されています。
DWORD 値の下位 2 バイトが LOGFONT 構造体の lfCharSet に該当しており、その次の 2 バイトが LOGFONT 構造体の lfPitchAndFamily に該当していると推測しています。
ただし、lfCharSet メンバは現在のフォントからではなく指定されている文字から決定されます。
日本語を指定している場合、SHIFTJIS_CHARSET が決定され、下位 2 バイトは 0x80 になります。
Arial フォントは lfPitchAndFamily が 0 であるため、DWORD 値で 0x00000080 のフォントが候補に上がります。
0x00000080 は MS P ゴシック であるため MS P ゴシック が選択されます。
Arial を指定した場合、最低でもここで検索は終了していると思います。
なお、ファミリ以外の設定は Arial を引き継いでいるのも2の手順と同じものと推測しています。

4.デフォルトフォントの選択
最終的に上記で解決されなかった場合、フォントマッパーのデフォルト値が使用されます。
とは言っても、Windows XP 以降の OS ではここまでたどり着いていないと推測しています。
ここでは lfPitchAndFamily の値によって以下のレジストリキーのフォントを選択していると推測しています。
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontMapper\FamilyDefaults

引用返信 編集キー/
■90849 / inTopicNo.3)  Re[2]: Arialを使用した時の全角文字
□投稿者/ Atata!! (10回)-(2019/05/07(Tue) 02:49:08)
文中では述べていませんが、フォントのサイズについては Arial に存在しているベースラインに対して、
MS UI Gothic の全角文字ではベースラインが存在していないため高さの計算方法が異なると推測しています。
具体的には Arial がアセンダラインからベースラインの高さになっているものが、
MS UI Gothic ではアセンダラインからディセンダラインまでの高さとマッチングしており、
Arial よりも7% 〜 14% ほど小さいサイズのフォントが選択されていると推測しています。
ただし、巨大なサイズのフォントでは上記の幅には全く収まらないため、計算方法は不明です。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ