2019년 5월 19일 일요일

MFC C++ Note

특정 Cotrol 의 색을 변경하고 싶을 때
1. Dialog 의 Window Message 중 WM_CTLCOLOR 을 Enable 한다.
2. OnCtlColor 함수가 자동으로 생긴다.
3. OnCtlColor 함수는 Control이 보여주는 이벤트가 생길 때(Test 를 쓰거나 등) 불리게 된다. (참조: Link)
4. OnCtlColor 함수를 적어준다. (참조: Link)
5. 내가 원하는 특정 Control 만을 변경시키고 싶으면 각 case 안 해당 코드에 if 를 넣어주면 된다.



No 4
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;
}