'투명윈도우'에 해당되는 글 1건

  1. 2007.09.13 윈도우를 투명하게 만들기 Win2000이상 1

윈도우를 투명하게 만들기 Win2000이상

개발 2007. 9. 13. 13:53

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

가끔 윈도우를 투명하게 하고 싶을때가 있는데, 이렇게 윈도우 전체를 투명하게 하는 방법이 있다. 이 방법은 윈도우가 WS_CHILD 속성을 가지고 있을 경우에는 효과가 나타나지 않는다. 즉 어떤 윈도우의 자식인 이부분의 윈도우를 투명하게는 못한다. 윈도우위 하위 윈도우를 투명하게 할때는 직접 그려주는 방법밖에는 없는듯 한다. WIN32 로는 AlphaBlend 함수를 이용하면 되고, GDI+ 를 이용하면 더 간단하게 투명하게 그릴수가 있다.

아래는 간단하게 윈도우 전체를 투명하게 하는 방법이다. SetLayeredWindowAttributes 함수를 이용해서 동작하는 간단한 효과이다.

BOOL SetWindowTransparent(HWND hWnd, BYTE nAlpha)
{
 if( FALSE == ::IsWindow(hWnd))
  return FALSE;

#define LWA_ALPHA 0x00000002


 // 투명윈도우를 위한 LayeredWindow 설정
 long oldWinStyle = GetWindowLong(hWnd, GWL_STYLE);
 ::SetWindowLong(hWnd, GWL_STYLE,  oldWinStyle & WS_POPUPWINDOW & ~WS_BORDER );

 LONG style = ::GetWindowLong(hWnd, GWL_EXSTYLE);
 if(!(style & 0x00080000))
 {
  ::SetWindowLong(hWnd, GWL_EXSTYLE, style | 0x00080000);
 }

 typedef BOOL (WINAPI *SLWA)(HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
 SLWA pSetLayeredWindowAttributes = NULL;
 HINSTANCE hUSER32 = LoadLibrary("USER32.DLL");
 pSetLayeredWindowAttributes=(SLWA)GetProcAddress(hUSER32,"SetLayeredWindowAttributes");
 BYTE chAlpha = nAlpha;
 pSetLayeredWindowAttributes(hWnd, NULL, chAlpha, LWA_ALPHA);
 FreeLibrary(hUSER32);

 return TRUE;
}



: