次の方法で共有


CWnd::OnCtlColor

子コントロールが描画される直前に、フレームワークによってこのメンバー関数が呼び出されます。

afx_msg HBRUSH OnCtlColor(
   CDC* pDC,
   CWnd* pWnd,
   UINT nCtlColor 
);

パラメーター

  • pDC
    子ウィンドウのディスプレイ コンテキストへのポインター。 一時的なポインターでもかまいません。

  • pWnd
    色を調べるコントロールへのポインター。 一時的なポインターでもかまいません。

  • nCtlColor
    コントロールのタイプを指定する、次の値のいずれかを持ちます。

    • CTLCOLOR_BTN   ボタン コントロール

    • CTLCOLOR_DLG   ダイアログ ボックス

    • CTLCOLOR_EDIT   エディット コントロール

    • CTLCOLOR_LISTBOX   リスト ボックス コントロール

    • CTLCOLOR_MSGBOX   メッセージ ボックス

    • CTLCOLOR_SCROLLBAR   スクロール バー コントロール

    • CTLCOLOR_STATIC   静的コントロール

戻り値

OnCtlColor 関数は、コントロールの背景を塗りつぶすために使うブラシへのハンドルを返します。

解説

ほとんどのコントロールは、正しい色を使ってコントロールを描画するための pDC を用意するために、このメッセージを親ウィンドウ (通常はダイアログ ボックス) に送ります。

テキスト カラーを変更するには、アプリケーションは希望する赤、緑、青 (RGB) の値を使って SetTextColor メンバー関数を呼び出してください。

単一行のエディット コントロールの背景色を変更するには、CTLCOLOR_EDITCTLCOLOR_MSGBOX メッセージの両方のコードでブラシ ハンドルを設定し、CTLCOLOR_EDIT コードで CDC::SetBkColor 関数を呼び出してください。

ドロップダウン コンボ ボックスのリスト ボックスでは、OnCtlColor は呼び出されません。これは、ドロップダウン リスト ボックスがウィンドウの子ウィンドウではなく、実際にはコンボ ボックスの子ウィンドウだからです。 ドロップダウン リスト ボックスの色を変更するためには、パラメーター nCtlColor に CTLCOLOR_LISTBOX を設定した OnCtlColor のオーバーライドを使用して CComboBox を作成してください。 この処理では、SetBkColor メンバー関数はテキストの背景色を設定するために使用します。

注意

このメンバー関数は、アプリケーションが Windows メッセージを処理できるようにするためにフレームワークによって呼び出されます。 この関数に渡されるパラメーターの値は、フレームワークがメッセージ受信時に受け取ったパラメーターの値に基づいています。 この関数の基本クラスの実装を呼び出した場合は、関数に渡したパラメーターではなく、メッセージと共に渡されたパラメーター自体が使用されます。 次のメソッドをダイアログ クラスに追加するには、Visual Studio のプロパティ ウィンドウの WM_CTLCOLOR メッセージ ハンドラーを追加するのにに使用します。 また、ON_WM_CTLCOLOR() エントリをメッセージ マップに手動で追加できます。

使用例

// This OnCtlColor handler will change the color of a static control
// with the ID of IDC_MYSTATIC. The code assumes that the CPenWidthsDlg
// class has an initialized and created CBrush member named m_brush.
// The control will be painted with red text and a background
// color of m_brush.
HBRUSH CPenWidthsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   // Call the base class implementation first! Otherwise, it may
   // undo what we're trying to accomplish here.
   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

   // Are we painting the IDC_MYSTATIC control? We can use
   // CWnd::GetDlgCtrlID() to perform the most efficient test.
   if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)
   {
      // Set the text color to red
      pDC->SetTextColor(RGB(255, 0, 0));

      // Set the background mode for text to transparent 
      // so background will show thru.
      pDC->SetBkMode(TRANSPARENT);

      // Return handle to our CBrush object
      hbr = m_brush;
   }

   return hbr;
}

必要条件

**ヘッダー:**afxwin.h

参照

参照

CWnd クラス

階層図

CDC::SetBkColor

概念

CWnd のメンバー