본문 바로가기
프로그래밍/MFC (C++)

MFC ] 컨트롤 색상 변경하기

by eteo 2023. 12. 14.

 

 

 

WM_CTLCOLOR 메시지는 컨트롤이 처음 생성될 때 또는 컨트롤이 다시 그려져야할 필요가 있을 때 컨트롤의 색상을 결정하기 위한 메시지 이다. 

 

이 메시지의 핸들러를 등록하여 컨트롤의 색상을 처리할 수 있다. 파라미터는 다음과 같다.

 

  • pDC : 윈도우에서 그리기 작업에 필요한 모든 정보를 가지고 있는 디바이스 컨텍스트 구조체 포인터
  • pWnd : 화면에 그려질 대상 컨트롤에 대한 포인터
  • nCtlColor : 컨트롤의 종류에 대한 정수값. 예를들어 에디트 컨트롤이라면 CTLCOLOR_EDIT이고 해당 컨트롤이 읽기 전용이라면 CTLCOLOR_STATIC이 된다.

 

위 파라미터를 활용하여 특정 컨트롤에 대한 색상 처리를 수행하고 변경된 색상을 나타내는 HBRUSH를 반환하면 된다. 반환된 브러시는 실제 해당 컨트롤을 그릴 때 사용된다.

 

 

HBRUSH CRwrDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO:  여기서 DC의 특성을 변경합니다.
    
    // 컨트롤의 ID가 IDC_EDIT1이고 STATIC인 경우 배경색을 흰색으로 변경
    
    if (pWnd->GetDlgCtrlID() == IDC_EDIT1 && nCtlColor == CTLCOLOR_STATIC)
    {
        pDC->SetBkColor(RGB(255, 255, 255));
        hbr = CreateSolidBrush(RGB(255, 255, 255));
    }
    // TODO:  기본값이 적당하지 않으면 다른 브러시를 반환합니다.
    return hbr;
}