【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、フォント)

    class CCTLCOLORApp : public CWinApp
    {
    public:
        CCTLCOLORApp();

    // オーバーライド
    public:
        virtual BOOL InitInstance();

        CBrush m_Cbr;
        COLORREF m_Clr;
        CFont m_Font10, m_Font14;

        //〜〜省略〜〜
    };

     

    //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();

     

        //〜〜省略〜〜


        // ダイアログは閉じられました。アプリケーションのメッセージ ポンプを開始しないで
        //  アプリケーションを終了するために FALSE を返してください。
        return FALSE;
    }


    /*************************************************
    関数名 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型のコントロール変数

    class CCTLCOLORDlg : public CDialogEx
    {

        //〜〜省略〜〜

    private:

        CCTLCOLORApp* App;
        CButton m_xCheck1;
    };

     

    //CTLCOLORDlg.cpp

     

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

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

    BOOL CCTLCOLORDlg::OnInitDialog()
    {
        CDialogEx::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;
    }
     

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

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



    selected entries

    categories

    calendar

    S M T W T F S
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
    << November 2018 >>

    profile

    others

    archives