컨텐츠 바로가기

C++ MFC 객체 색상 OnCtlColor를 이용한 변경

http://sukhwalj.egloos.com/5987551



MFC에서 Dialog의 기본 배경색은 회색이므로.. 그리고 다른 컨트롤들도 배경색이 구리다.

바꾸는법

클래스 위저드실행해서 메시지탭에서
WM_CTLCOLOR의 메시지 맵을 추가 한다.
그러면 자동적으로 

 HBRUSH Cxxxxxx::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 가 생성됨.

거기에 코딩..

 HBRUSH Cxxxxxx::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO:  Change any attributes of the DC here
switch(nCtlColor){
case CTLCOLOR_DLG:   /// 다이얼로그 배경색을 white로.
{
        return (HBRUSH)GetStockObject(WHITE_BRUSH);
        break;
}
case CTLCOLOR_BTN :    // 버튼의 배경색을 투명으로...
{
        pDC->SetBkMode(TRANSPARENT);
                  return (HBRUSH)::GetStockObject(NULL_BRUSH);
        }
         case CTLCOLOR_STATIC:
        {
               pDC->SetTextColor(RGB(0,255,255));  // static text 글자색 변경
                 pDC->SetBkMode(TRANSPARENT);   // static text 배경색 투명
                 return (HBRUSH)::GetStockObject(NULL_BRUSH);
        }
}
// TODO:  Return a different brush if the default is not desired
return hbr;
}

 

보면 알겠지만 switch 문으로 구분해서.. 버튼인경우 다이얼로그인경우... 등등을 나눠서 처리

아래 define를 보고 원하는거 갖다 쓰면 됨..

 

 

 

이런식으로 원하는 컨트롤의 색상만 변경할수도 있다.


 if(pWnd->GetDlgCtrlID() == 리소스아이디){ 

pDC->SetTextColor(RGB(0,255,255));

pDC->SetBkMode(TRANSPARENT);

return (HBRUSH)::GetStockObject(NULL_BRUSH);

}

 

 

 

 

 

간혹 라디오버튼, 체크박스등 의 컨트롤은 투명이 적용이 안돼는 경우가 있다.

XP테마의 버그라고 한다.

 

해결 방법은 

#pragma comment(lib, "UxTheme.lib") 를 추가하고, 

 

다이얼로그 초기화(Initdialog)에서 

SetWindowTheme(컨트롤변수.m_hWnd, L"", L""); 

 

를 추가 해준다.

 

 

 

컨틀롤과 브러시는 아래와 같이 정의되어 있습니다.

#define CTLCOLOR_MSGBOX         0
#define CTLCOLOR_EDIT           1
#define CTLCOLOR_LISTBOX        2
#define CTLCOLOR_BTN            3
#define CTLCOLOR_DLG            4
#define CTLCOLOR_SCROLLBAR      5
#define CTLCOLOR_STATIC         6
#define CTLCOLOR_MAX            7


#define WHITE_BRUSH         0
#define LTGRAY_BRUSH        1
#define GRAY_BRUSH          2
#define DKGRAY_BRUSH        3
#define BLACK_BRUSH         4
#define NULL_BRUSH          5
#define HOLLOW_BRUSH        NULL_BRUSH
#define WHITE_PEN           6
#define BLACK_PEN           7
#define NULL_PEN            8
#define OEM_FIXED_FONT      10
#define ANSI_FIXED_FONT     11
#define ANSI_VAR_FONT       12
#define SYSTEM_FONT         13
#define DEVICE_DEFAULT_FONT 14
#define DEFAULT_PALETTE     15
#define SYSTEM_FIXED_FONT   16





출처 : http://phiru.tistory.com/73

출처 : http://uglytree.tistory.com/144


덧글|신고