MFC2010. 3. 10. 20:07

에디트박스, 리스트박스, Static Text 등 각종 컨트롤의 배경색을 변경하는 방법입니다.

클래스 위저드에서 WM_CTLCOLOR 메세지맵을 추가하고, 아래처럼 코딩합니다.
HBRUSH CSTrakDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
   
    CRect rect;   
    switch(nCtlColor)
    {
    case CTLCOLOR_STATIC:
        pDC->SetBkMode(nBkMode)
        pDC->SetTextColor(RGB(0, 0, 0));            //text color
        pDC->SetBkColor(0xffffff);
        hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
        break;
    }
   
    // TODO: Return a different brush if the default is not desired
    return hbr;
}

pDC->SetBkMode(nBkMode)의 nBkMode 대신 OPAQUE와 TRANSPARENT 중 원하는 값을 넣으세요.

nCtlColor의 종류는 아래와 같습니다.
#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

단, 버튼에는 적용되지 않으니 유의하세요.
Posted by 못생긴나무