Programming/WINAPI

Win32API - 투명윈도우 만들기 (SetLayerdWindowAttributes)

smok95 2007. 11. 27. 21:36
반응형

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로 만들었습니다.
슬라이더를 통해 투명도를 바꿔줍니다.

invalid-file

소스 및 예제실행파일

반응형