次の方法で共有


CWnd::OnCtlColor

更新 : 2007 年 11 月

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

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 メンバ関数はテキストの背景色を設定するために使用します。

0wwk06hc.alert_note(ja-jp,VS.90).gifメモ :

このメンバ関数は、アプリケーションが Windows メッセージを処理できるようにするためにフレームワークによって呼び出されます。この関数に渡されるパラメータの値は、フレームワークがメッセージ受信時に受け取ったパラメータの値に基づいています。この関数の基本クラスの実装を呼び出した場合は、関数に渡したパラメータではなく、メッセージと共に渡されたパラメータ自体が使用されます。

使用例

// 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 のメンバ