CWnd::OnCtlColor

フレームワークは、子コントロールがユーザー描画するときにこのメンバー関数が呼び出されます。

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

パラメーター

  • pDC
    子ウィンドウのディスプレイ コンテキストへのポインターが格納されます。一時的であるがあります。

  • pWnd
    色を格納されたコントロールへのポインターが格納されます。一時的であるがあります。

  • nCtlColor
    次の値から 1 を格納し、コントロールの種類を指定します:

    • CTLCOLOR_BTN のボタン コントロール

    • CTLCOLOR_DLG のダイアログ ボックス

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

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

    • CTLCOLOR_MSGBOX のメッセージ ボックス

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

    • CTLCOLOR_STATIC のスタティック コントロール

戻り値

OnCtlColor は、コントロールの背景塗りつぶしに使用するブラシへのハンドルを返す必要があります。

解説

ほとんどのコントロールは親 (通常はダイアログ ボックス) に適切な色を使用してコントロールを描画するために pDC を準備するには、このメッセージを送信します。

テキストの色を変更するには、目的の赤、緑、および青 (RGB) の値を持つ SetTextColor のメンバー関数を呼び出します。

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

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

[!メモ]

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