| コントロールのフォントを変更する |
CFont* pFont;
LOGFONT lf;
pFont = GetDlgItem(IDC_COMBO1)->GetFont();
pFont->GetLogFont(&lf);
CFontDialog dlg(&lf);
if(dlg.DoModal() == IDOK) {
// m_Fontは親ウィンドウクラスのメンバ変数
m_Font.DeleteObject(); // 一旦削除する
m_Font.CreateFontIndirect(&lf);
GetDlgItem(IDC_COMBO1)->SetFont(&m_Font);
}
上記の例ではフォントダイアログを使用しているが、要はGetLogFontで取得したlfの値を変更すればよい。
また、デストラクタなどでm_Font.DeleteObject()を実行することを忘れないように。
親クラスではなく、コントロール自身でフォントの処理を行いたい場合は、以下のように処理する。
LOGFONT lf, parentlf; GetFont()->GetLogFont(&lf); GetParent()->GetFont()->GetLogFont(&parentlf); // 親ウィンドウのフォント // 親ウィンドウのフォントに合わせる lf.lfHeight = parentlf.lfHeight; strcpy(lf.lfFaceName, parentlf.lfFaceName); // m_Fontはコントロールクラスのメンバ変数 m_Font.DeleteObject(); // 一旦削除する m_Font.CreateFontIndirect(&lf); CFont* pOldFont = dc.SelectObject(&m_Font); …… // 描画処理 // フォントを元に戻す dc.SelectObject(pOldFont);