フォーカスを取得したら背景を白,フォーカスを失ったら背景をグレーにする.
コンボボックスはコントロールが複合されたものなので,ちょっと工夫が必要になる.
コンボボックスをサブクラス化して実現させる.
(特記部分だけを抽出)
---- CMyComboBox.h -----
class CMyComboBox : public CComboBox
{
private:
BOOL m_bFocused;
afx_msg void OnKillfocus();
afx_msg void OnSetfocus();
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
};
---- CMyComboBox.c -----
static COLORREF m_clrText = RGB(0, 0, 0);
static COLORREF m_clrBkgnd[2] = { RGB(255, 255, 255), RGB( 220, 220, 220) };
CMyComboBox::CMyComboBox()
{
m_bFocused = FALSE;
}
BEGIN_MESSAGE_MAP(CMyComboBox, CComboBox)
//{{AFX_MSG_MAP(CMyComboBox)
ON_CONTROL_REFLECT(CBN_KILLFOCUS, OnKillfocus)
ON_CONTROL_REFLECT(CBN_SETFOCUS, OnSetfocus)
ON_WM_CTLCOLOR_REFLECT()
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CMyComboBox::OnKillfocus()
{
m_bFocused = FALSE;
Invalidate(TRUE);
}
void CMyComboBox::OnSetfocus()
{
m_bFocused = TRUE;
Invalidate(TRUE);
}
HBRUSH CMyComboBox::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetTextColor( m_clrText );
pDC->SetBkColor( m_bFocused ? m_clrBkgnd[0] : m_clrBkgnd[1] );
return CreateSolidBrush( m_bFocused ? m_clrBkgnd[0] : m_clrBkgnd[1] );
}
HBRUSH CMyComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
pDC->SetTextColor( m_clrText );
pDC->SetBkColor( m_bFocused ? m_clrBkgnd[0] : m_clrBkgnd[1] );
return CreateSolidBrush( m_bFocused ? m_clrBkgnd[0] : m_clrBkgnd[1] );
}
参照
エディットコントロールの背景色