본문 바로가기

Programing/Windows

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

bootingWin
bootingWin by reiven 저작자 표시비영리동일조건 변경허락


Static Control 배경을 투명화 시키는 방법을 알아봅시다.

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

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

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

if( pWnd->GetSafeHwnd() == GetDlgItem(컨트롤 ID)->m_hWnd )
{
    pDC->SetBkMode( TRANSPARENT );
    return (HBRUSH) ::GetStockObject( NULL_BRUSH );
}

else if( pWnd->GetSafeHwnd() == GetDlgItem(컨트롤 ID)->m_hWnd )
{
}

 

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

CRect Rect; 
GetDlgItem(컨트롤 ID)->GetWindowRect(&Rect);
ScreenToClient(&Rect);
InvalidateRect(Rect);

SetWindowText( 컨트롤 ID, 출력할 텍스트 );