CEdit 컨트롤의 색상을 변경하기 위해서는
WM_CTLCOLOR을 이용한다.
일단 전역변수로
CBrush 와
COLORREF 변수를 선언해준다.
그리고 나서 클래스 위저드에서 다이얼로그 자체의 WM_CTLCOLOR을 생성해준다.
이 녀석은 그리기 전에 메시지를 가로채서 색상을 설정해주는 역활을 한다고 한다.
OnInitDialog() 에서
m_redcolor=RGB(255,0,0); // red
m_bluecolor=RGB(0,0,255); // blue
m_textcolor=RGB(255,255,255); // white text
m_redbrush.CreateSolidBrush(m_redcolor); // red background
m_bluebrush.CreateSolidBrush(m_bluecolor); // blue background
이런식으로 브러시와 색상을 미리 설정해준다.
그 다음에, OnCtlColor에서 GetDlgCtrlID()에 의해 분기를 쳐주면서
원하는 컨트롤의 ID에 연결해주면 원하는 색상으로 그려진다.
pDC->SetBkColor(m_bluecolor);
pDC->SetTextColor(m_textcolor);
hbr = (HBRUSH) m_bluebrush;
위의 내용을 사용하면되며,
SetBKColor()은 배경색상(기본값은 흰색)
SetTextColor()은 글씨색상(기본값은 검은색)
을 변경해주게 된다.
브러시를 리턴함으로, 이 브러시를 이용하여 실제로 변경한 색상으로 그려주게 된다.
아래는 OnCtlColor의 기본 템플릿이다.
클래스위저드가 생성하면 // TODO 사이의 내용이 없으므로 불편하다.
HBRUSH CBarcodeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
switch(nCtlColor)
{
case CTLCOLOR_EDIT:
case CTLCOLOR_MSGBOX:
switch (pWnd->GetDlgCtrlID())
{
default:
break;
}
break;
case CTLCOLOR_STATIC:
switch (pWnd->GetDlgCtrlID())
{
default:
break;
}
break;
default:
break;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
[링크 :
http://www.codeguru.com/Cpp/controls/editctrl/backgroundcolor/article.php/c3929/#more]
[링크 :
http://mind444.tistory.com/64]