【VC++】ダイアログの背景色とコントロールのフォントを変更する
<機能>
(1)ダイアログの背景色を変更します(うすい緑に変更)
(2)コントロールの背景色を変更します
・スタティックテキスト(ラベル)
・チェックボックス
・ラジオボタン
・エディットボックス
(3)コントロールのフォントを設定します
・MSゴシックで小さいフォント
・MS明朝で大きいフォント
<動作検証&開発環境>
Visual Studio Community 2015
<イメージ>
背景色をうすい緑に設定
・ダイアログ
・スタティックテキスト(ラベル)1
・チェックボックス1、2
・ラジオボタン1、2
・エディットボックス
フォントをMSゴシック小さいフォントに設定
・スタティックテキスト(ラベル)1
・チェックボックス2
・ラジオボタン2
<使い方>
(1)ダイアログアプリでプロジェクト(CTLCOLOR)を作成
(2)ダイアログにコントロールを配置
スタティック1(IDC_STATIC1)
スタティック2(IDC_STATIC2)
チェックボックス1(IDC_CHECK1)
チェックボックス2(IDC_CHECK2)
チェックボックス3(IDC_CHECK3)
ラジオボタン1(IDC_RADIO1)
ラジオボタン2(IDC_RADIO2)
エディットボックス(IDC_EDIT1)
(3)CTLCOLORAppクラスにExitInstance()関数を追加
(4)CCTLCOLORDlgクラスにコントロール変数m_xCheck1を追加
(5)OnCtlColorメッセージハンドラ関数をオーバーライド
(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;
}
よろしければポチッと押してください