윈도우의 일반적인 컨트롤은 기능에 중점을 준것이기 때문에
모양새가 별로이다.
그럴때 색상을 변경할때 많이 사용하는게 WM_CTRCOLOR 이다.
static, Edit의 배경색을 바꿀때 요긴하다.

WM_CTLCOLOR 메세지는 컨트롤의 부모가 받는다.

조건 : 바꾸고자 하는 Edit의 ID --> IDC_EDIT_USERID
         컨트롤의 부모는           --> CDemoDlg

1. 부모인 CDemoDlg의 WM_CTLCOLOR을 등록한다.
2. 메세지 핸들러를 클래스 위져드로 등록하면 컨트롤의 부모는

HBRUSH CDemoDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
    // TODO: Change any attributes of the DC here
    // 새로 작성한 부분
    if ( pWnd->GetDlgCtrlID() == IDC_EDIT_USERID )
    {
        pDC->SetBkColor( RGB(249, 225, 155) );
        pDC->SetBkMode( OPAQUE );

        return m_brText;
    }
    // TODO: Return a different brush if the default is not desired
    return hbr;
}


특이한것은 변경하고자 하는 컨트롤의 리턴 HBRUSH는 hbr과 다른 것을
리턴해야 한다.
그렇지 않고 그냥 return hbr 을 리턴하면 색상이 변경되지 않는다.

ps. m_brText는 CBrush로 생성자에서 m_brText.CreateSolidBrush( RGB(249, 225, 155) )로
     생성해줬습니다.

posted by 뚱2