본문 바로가기

Windows/MFC

컨트롤 배경색 변경하기 (SetTextColor,SetBkMode)

WIN16에서 nCtlColor를 이용해서 Control의 종류를 구별하던 것과 달리, WIN32에서는 WM_CTLCOLOR메시지가 WM_CTLCOLORBTN, WM_CTLCOLORDLG 등과 같은 여러 개의 별도의 메시지로 만들어졌고, 사용법은 같다.

그리고, Control Class에 WM_CTLCOLOR처리부분을 넣기 위해서, ON_WM_CTLCOLOR_REFLECT() 매크로(2.6.x 참조)를 이용한다. 우선, 메시지 처리 매크로를 설치하기 위해서 Class Wizard를 사용하든지, 아니면 직접 작성해 주든지 한다.(2.6.1 참조) 이때, Class Wizard에서 "="가 붙어 있는 메시지를 선택해야 한다. 즉, WM_CTLCOLOR를 넣어 주기 위해서는 "=WM_CTLCOLOR"를 선택하면 ON_WM_CTLCOLOR_REFLECT()가 들어 간다. 하지만, 이 "=WM_CTLCOLOR"는 CButton, CEdit등의 클래스에서만 나타나고, 여기서 상속 받는 클래스에서는 나타나지 않았다. 그래서, 직접 작성해 주어야 할 경우도 많을 것이다.

다음과 같이 추가하면 된다.
//매시지 맵에서...

[code]
ON_WM_CTLCOLOR_REFLECT()

HBRUSH CMyControl::CtlColor(CDC* pDC, UINT nCtlColor)
{
    //문자색을 바꾸고 싶을 때...
    pDC->SetTextColor(RGB(192, 192, 192));
    pDC->SetBkMode(TRANSPARENT);

    return (HBRUSH)m_hBrush;
}
[/code]