【VC++】ダイアログの背景色とコントロールのフォントを変更する

0

    <機能>
    (1)ダイアログの背景色を変更します(うすい緑に変更)
    (2)コントロールの背景色を変更します
     ・スタティックテキスト(ラベル)
     ・チェックボックス
     ・ラジオボタン
     ・エディットボックス
    (3)コントロールのフォントを設定します
     ・MSゴシックで小さいフォント
     ・MS明朝で大きいフォント

    <動作検証&開発環境>
    Visual Studio Community 2015

    <イメージ>
    背景色をうすい緑に設定
     ・ダイアログ
     ・スタティックテキスト(ラベル)1
     ・チェックボックス1、2
     ・ラジオボタン1、2
     ・エディットボックス
    フォントをMSゴシック小さいフォントに設定
     ・スタティックテキスト(ラベル)1
     ・チェックボックス2
     ・ラジオボタン2
    VC++,MFC,ダイアログ,背景色,変更,フォント,OnCtlColor,SetFont

    <使い方>
    (1)ダイアログアプリでプロジェクト(CTLCOLOR)を作成
    プロジェクト作成,VC++,MFC,ダイアログ,背景色,変更,フォント,OnCtlColor,SetFont
    (2)ダイアログにコントロールを配置
    スタティック1(IDC_STATIC1)
    スタティック2(IDC_STATIC2)
    チェックボックス1(IDC_CHECK1)
    チェックボックス2(IDC_CHECK2)
    チェックボックス3(IDC_CHECK3)
    ラジオボタン1(IDC_RADIO1)
    ラジオボタン2(IDC_RADIO2)
    エディットボックス(IDC_EDIT1)
    ダイアログID,VC++,MFC,ダイアログ,背景色,変更,フォント,OnCtlColor,SetFont
    (3)CTLCOLORAppクラスにExitInstance()関数を追加
    クラスウィザード,VC++,MFC,ダイアログ,背景色,変更,フォント,OnCtlColor,SetFont
    (4)CCTLCOLORDlgクラスにコントロール変数m_xCheck1を追加
    コントロール変数,CHECK型,VC++,MFC,ダイアログ,背景色,変更,フォント,OnCtlColor,SetFont
    (5)OnCtlColorメッセージハンドラ関数をオーバーライド
    VC++,MFC,ダイアログ,背景色,変更,フォント,OnCtlColor,SetFont

    (6)コードを記述

    //CTLCOLOR.h

    //Publicメンバ変数を追加(ブラシ、COLORREF、フォント)

    public:

        virtual BOOL InitInstance();

     

        CBrush m_Cbr;

        COLORREF m_Clr;

        CFont m_Font10, m_Font14;

     

     // 実装

     

        DECLARE_MESSAGE_MAP()

        virtual int ExitInstance();

    };

     

    //CTLCOLOR.cpp

    //ブラシとフォントを作成

    BOOL CCTLCOLORApp::InitInstance()

    {

        ~省略~

        

        //うすい緑色をCOLORREF型にセット

        m_Clr = RGB(153, 255, 102);

        //ブラシを作成

        m_Cbr.CreateSolidBrush(m_Clr);

     

        //MSゴシックで小さいフォントを作成

        m_Font10.CreateFont(12, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, SHIFTJIS_CHARSET,

            OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DRAFT_QUALITY, DEFAULT_PITCH, _T("MS ゴシック"));

        //MS明朝で大きいフォントを作成

        m_Font14.CreateFont(18, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, SHIFTJIS_CHARSET,

            OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DRAFT_QUALITY, DEFAULT_PITCH, _T("MS 明朝"));

     

        CCTLCOLORDlg dlg;

        m_pMainWnd = &dlg;

        INT_PTR nResponse = dlg.DoModal();

     

        ~省略~

    }

     

    /*************************************************

    関数名 ExitInstance

    機能  インスタンスを終了する

    *************************************************/

    int CCTLCOLORApp::ExitInstance()

    {

        BOOL brtn;

        //ブラシオブジェクトの破棄

        brtn = m_Cbr.DeleteObject();

        if (!brtn) AfxMessageBox(_T("失敗しました:m_Cbr.DeleteObject()"), MB_ICONERROR);

     

        //フォントオブジェクトの破棄

        brtn = m_Font10.DeleteObject();

        if (!brtn) AfxMessageBox(_T("失敗しました:m_Font10.DeleteObject()"), MB_ICONERROR);

     

        brtn = m_Font14.DeleteObject();

        if (!brtn) AfxMessageBox(_T("失敗しました:m_Font14.DeleteObject()"), MB_ICONERROR);

     

        return CWinApp::ExitInstance();

    }

     

    //CTLCOLORDlg.h

    //App : CCTLCOLORクラスのブラシ、フォントを使用するためのインスタンス

    //m_xCheck1 : CHECK型のコントロール変数

    private:

     

        CCTLCOLORApp* App;

        CButton m_xCheck1;

    };

     

    //CTLCOLORDlg.cpp

    //OnInitDialog()にてフォントをセット

    //OnCtlColor()にて背景色をセット

    BOOL CCTLCOLORDlg::OnInitDialog()

    {

        ~省略~

     

        //ダイアログのタイトルバーをセット

        this->SetWindowText(_T("ダイアログの背景色、フォントの初期設定サンプル"));

     

        /*****   フォント設定ここから   *****/

        //m_Font10 : MSゴシックで小さいフォント

        //m_Font14 : MS明朝で大きいフォント

        

        //ラベルのフォントをセット

        this->GetDlgItem(IDC_STATIC1)->SetFont(&App->m_Font10);

        this->GetDlgItem(IDC_STATIC2)->SetFont(&App->m_Font14);

     

        //エディットボックスのフォントをセット

        this->GetDlgItem(IDC_EDIT1)->SetFont(&App->m_Font10);

        this->GetDlgItem(IDC_EDIT1)->SetWindowText(_T("フォントテストサンプルテキスト(IDC_EDIT1)"));

        

        //チェックボックスのフォントをセット

        this->GetDlgItem(IDC_CHECK1)->SetFont(&App->m_Font10);

        this->GetDlgItem(IDC_CHECK2)->SetFont(&App->m_Font14);

        this->GetDlgItem(IDC_CHECK3)->SetFont(&App->m_Font10);

     

        //ラジオボタンのフォントをセット

        this->GetDlgItem(IDC_RADIO1)->SetFont(&App->m_Font10);

        this->GetDlgItem(IDC_RADIO2)->SetFont(&App->m_Font14);

        

        /*****   フォント設定ここまで   *****/

     

        return TRUE;  // フォーカスをコントロールに設定した場合を除き、TRUE を返します。

    }

     

    /*************************************************

    関数名 OnCtlColor

    機能  ユーザ描画するときにフレームワークが呼び出します

    *************************************************/

    HBRUSH CCTLCOLORDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

    {

        HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

     

        switch (nCtlColor) {

        

        //ダイアログの背景色を設定

        case CTLCOLOR_DLG:

            if (*pWnd == *this) {

                //背景色セット

                return App->m_Cbr;

            }

            break;

     

        //スタティックコントロールの背景色を設定

        case CTLCOLOR_STATIC:

            //ラベル(IDC_STATIC1)の背景色を設定

            if (*pWnd == *this->GetDlgItem(IDC_STATIC1)) {

                pDC->SetBkColor(App->m_Clr);

                return App->m_Cbr;

            }

            //ラジオボタンの背景色を設定

            if ((*pWnd == *this->GetDlgItem(IDC_RADIO1)) || (*pWnd == *this->GetDlgItem(IDC_RADIO2))) {

                pDC->SetBkColor(App->m_Clr);

                return App->m_Cbr;

            }

            //コントロール型のメンバ変数(m_xCheck1)でコントロールを指定することもできます

            //チェックボックスの上段の背景色を設定

            if ((*pWnd == m_xCheck1) || (*pWnd == *this->GetDlgItem(IDC_CHECK2))) {

                return App->m_Cbr;

            }

            break;

     

        //エディットボックスの背景色とテキスト色を設定

        case CTLCOLOR_EDIT:

            if (*pWnd == *this->GetDlgItem(IDC_EDIT1)) {

                pDC->SetTextColor(RGB(255, 0, 0));

                pDC->SetBkColor(App->m_Clr);

                return App->m_Cbr;

            }

            break;

     

        //ボタンを指定するとボタンの淵がきれいになります

        case CTLCOLOR_BTN:

            pDC->SetBkColor(App->m_Clr);

            return App->m_Cbr;

     

        default:

            break;

        }

     

        return hbr;

    }

     

    よろしければポチッと押してください

    プログラマー ブログランキングへ

     



    calendar

    S M T W T F S
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
    << October 2017 >>

    profile

    others

    mobile

    qrcode