본문 바로가기

# IT, Computer Science/MFC, API

[MFC]Static Control 배경 투명화 및 글자 겹침 해결 방법

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Static Control 배경을 투명화 시키는 방법을 알아봅시다.

윈도우에 WM_CTLCOLOR 메세지 처리함수(OnCtlColor)를 만들고 아래와 같이 입력하면 됩니다.
1.pDC->SetBkMode( TRANSPARENT );
2.return (HBRUSH) ::GetStockObject( NULL_BRUSH );

위와 같이 했을때, 배경 투명화가 안되는 경우는 리소스 뷰의 컨트롤 속성에서
Transparent 속성을 True로 해주면 투명화가 적용되는 걸 볼 수 있습니다.

위에 코드에서 원하는 컨트롤만 배경 투명화를 하고 싶을때는, 아래와 같이 해주면 됩니다.

01.if( pWnd->GetSafeHwnd() == GetDlgItem(컨트롤 ID)->m_hWnd )
02.{
03.pDC->SetBkMode( TRANSPARENT );
04.return (HBRUSH) ::GetStockObject( NULL_BRUSH );
05.}
06. 
07.else if( pWnd->GetSafeHwnd() == GetDlgItem(컨트롤 ID)->m_hWnd )
08.{
09.}

 

Static Control을 투명화 시키고, SetWindowText로 글씨를 출력하면 글자의 겹침 현상이 일어나는데
이럴때는 SetWindowText로 글씨를 출력하기 전에 다음의 코드를 입력하여, Control의 영역을
무효화 시킨다음에 하시면 글씨를 출력하시면 됩니다.

1.CRect Rect; 
2.GetDlgItem(컨트롤 ID)->GetWindowRect(&Rect);
3.ScreenToClient(&Rect);
4.InvalidateRect(Rect);
5. 
6.SetWindowText( 컨트롤 ID, 출력할 텍스트 );