개발/MFC

MFC 에디트 컨트롤 색상

FA1976 2017. 4. 21. 13:38

visual studio 에서 에디트 컨트롤 색상을 변경하기 위해서는 브러쉬를 사용해야한다.


1. 헤더파일에 브러쉬와 컬러를 사용하겠다고 변수를 선언해야 한다.


CBrush m_backBrush;

COLORREF m_color; 


2. 그리고 나서 초기화 함수, 다이얼로그 기반인 경우엔 OninitDialog() 여기서 해주면 되고. SDI나 MDI 기반은 초기화 함수를 찾아 적당히 아래 코드를 넣어준다


m_color = RGB(255,255,255);

m_backBrush.CreateSolidBrush(m_color); 

위코드는 색상을 흰색으로 하고 브러시를 하나 생성한뒤에 브러시 색상을 흰색으로 설정한 것이다.


2-1. create를 했으니 반드시 destroy를 해야 메모리 누수가 안생긴다. 따라서 OnClose() 나 파괴자 함수에 아래 코드를 삽입한다.

m_backBrush.DeleteObject(); 


3. OnCtlColor 함수에서 배경색을 바꾸길 원하는 컨트롤에 코드를 추가 한다. 각각의 컨트롤마다 deleteobject/ 색상 재지정/  다시 생성을 반복해서 

적용하면 된다.

HBRUSH CPCANBasicExampleDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);


// TODO:  여기서 DC의 특성을 변경합니다.

switch(nCtlColor)

{

case CTLCOLOR_STATIC:

{

if(pWnd->GetDlgCtrlID() == IDC_EDIT_CRC32)

{

pDC->SetBkColor(RGB(0, 255, 0));


m_backBrush.DeleteObject();

m_color = RGB(0,255,0);

m_backBrush.CreateSolidBrush(m_color);

hbr = m_backBrush;

}

else if (pWnd->GetDlgCtrlID() == IDC_EDIT_VERSION)

{

pDC->SetBkColor(RGB(255, 255, 0));


m_backBrush.DeleteObject();

m_color = RGB(255,255,0);

m_backBrush.CreateSolidBrush(m_color);

hbr = m_backBrush;

}

else if (pWnd->GetDlgCtrlID() == IDC_EDIT_MARKER)

{

pDC->SetBkColor(RGB(255, 255, 0));


m_backBrush.DeleteObject();

m_color = RGB(255,255,0);

m_backBrush.CreateSolidBrush(m_color);

hbr = m_backBrush;

}

else

{

pDC->SetTextColor(RGB(0,0,0));  // static text 글자색 변경

pDC->SetBkMode(TRANSPARENT);   // static text 배경색 투명

return (HBRUSH)GetStockObject(WHITE_BRUSH);

}

}


break;


        return hbr;

      }

}


'개발 > MFC' 카테고리의 다른 글

[스크랩]실시간 그래프  (1) 2017.06.20
Warning C4996  (0) 2017.04.28
MFC 타이틀바 없앤뒤 이동하기  (0) 2017.04.28
MFC 타이틀바 없애기  (0) 2017.04.28
MFC 테두리 없애기  (0) 2017.04.28
MFC 그룹박스 테두리 색상 적용  (0) 2017.04.28
MFC 다이얼로그 접기 펴기  (0) 2017.04.24
MFC 윈도우 스타일 적용  (0) 2017.04.21