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変更ダイアログを用いて行う場合はこんな感じです。