본문 바로가기

Programming/MFC

[MFC] radio 버튼 배경색 및 텍스트 색상 변경하기 (vs 2019)

VS 2019 기준 MFC 라디오 버튼 배경색과 텍스트 색 변경하는 방법을 알아보겠습니다.

Button 생성

[리소스뷰] -> [Dialog] -> [도구상자]-> [Radio Button] 클릭하여 버튼 생성합니다.

Button의 ID 변경

라디오 버튼의 caption과 ID를 원하는대로 변경합니다.

저는 caption은 ON으로 ID를 IDC_RADIO_ON으로 변경하였습니다.

Radio Button 배경색 및 텍스트 색상 변경

라디오 버튼의 배경과 텍스트 색상을 변경하기위해 메인 dialog에 아래의 구문을 작성합니다.

BOOL CMainDlg::OnInitDialog()
{
    ::SetWindowTheme(GetDlgItem(IDC_RADIO_ON)->GetSafeHwnd(), L"wstr", L"wstr");
    // ...
}

이후 [Ctrl+shift+x]를 눌러서 클래스 마법사를 켭니다.

클래스 마법사에서 메시지란에 ctl을 누르면 WM_CTLCOLOR 메시지 함수가 뜹니다.

해당 메시지 함수는 여러 컨트롤이 그려질 때 나타나는 메시지 입니다.

해당 메시지를 더블클릭하여 OnCtlColor 함수를 추가합니다.

 

이후 라디오 버튼의 배경 색상 및 텍스트 색상을 변경하는 코드를 아래와 같이 작성합니다.

BOOL CMainDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
    // TODO:  여기서 DC의 특성을 변경합니다.
    switch (pWnd->GetDlgCtrlID())
    {
    case IDC_RADIO_ON:                                // 변경할 라디오 버튼의 ID
        pDC->SetTextColor(RGB(255, 255, 255));         // 글자 색 변경
        pDC->SetBkMode(TRANSPARENT);
		
        // 브러쉬를 만드는 변수나 초기화 부분은 클래스 전역변수로 OnInitDialog()에서 초기화 하는 것이 더 좋습니다. 
        CBrush cbr;
        cbr.CreateSolidBrush(RGB(50, 50, 50));         // 배경 색 변경

        hbr = (HBRUSH)cbr;                             // 배경 색 적용
    }
    return hbr;
}

 

이 후 다이얼로그를 실행해봄면 라디오버튼의 배경색과 글자색이 변경된 것을 확인할 수 있습니다. 

 

[Reference]

https://stackoverflow.com/questions/31854015/changing-win32s-radio-button-text-color