フォント・ダイアログを使う


サンプル・プログラムのコード追加部分のソースです。

// アトリビュート
public:
    CFontdlgsapDoc* GetDocument();

    //フォントダイアログ操作用
    CFont myFONT;
    COLORREF myTXTCOLOR;
    CString FontName;

CFontdlgsapView::CFontdlgsapView()
{
    // TODO: この場所に構築用のコードを追加してください。

    //フォント用領域初期化
    myTXTCOLOR = RGB(0,0,0);    //黒を設定
    FontName.Empty();

}

void CFontdlgsapView::OnDraw(CDC* pDC)
{
    CFontdlgsapDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: この場所にネイティブ データ用の描画コードを追加します。

    //フォント変更用
    CFont* oldFont = pDC->SelectObject(&myFONT);    //変更前のフォント情報を退避
    pDC->SetTextColor(myTXTCOLOR);                    //テキストに、指定された色を設定
    pDC->SetBkMode(TRANSPARENT);                    //設定するモードを指定
    pDC->TextOut(10,50,"設定フォント:" + FontName);
    pDC->SelectObject(oldFont);                        //内部設定情報を戻す
}

//フォント設定用のメニュー
void CFontdlgsapView::OnViewFont() 
{
    // TODO: この位置にコマンド ハンドラ用のコードを追加してください
    CClientDC myDC(this);

    static LOGFONT lf;
    static int first = 1;

    //ダイアログボックスの初期設定
    if(first == 1){
        first = 0;
        myDC.GetCurrentFont()->GetLogFont(&lf);        //システム・フォントを取得
    }

    //フォント・ダイアログを開く
    CFontDialog myDLG(&lf, CF_EFFECTS | CF_SCREENFONTS | CF_LIMITSIZE);

    //文字の選択可能ポイント・サイズを設定
    myDLG.m_cf.nSizeMin = 10;
    myDLG.m_cf.nSizeMax = 30;

    //現在のテキスト・カラーを設定
    myDLG.m_cf.rgbColors = myTXTCOLOR;

    //ダイアログの選択フォントを反映
    if(myDLG.DoModal() == IDOK){
        myTXTCOLOR = myDLG.m_cf.rgbColors;       //色の取得  
        FontName = lf.lfFaceName;                //フォント名の取得
        myFONT.CreateFontIndirect(&lf);          //LOGFONT 構造体で与えられた特性で CFont オブジェクトを初期化
        Invalidate(TRUE);                        //画面再表示
    }
}