none
Tab Control 배경색관련 RRS feed

  • 질문

  • VC2013 으로 Tab Control을 사용하려고 하는데

    배경색이 흰색으로 나오네요.

    배경색을 윈도우 테마색으로 바꾸려고 하는데

    어떻게 하면 가능할까요?

    왜 갈수록 MS는 사용자들이 불편하게 제품을 만들까요?

    2015년 8월 19일 수요일 오전 10:44

답변

  • 탭 컨트롤 배경의 테마색이 흰색이기 때문에 흰색으로 나오는 것이고,

    이것은  테마를 사용하는 모든 애플리케이션에 공통적으로 적용되는 것으로 전혀 이상할게 없습니다.

    하지만 탭 컨트롤 배경의 색상을 다른 색상으로 변경하고자 하신다면 몇가지 방법이 있는데..

    1. 탭 컨트롤을 상속받은 클래스를 만들고 OnEraseBkgnd 에서 원하는 색상을 FillSolidRect 함수로 채워준다.

    이경우에는 탭 컨트롤의 테마 적용을 해제하셔야 동작합니다.

    SetWindowTheme(GetDlgItem(IDC_TAB_XXX)->GetSafeHwnd(), L"", L"");

    2. 탭 컨트롤에 Owner Draw 속성을 주어 직접 그려준다.

    이 방법은 아래 링크 자료를 참고하세요.

    https://support.microsoft.com/en-us/kb/179909

    개인적인 의견으로는 테마의 일관성 유지를 위해 그냥 건드리지 말고 놔두는게 낫다고 봅니다.

    • 답변으로 표시됨 SMPark82 2015년 9월 1일 화요일 오전 2:34
    2015년 8월 20일 목요일 오전 12:55
  • 위 그림에서 보시다시피 탭 컨트롤의 배경이 흰색인 것은 테마에 영향을 받아 system wide 하게 적용된 것입니다.

    그리고 Vertical 속성을 TRUE 로 설정하면 테마에 영향을 받지 않아서 그런것 같구요.

    탭 컨트롤에 테마 적용을 하지 않으시려면 아래 코드만 한 번 실행해주시면 되요.

    SetWindowTheme(GetDlgItem(IDC_TAB_XXX)->GetSafeHwnd(), L"", L"");

    그럼 원하시는대로 회색 배경으로 표시될겁니다.


    • 답변으로 표시됨 SMPark82 2015년 9월 1일 화요일 오전 2:34
    2015년 8월 20일 목요일 오전 5:50

모든 응답

  • 탭 컨트롤 배경의 테마색이 흰색이기 때문에 흰색으로 나오는 것이고,

    이것은  테마를 사용하는 모든 애플리케이션에 공통적으로 적용되는 것으로 전혀 이상할게 없습니다.

    하지만 탭 컨트롤 배경의 색상을 다른 색상으로 변경하고자 하신다면 몇가지 방법이 있는데..

    1. 탭 컨트롤을 상속받은 클래스를 만들고 OnEraseBkgnd 에서 원하는 색상을 FillSolidRect 함수로 채워준다.

    이경우에는 탭 컨트롤의 테마 적용을 해제하셔야 동작합니다.

    SetWindowTheme(GetDlgItem(IDC_TAB_XXX)->GetSafeHwnd(), L"", L"");

    2. 탭 컨트롤에 Owner Draw 속성을 주어 직접 그려준다.

    이 방법은 아래 링크 자료를 참고하세요.

    https://support.microsoft.com/en-us/kb/179909

    개인적인 의견으로는 테마의 일관성 유지를 위해 그냥 건드리지 말고 놔두는게 낫다고 봅니다.

    • 답변으로 표시됨 SMPark82 2015년 9월 1일 화요일 오전 2:34
    2015년 8월 20일 목요일 오전 12:55
  • 다이얼로그의 경우는 바탕화면이 연한 회색으로 표시가 되는데

    이 색깔로 Tab도 표시가 되어야 하는게 아닌지요?

    Tab 속성중 Vertical을 True 로 설정을 하면 배경색도 회색으로 나옵니다.

    잘 이해가 되지 않네요

    2015년 8월 20일 목요일 오전 5:29
  • 위 그림에서 보시다시피 탭 컨트롤의 배경이 흰색인 것은 테마에 영향을 받아 system wide 하게 적용된 것입니다.

    그리고 Vertical 속성을 TRUE 로 설정하면 테마에 영향을 받지 않아서 그런것 같구요.

    탭 컨트롤에 테마 적용을 하지 않으시려면 아래 코드만 한 번 실행해주시면 되요.

    SetWindowTheme(GetDlgItem(IDC_TAB_XXX)->GetSafeHwnd(), L"", L"");

    그럼 원하시는대로 회색 배경으로 표시될겁니다.


    • 답변으로 표시됨 SMPark82 2015년 9월 1일 화요일 오전 2:34
    2015년 8월 20일 목요일 오전 5:50