Win32API - 투명윈도우 만들기 (SetLayerdWindowAttributes)
win32api 중에 윈도우의 속성을 투명하게 해주는 함수가 있습니다.
그 함수이름은 SetLayerdWindowAttributes로 user32.dll에 포함되어 있습니다.
근데 이 함수는 명시적으로 호출을 해줘야하는 관계로 좀 복잡한 단계를 거쳐야지 사용할 수가 있다.
그래서 클래스로 만들었습니다..
사용법은
CJKWinGdi::SetTransparentWindow(hWnd, 80, RGB(255,0,0);
또는
CJKWinGdi win;
win.SetTransparentWindow(hWnd, 70);
static으로 선언되었기때문에 따로 클래스를 선언하지 않으셔도 됩니다.
첫번째인자는 투명처리할 윈도우의 핸들
두번째인자는 투명도( 0 완전투명 ~ 100 불투명)
세번째인자는 투명하게 처리할 색상입니다. (투명처리할 색상이 있는 경우에만 설정하시면 됩니다.)
_____________________________________________________________________________________________________
#ifndef WS_EX_LAYERED
#define WS_EX_LAYERED 0x00080000
#define LWA_COLORKEY 0x0000001
#define LWA_ALPHA 0x0000002
#endif
typedef BOOL (WINAPI *lpSLWA)(HWND hWnd, COLORREF cr, BYTE bAlpha, DWORD dwFlags);
class CJKWinGdi
{
public:
CJKWinGdi(void){}
~CJKWinGdi(void){}
static bool SetTransparentWindow(HWND hTransWindow, int transPercent,DWORD *color=NULL)
{
HMODULE hUser32 = GetModuleHandle(_T("USER32.DLL"));
if(hUser32 != NULL)
{
lpSLWA pSetLayeredWindowAttributes = (lpSLWA)GetProcAddress(hUser32,"SetLayeredWindowAttributes");
if(pSetLayeredWindowAttributes != NULL)
{
int wndStyle = GetWindowLong(hTransWindow,GWL_EXSTYLE);
if(!(wndStyle & WS_EX_LAYERED))
SetWindowLong(hTransWindow,GWL_EXSTYLE,wndStyle|WS_EX_LAYERED);
if(color != NULL)
pSetLayeredWindowAttributes(hTransWindow,*color,(255*transPercent)/100,LWA_ALPHA|LWA_COLORKEY);
else pSetLayeredWindowAttributes(hTransWindow,0,(255*transPercent)/100,LWA_ALPHA);
return true;
}
}
return false;
}
};
_____________________________________________________________________________________________________
샘플프로그램은 MFC로 만들었습니다.
슬라이더를 통해 투명도를 바꿔줍니다.
소스 및 예제실행파일