FONTを変更する




今回はFONTの変更方法です。

(サンプル:WinTailView.h)
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クラスに追加しています。外部変数として記述しておかないと
せっかく変更したFont情報が消えてしまうからです。



(サンプル:WinTailView.cpp)
// 画面生成時の処理
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情報を取得します。
m_font.CreateFont()関数でFont情報を変更して、SetFont()関数で変更を有効
にします。



(サンプル:WinTailView.cpp)
// フォント変更処理
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変更ダイアログを用いて行う場合はこんな感じです。
ダイアログでOKがクリックされたらm_fontにFont情報が入るので、それを用いて SetFont()関数をコールするだけです。





N総研ソフトウェア開発部のTOPに戻る。

このページに関するご意見・質問は
ドンタコスN村 E-mail:wnaka@coco.ned.co.jp
まで送信してください。