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 訊息的筆刷控制代碼以及呼叫程式碼 CDC::SetBkColor 函式以回應 CTLCOLOR_EDIT 程式碼。
因為下拉式清單方塊實際上是下拉式方塊的子視窗的子系,而不是OnCtlColor 不會根據下拉式方塊的下拉式清單方塊中呼叫。 若要變更下拉式清單方塊的色彩,以檢查 nCtlColor 參數的 CTLCOLOR_LISTBOXOnCtlColor 的覆寫的 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;
}
需求
Header: afxwin.h