tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^7: Windowsのシステムで使用しているフォントの取得。
投稿日: 2009/11/24(Tue) 17:54
投稿者ヨシ
ご返信ありがとうございます。

下記のようなコードで動作確認をしています。

Private Const LF_FACESIZE = &H20

Private Type LOGFONT
    lfHeight                    As Long
    lfWidth                     As Long
    lfEscapement                As Long
    lfOrientation               As Long
    lfWeight                    As Long
    lfItalic                    As Byte
    lfUnderline                 As Byte
    lfStrikeOut                 As Byte
    lfCharSet                   As Byte
    lfOutPrecision              As Byte
    lfClipPrecision             As Byte
    lfQuality                   As Byte
    lfPitchAndFamily            As Byte
    lfFaceName(LF_FACESIZE)     As Byte
End Type


        dim strResult as string
        dim lngRet as long
        dim A as LOGFONT
        dim i as integer

      'システムフォントを取得
    lngRet = SystemParametersInfo(31, Len(A), A, 0)

    '取得したフォントをバイトからストリングへ
    For i = 0 To 32    
        strResult = strResult & Chr(A.lfFaceName(I))        
    Next i
  
    Text1.Font.Charset = 128
    Text1.Font = strResult


日本語OSでこれを実行すると、Text1.Fontに MS UI Gothicが
セットされ、文字のフォントが変更されます。
中国語OSでこれを実行すると、文字のフォントは変更されますが、
中国語を貼り付けると文字化けします。
(現仕様では、SimSunなどのフォントをあらかじめ各コントロールのフォント
に設定しておけば正常に表示できています。)

A.lfFaceName に格納される値は、バイト型で下記になります。


183
76
63
182
174
182
192

中国語OSで、プリントアウトで出力された変換後のstrResultの値は
·L??R?A  
です。

中国語OSのシステムフォント名が2バイト文字であることが、
フォント名文字化けの原因ではないかと考えております。(おそらく「微軟正K體」)



また、下記のようなものも試してみました。


    lngRet = SystemParametersInfo(31, Len(A), A, 0)
    font1 = CreateFontIndirect(A)
    ret = SelectObject(Form1.hdc, font1)
    ret = DeleteObject(font1)
    Text1.Font = Form1.hdc

これを日本語OSでおこなうとき、
Text1.Font.Charset = 128
を実行した場合はMSPゴシックをフォントとして取得し、
Charsetを行わないとArialを取得します。
これらが何のフォントを取得しているのか、追い切れておりません。

以上、たびたび申し訳ありませんが、よろしくおねがいいたします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。