各種コントロールの色を設定


 通常、コントロールには「背景の色」、「表示文字の色」を設定できます。
 ここでは、これらの設定方法の概要を示します。

【使用関数】
CWnd::OnCtlColor

上記関数は、ClassWizardでWM_CTLCOLORメッセージを設定することにより生成出来ます。

【書式】
HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UNIT nCtrlColor);
    
  戻り値     :背景色
  pDC        :子ウィンドウのディスプレイコンテキスト
  pWnd       :該当するコントロールへのポインタ
  nCtrlColor :コントロールのタイプを指定

nCtrlColorの値
CTLCOLOR_BTNボタン
CTLCOLOR_DLGダイアログボックス
CTLCOLOR_EDITエディットボックス
CTLCOLOR_LISTBOXリストボックス
CTLCOLOR_MSGBOXメッセージボックス
CTLCOLOR_SCROLLBARスクロールバー
CTLCOLOR_STATICスタティックテキスト
[文字色の設定]  OnCtlColor関数の中で文字色を指定するときは、次の関数を使用します。 pDC->SetBkMode(TRANSPARENT); //背景が見えるようにする   pDC->SetTextColor(RGB(255,0,0)); //文字色を指定 例:赤  OnCtlColor関数を使って、エディットボックスの背景を緑、文字を赤、 リストボックスの背景を青にするときは、以下のように記述します。   if(nCtlColor == CTLCOLOR_EDIT){ pDC->SetBkMode(TRANSPARENT);    //背景を見えるようにする pDC->SetTextColor((RGB(255,0,0)); //文字を赤にする return::CreateSoliBrush(RGB(0,255,0)); //背景を緑にする } else if(nCtlColor == CTLCOLOR_LISTBOX){ return::CreateSoliBrush(RGB(0,0,255)); //背景を青にする } 【コントロールの識別】  OnCtlColor関数によりコントロールのタイプを調べるには、nCtlColor引数を 調べることにより知ることが出来ます。しかし、この方法には以下のような問題 があります。  ・同種のコントロールは、nCtlColor引数が同じになる。 すなわち、同種のコントロールが複数ある場合は、それらの判別が出来ないという ことになります。従って、この方法は同種の複数コントロールに別々の色を設定 することが出来ません。  これを可能にするためにコントロールにメンバ変数を割り当てます。 この操作はClassWizardで簡単に設定することが可能です。こうして設定したメンバ変数 とpWnd引数を使用することによりこの問題を解決することが出来ます。  では、以下にエディットボックスを使用した簡単な例を示します。 二つのエディットボックスにそれぞれ以下のコントロールメンバ変数を割り当てます。 m_edit1 m_edit2 if(nCtlColor == CTLCOLOR_EDIT){ pDC->SetBkMode(TRANSPARENT); if(pWnd == &m_edit1){ //m_edit1かどうかの判定 pDC->SetTextColor(RGB(255,0,0)); //赤 return ::CreateSolidBrush(RGB(0,255,0)); //緑 } else if(pWnd == &m_edit2){ //m_edit2かどうかの判定 pDC->SetTextColor(RGB(255,2550)); //黄 return ::CreateSolidBrush(RGB(0,0,255)); //青 } }