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_EDIT と CTLCOLOR_MSGBOX メッセージの両方のコードでブラシ ハンドルを設定し、CTLCOLOR_EDIT コードで CDC::SetBkColor 関数を呼び出してください。
ドロップダウン コンボ ボックスのリスト ボックスでは、OnCtlColor は呼び出されません。これは、ドロップダウン リスト ボックスがウィンドウの子ウィンドウではなく、実際にはコンボ ボックスの子ウィンドウだからです。ドロップダウン リスト ボックスの色を変更するためには、パラメータ nCtlColor に CTLCOLOR_LISTBOX を設定した OnCtlColor のオーバーライドを使用して CComboBox を作成してください。この処理では、SetBkColor メンバ関数はテキストの背景色を設定するために使用します。
メモ : |
---|
このメンバ関数は、アプリケーションが 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