ボタンごとに異なるフォントを設定したい

[戻る]
真実 2004/11/23(火) 19:27:59
開発環境は、Windows2000sp4/VC++6sp6/SDK/WTL7.0
ダイアログベースです。

画面に配置したあるボタンだけ、別のフォントで表示したいのですが、
どうしたらよいのでしょうか?

具体的には、「↓」という文字を表示したいのですが、英語環境でも
表示できるようにしたいのです。そこで、"Wingdings 3" の "i" が
下矢印を表現していたので、これを使いたいと思いました。

下記のようにやってみましたが、Font Familyは変化しませんでした。
WM_INITDIALOGで直接この関数を呼び出しています。

void SetBtnFont()
{
    CButton btn;
    btn.Attach( GetDlgItem(IDC_BUTTON_DOWN) );
    HDC hDC = btn.GetWindowDC();

    TEXTMETRIC tm = {0};
    ::GetTextMetrics( hDC, &tm );

    LOGFONT lf = {0};
    lf.lfCharSet = tm.tmCharSet;
    lf.lfHeight = tm.tmHeight;
    ::lstrcpyn(lf.lfFaceName, _T("Wingdings 3"), countof(lf.lfFaceName));

    HFONT hFont = ::CreateFontIndirect(&lf);
    btn.SetFont(hFont);
    btn.ReleaseDC(hDC);
    btn.SetWindowText(_T("i"));
}

YuO [E-Mail] 2004/11/23(火) 19:48:04
単にlfCharSetの値を間違えているだけでは?
恐らく,WindingsはSYMBOL_CHARSETしかもっていないと思いますが,
標準のGetWindowDCで得られたDCにSYMBOL_CHARSETを設定されているフォントが設定され
ている可能性は,限りなく低いと思います。
#特に,この場合はボタンですし。

lfCharSetはSYMBOL_CHARSETを直接指定した方がよいでしょう。
確か,CharSetの相違は最大のペナルティを課せられるはずです。

真実 2004/11/23(火) 20:15:37
[[解決]]
YuOさん、ご回答ありがとうございます。
YuOさんのご回答どおりやりましたら、うまくいきました。

ところで、SYMBOL_CHARSET などを調べる方法(根拠)
などがありましたらお教え頂きたいのですが。


問題の方は解決しましたのでチェックをつけておきます。


SetBtnFont( IDC_BUTTON_DOWN,  _T("i") );

void SetBtnFont(UINT uID, LPCTSTR lpszString)
{
    CButton btn;
    btn.Attach( GetDlgItem(uID) );

    LOGFONT lf = {0};
    lf.lfCharSet = SYMBOL_CHARSET;
    lf.lfHeight = 18;
    ::lstrcpyn(lf.lfFaceName, _T("Wingdings 3"), countof(lf.lfFaceName));

    btn.SetFont( ::CreateFontIndirect(&lf) );
    btn.SetWindowText( lpszString );
}

古いスレッドには追加発言できません。