開発環境は、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));
}
単にlfCharSetの値を間違えているだけでは?
恐らく,WindingsはSYMBOL_CHARSETしかもっていないと思いますが,
標準のGetWindowDCで得られたDCにSYMBOL_CHARSETを設定されているフォントが設定され
ている可能性は,限りなく低いと思います。
#特に,この場合はボタンですし。
lfCharSetはSYMBOL_CHARSETを直接指定した方がよいでしょう。
確か,CharSetの相違は最大のペナルティを課せられるはずです。
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 );
}