ボタンごとに異なるフォントを設定したい – プログラミング – Home

ボタンごとに異なるフォントを設定したい
 
通知
すべてクリア

[解決済] ボタンごとに異なるフォントを設定したい


真実
 真実
(@真実)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

開発環境は、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
 YuO
(@YuO)
ゲスト
結合: 21年前
投稿: 320
 

単にlfCharSetの値を間違えているだけでは?
恐らく,WindingsはSYMBOL_CHARSETしかもっていないと思いますが,
標準のGetWindowDCで得られたDCにSYMBOL_CHARSETを設定されているフォントが設定され
ている可能性は,限りなく低いと思います。
#特に,この場合はボタンですし。

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


返信引用
真実
 真実
(@真実)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

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 );
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました