C & C++/MFC 컨트롤
Static Control 의 배경을 투명하게 만들기
izen8
2011. 10. 25. 16:17
체크박스를 투명하게 하기 위해서는 OnCtrlColor 을 재정의해서 사용하면 된다.
HBRUSH CTest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 여기서 DC의 특성을 변경합니다.
int nRet = pWnd->GetDlgCtrlID();
if (nRet == IDC_CHECK_TIME_LIMIT)
{
pDC->SetBkMode(TRANSPARENT);
hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
}
// TODO: 기본값이 적당하지 않으면 다른 브러시를 반환합니다.
return hbr;
}
하지만 이렇게 하게 되면, Windows XP 에서 테마를 사용한 PC 에서는 위와 같이 체크박스가 검게 변하는데
이를 해결하기 위해선SetWindowTheme( m_ctrlCheckTime, L"", L"");을 Dialog 의 OnInitDialog 부분에 추가시켜준다.
SetWindowTheme 를 사용하기 위해서는 프로젝트 속성에서 Linker Input 부분에 UxTheme.lib 라이브러리를 추가