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_EDIT と CTLCOLOR_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