ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Win32API - 투명윈도우 만들기 (SetLayerdWindowAttributes)
    Programming/WINAPI 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

    소스 및 예제실행파일

    'Programming > WINAPI' 카테고리의 다른 글

    RegOpenKeyEx 사용방법  (0) 2007.12.28
    WinExec는 비스타에서는 치명적...  (0) 2007.12.26
    자기자신을 삭제하는 실행파일 만들기  (1) 2007.12.04
Designed by Tistory.