FONTを変更する
class CWinTailView : public CEditView
{
protected: // シリアライズ機能のみから作成します。
CWinTailView();
DECLARE_DYNCREATE(CWinTailView)
// アトリビュート
public:
CWinTailDoc* GetDocument();
// オペレーション
public:
CFont m_font;
LOGFONT LogFont; // ログフォント構造体
// オーバーライド
// ClassWizard は仮想関数のオーバーライドを生成します。
//{{AFX_VIRTUAL(CWinTailView)
public:
virtual void OnDraw(CDC* pDC); // このビューを描画する際にオーバーライドされます。
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
まずは、CFontをViewクラスに追加しています。外部変数として記述しておかないと
// 画面生成時の処理
int CWinTailView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CEditView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: この位置に固有の作成用コードを追加してください
CClientDC dc(this);
dc.GetCurrentFont()->GetLogFont(&LogFont);
// iniファイルからフォント情報を取得する
GetIniFont();
// 取得したフォント情報をフォント構造体にセットする
m_font.CreateFont(
LogFont.lfHeight,
LogFont.lfWidth,
LogFont.lfEscapement,
LogFont.lfOrientation,
LogFont.lfWeight,
LogFont.lfItalic,
LogFont.lfUnderline,
LogFont.lfStrikeOut,
LogFont.lfCharSet,
LogFont.lfOutPrecision,
LogFont.lfClipPrecision,
LogFont.lfQuality,
LogFont.lfPitchAndFamily,
LogFont.lfFaceName );
// フォントを更新する
SetFont(&m_font, TRUE);
dc.GetCurrentFont()->GetLogFont(&LogFont)で現在のFont情報を取得します。
// フォント変更処理
void CWinTailView::FontChg( WPARAM wParam, LPARAM lParam )
{
CFontDialog fontDlg( &LogFont,
CF_EFFECTS | CF_SCREENFONTS | CF_LIMITSIZE | CF_BOTH,
NULL, this );
fontDlg.m_cf.nSizeMin = 8;
fontDlg.m_cf.nSizeMax = 72;
fontDlg.m_cf.rgbColors = m_fontColor;
if( fontDlg.DoModal() == IDOK )
{
// フォント変更ダイヤログ画面でOKがクリックされた
m_font.DeleteObject();
if( m_font.CreateFontIndirect(&LogFont) )
SetFont(&m_font);
m_fontColor = fontDlg.m_cf.rgbColors;
Invalidate( TRUE );
// 新しいフォント情報をiniファイルに書き込む
SetIniFont();
// 画面の再表示を行う
TailDisplay( D_REDRAW_RESIZE );
}
Font変更ダイアログを用いて行う場合はこんな感じです。