VC에서 투명이미지을 그리기 위해서는 Bitblt함수를 이용해서 마스크를 먼저 찍는 작업등을 해야하는 번거로움이 있습니다.
하지만 비주얼 스튜디오 2003이상에서는 이 작업을 간단하게 해주는 TransparentBlt 함수가 있습니다.
비주얼 스튜디오 2003이상의 버젼을 사용하면 좋겠지만 꼭 vc 6.0에서 작업을 하실때에는 다음과 같은 방법을 이용하면 편리합니다.
아래 함수를 vc 6.0으로 변경하려면
pDC->TransparentBlt(lpRect->left,lpRect->top,lpRect->right-lpRect->left,lpRect->bottom-lpRect->top,
&dcSrc,0,0,lpRect->right-lpRect->left,lpRect->bottom-lpRect->top,RGB(255,255,255));
아래와 같이 하시면 됩니다.
#pragma comment(lib,"Msimg32.lib")
TransparentBlt(
pDC->GetSafeHdc(), //DC 핸들러
lpRect->left, //비트맵이 그려질 X좌표
lpRect->top, //비트맵이 그려질 Y좌표
lpRect->right-lpRect->left, //출력될 비트맵의 가로 길이
lpRect->bottom-lpRect->top, //출력될 비트맵의 세로 길이
dcSrc.GetSafeHdc(), //비트맵을 미리 그려놓을 DC 핸들
0, //
0, //
lpRect->right-lpRect->left, //
lpRect->bottom-lpRect->top, //
RGB(255,255,255) //투명화 처리할 색 값 RGB()함수를 이용
);
함수 원형은 아래와 같습니다.
BOOL TransparentBlt(
HDC hdcDest, //DC 핸들러
int nXOriginDest, //비트맵이 그려질 X좌표
int nYOriginDest, //비트맵이 그려질 Y좌표
int nWidthDest, //출력될 비트맵의 가로 길이
int hHeightDest, //출력될 비트맵의 세로 길이
HDC hdcSrc, //비트맵을 미리 그려놓을 DC 핸들
int nXOriginSrc, //
int nYOriginSrc, //
int nWidthSrc, //
int nHeightSrc, //
UINT crTransparent //투명화 처리할 색 값 RGB()함수를 이용
);
가끔 써먹을대가 있으면 써먹곤 하다가 오늘 갑자기 필요해져서 사용하게 되었는데 여기에 올리게 되었네요..