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 |