본문 바로가기

Programming/MFC

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

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

Button 생성

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

Button 변수 추가

[우클릭] -> [변수 추가]를 클릭하여 색상을 변경하고 싶은 버튼의 변수를 추가합니다.

 

 

변수를 추가할때 이름에는 버튼의 변수명을, 변수 형식에는 기본으로 설정되어 있는

CButton를 CMFCButton으로 변경해주세요.

 

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

버튼의 배경색과 텍스트를 변경하기 위해 CMain.cpp에서 아래 내용을 주석처리 합니다.

이렇게 하면 사용자 정의 MFC 테마를 비활성화 할 수 있습니다. 

// *.cpp  
// MFC 컨트롤의 테마를 사용하기 위해 "Windows 원형" 비주얼 관리자 활성화
// CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

 

이제 변수명을 사용하여 배경색 및 텍스트 색상을 변경합니다.
아래 코드를 OnInitDialog()에 추가하면 텍스트 및 배경색이 변경된 것을 확인할 수 있습니다.

// *.h  
CMFCButton m_btn_resize;

// *.cpp  
BOOL CMainDlg::OnInitDialog()  
{  
    const COLORREF color_text = RGB(255, 255, 255);
    const COLORREF color_background_btn = RGB(30, 30, 30);

    m_btn_resize.EnableWindowsTheming(FALSE);
    m_btn_resize.SetFaceColor(color_background_btn);
    m_btn_resize.SetTextColor(color_text);
}  

 

그런데 변경된 버튼 모양이 못생긴 3d 테두리를 가진 것을 확인할 수 있습니다.
못생긴 3d 테두리를 없애는 코드는 아래 두줄을 OnInitDialog()에 더 추가하면 됩니다.

// *.h  
CMFCButton m_btn_resize;

// *.cpp  
BOOL CMainDlg::OnInitDialog()  
{  
    const COLORREF color_text = RGB(255, 255, 255);
    const COLORREF color_background_btn = RGB(30, 30, 30);

    m_btn_resize.EnableWindowsTheming(FALSE);
    m_btn_resize.m_nFlatStyle = CMFCButton::BUTTONSTYLE_FLAT;
    m_btn_resize.m_bTransparent = false;
    m_btn_resize.SetFaceColor(color_background_btn);
    m_btn_resize.SetTextColor(color_text);
}  

 

[Reference]

https://stackoverflow.com/questions/27204469/mfc-vc-cmfcbuttonsetfacecolor-does-not-change-backgroundface-color