보통 컨트롤들의 배경을 투명하게 하기 위해서는 다음과 같이 합니다.

Message map에 WM_CTLCOLOR 을 추가 하고,

OnCtrlColor에서 다음 코드를 적용합니다.

if(pWnd->GetDlgCtrlID() == CtrlID)
{
  pDC->SetBkMode(TRANSPARENT);
  hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
}

CtrlID는 각 컨트롤의 ID를 넣으시면 됩니다.

그런데 체크박스와 라디오 박스 등은 아래처럼 투명이 적용이 안되더군요.

Dialog

찾아보니 XP 테마 버그때문이라고 합니다.

해결방법은 다음과 같이 테마를 제거하는것입니다.

Initdialog에서

SetWindowTheme(GetDlgItem(CtrlID)->GetSafeHwnd(), T(""), _T(""));

혹시 SetWindowTheme를 찾을 수 없다면 #pragma comment(lib, "UxTheme.lib") 를 추가하시면 됩니다.

Dialog

댓글남기기