보통 텍스트를 쓸때, 배경 색과 텍스트의 배경색이 틀려지면,
이상하게 글자 주변에만 기묘한 색이 되어 배경색과 따로 논다.
즉 글자만 색이 달라야 하는데, 글자를 기준으로 글자 크기만한
사각형이 다른 색이라면 정마리지 보기 싫어지게 된다.

그래서 이를 방지하기 위해 SetBkMode라는 메소드를 이용해,
SetBkMode(TRANSPARENT)  를 호출한다.

그러나 이것을 OnCtrlColor에서 사용하면 기묘한 결과를 얻어 낸다.


HBRUSH CTextCtrl::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
        HBRUSH hbr = CWnd::OnCtlColor(pDC, pWnd, nCtlColor);
        if(pWnd == m_pEdit) {
                pDC->SetBkMode(TRANSPARENT);
                pDC->SetTextColor(m_fontColor);
                return (HBRUSH)m_brush;
        }
        return hbr;
}

위의 내용이 바로 그 내용인데, 이렇게 해도 일단은 원하는 기능은 얻기는 한다.
그러나 문제가 있다. 스크롤이 되거나 새로운 글자가 입력될때, 이전 글자가 지워지지 않고
계속 겹쳐져 그려지는 문제이다. 이는 위의 Mode가 TRANSPARENT 여서 계속 겹쳐져서
그려지는 것 같다.

이를....
pDC->SetBkMode(TRANSPARENT);
    ->
pDC->SetBkColor(m_backColor);

로 변경해 준다.
이렇게 하면 비록 투명은 아니지만 그와 같은 효과를 얻게 된다. 더욱이 이전에 발생한 문제가
해결된다.

이 문제는 글자를 새롭게 입력을 받는 에디트 컨트롤을 child로 잡게 된 경우에 발생하는 문제다.

728x90

+ Recent posts