저번에 이어 에디트 컨트롤을 사용하면서 글자색이나 배경색을 바꾸는 것에 대하여 알아보자.
이 기능은 에디트 컨트롤 뿐만 아니라, 거의 모든 문자열 입출력이 있는 컨트롤에 해당하는 기능이므로
잘 알아두면 다른 컨트롤에서도 쉽게 사용할 수 있다.

다이알로그의 이벤트 중에 WM_CTLCOLOR 라는 이벤트가 있습니다.

저걸 추가하고 나면 화면상에 다음과 같은 코드가 자동으로 추가됩니다.

HBRUSH CSssDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
   
    // TODO: Return a different brush if the default is not desired
    return hbr;
}

1. CDC* pDC - MFC에서 제공하는 디바이스 컨텍스트
2. CWnd* pWnd - 대상이 되는 다이알로그에 올려진 컨트롤 윈도우
3. UINT nCtlColor -  대상이 되는 컨트롤의 구분 타입.

3번의 대상이 되는 컨트롤의 구분 타입은 다음과 같습니다.
이는 winuser.h에 선언되어 있구요.
#define CTLCOLOR_MSGBOX         0
#define CTLCOLOR_EDIT                1
#define CTLCOLOR_LISTBOX          2
#define CTLCOLOR_BTN                 3
#define CTLCOLOR_DLG                 4
#define CTLCOLOR_SCROLLBAR     5
#define CTLCOLOR_STATIC             6

나는 에디트 컨트롤을 대상으로 작업을 하므로 CTLCOLOR_EDIT 를 사용할 것입니다.
그럼 다음과 같은 코드를 추가해 봅니다.

HBRUSH CSssDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
   
    switch(nCtlColor)
    {
    case CTLCOLOR_EDIT:
        {
           if(pWnd->GetDlgCtrlID() == IDC_EDIT9)
                pDC->SetTextColor(RGB(255, 0, 0));
           else if(pWnd->GetDlgCtrlID() == IDC_EDIT14)
                pDC->SetBkColor(RGB(0, 255, 0));
        }
    }
    // TODO: Return a different brush if the default is not desired
    return hbr;
}

의미를 해석해보면 IDC_EDIT9번을 가진 에디트 컨트롤의 글자색을 빨간색 RGB(255,0,0))으로
IDC_EDIT14번을 가진 에디트 컨트롤의 글자 배경색을 녹색 RGB(0,255,0)으로 바꿔라 입니다.

여러개를 한꺼번에 바꾸거나, 그런건 머 위의 코드를 약간 수정하면 될테니 그건 손수 한번 해보세요.

다음에는 에디트 컨트롤의 폰트를 한번 변경해 보도록 하겠습니다.

13.zip
0.03MB

+ Recent posts