보통 컨트롤들의 배경을 투명하게 하기 위해서는 다음과 같이 합니다.
Message map에 WM_CTLCOLOR 을 추가 하고,
OnCtrlColor에서 다음 코드를 적용합니다.
if(pWnd->GetDlgCtrlID() == CtrlID)
{
pDC->SetBkMode(TRANSPARENT);
hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
}
CtrlID
는 각 컨트롤의 ID를 넣으시면 됩니다.
그런데 체크박스와 라디오 박스 등은 아래처럼 투명이 적용이 안되더군요.
찾아보니 XP 테마 버그때문이라고 합니다.
해결방법은 다음과 같이 테마를 제거하는것입니다.
Initdialog에서
SetWindowTheme(GetDlgItem(CtrlID)->GetSafeHwnd(), T(""), _T(""));
혹시 SetWindowTheme
를 찾을 수 없다면 #pragma comment(lib, "UxTheme.lib")
를 추가하시면 됩니다.
댓글남기기