コントロールのフォントを変更する

コントロールのフォントを変更する方法の1つとして、親ウィンドウクラスで変更する方法がある。以下のように処理する。 (ここでは、フォントダイアログを使用している)
	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);

目次へ