2008/01/17
속이 훤히 들여다 보이는 윈도우 만들기 SetLayeredWindowAttributes
속이 훤히 들여다 보이는 윈도우 만들기 SetLayeredWindowAttributes
SetLayeredWindowAttributes는 윈도우를 투명하게 해주거나 특정 색상의 영역을 투명하게 하고 마우스 이벤트를 받지 않도록 할 수 있다.
이 함수를 이용하면 윈도우의 투명정도(Alpha Blending)을 설정할 수 있고, SetWindowRgn을 이용하여 특정 부분이 투명한 윈도우를 만드는 일도 쉽게 할 수 있다. 이 함수는 윈도우 2000 이상에서 사용할 수 있다.
이 함수의 원형은 다음과 같다.
HWND hwnd
레이어 속성을 설정할 윈도우 핸들. 이 윈도우는 WS_EX_LAYERED 속성을 갖고 있어야 한다.
COLORREF crKey
투명 처리를 하여 마우스 이벤트를 받지 않을 색상.
BYTE bAlpha
윈도우의 투명 정도(Alpha Blend 값). 먼저 정의된 색상인 crKey는 이값에 영향을 받지 않음.
DWORD dwFlags
적용 옵션
LWA_COLORKEY 0x00000001
주어진 Color 영역을 투명 처리하고 마우스 이벤트를 받지 않도록 한다.
LWA_ALPHA 0x00000002
지정된 Alpha 값으로 윈도우를 투명하게 만들어 준다.
응용 예
다음은 윈도우에 특정 색상을 입히고 그 색상을 반 투명하게 만들고 나머지 부분에 50% 반투명 하도록 한 코드이다.
예제 코드는 CodeGear 완전 무료 개발툴인 Turbo C++ (C++ Builder 2006 기반)로 작성 되었다.
간단한 테스트 같은 경우 Turbo C++을 이용하는 것이 Visual C++을 이용하는 것보다 편리하다. Visual C++은 무조건 프로젝트를 만들어야 하지만 Turbo C++ 은 그냥 코딩하고 실행하면 된다. 게다가 무료이다. 완전 무료라 했는데 엄밀히 말하면 완전 무료는 아니고 설치 후 CodeGear에서 라이센스 파일을 받으면 100년짜리 라이센스를 준다. 그러니 100년 동안만 무료란 말이다. ^^*
본론으로 들어와서 위 코드를 넣고 수행해 보면 아래와 같은 영상이 나온다. 눈으로 봐서 이해하기 힘들면 예제 프로그램을 실행해 보면 쉽게 이해할 것이다.
예제 프로그램
Original Post : http://neodreamer-dev.tistory.com/39
SetLayeredWindowAttributes는 윈도우를 투명하게 해주거나 특정 색상의 영역을 투명하게 하고 마우스 이벤트를 받지 않도록 할 수 있다.
이 함수를 이용하면 윈도우의 투명정도(Alpha Blending)을 설정할 수 있고, SetWindowRgn을 이용하여 특정 부분이 투명한 윈도우를 만드는 일도 쉽게 할 수 있다. 이 함수는 윈도우 2000 이상에서 사용할 수 있다.
이 함수의 원형은 다음과 같다.
BOOL SetLayeredWindowAttributes(
HWND hwnd,
COLORREF crKey,
BYTE bAlpha,
DWORD dwFlags
);
함수 정보
Minimum DLL Version user32.dll
Header Declared in Winuser.h, include Windows.h
Import library User32.lib
Minimum operating systems Windows 2000
HWND hwnd
레이어 속성을 설정할 윈도우 핸들. 이 윈도우는 WS_EX_LAYERED 속성을 갖고 있어야 한다.
COLORREF crKey
투명 처리를 하여 마우스 이벤트를 받지 않을 색상.
BYTE bAlpha
윈도우의 투명 정도(Alpha Blend 값). 먼저 정의된 색상인 crKey는 이값에 영향을 받지 않음.
DWORD dwFlags
적용 옵션
LWA_COLORKEY 0x00000001
주어진 Color 영역을 투명 처리하고 마우스 이벤트를 받지 않도록 한다.
LWA_ALPHA 0x00000002
지정된 Alpha 값으로 윈도우를 투명하게 만들어 준다.
응용 예
// 윈도우에 WS_EX_LAYERED 속성을 부여한다.
SetWindowLong(m_hWnd, GWL_EXSTYLE,
GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
// 윈도우를 50% 반투명하게 만들기
SetLayeredWindowAttributes(m_hWnd, 0, 128, LWA_ALPHA);
// 윈도우의 파란색을 투명하게 하게 하고 마우스 이벤트 무시하기
SetLayeredWindowAttributes(m_hWnd, RGB(0,0,255), 0, LWA_COLORKEY);
다음은 윈도우에 특정 색상을 입히고 그 색상을 반 투명하게 만들고 나머지 부분에 50% 반투명 하도록 한 코드이다.
this->Color = RGB(1, 1, 1);
SetWindowLong(this->Handle, GWL_EXSTYLE,
GetWindowLong(this->Handle, GWL_EXSTYLE) | WS_EX_LAYERED);
BOOL res = ::SetLayeredWindowAttributes(this->Handle,
RGB(1, 1, 1), 127, LWA_COLORKEY | LWA_ALPHA);
예제 코드는 CodeGear 완전 무료 개발툴인 Turbo C++ (C++ Builder 2006 기반)로 작성 되었다.
간단한 테스트 같은 경우 Turbo C++을 이용하는 것이 Visual C++을 이용하는 것보다 편리하다. Visual C++은 무조건 프로젝트를 만들어야 하지만 Turbo C++ 은 그냥 코딩하고 실행하면 된다. 게다가 무료이다. 완전 무료라 했는데 엄밀히 말하면 완전 무료는 아니고 설치 후 CodeGear에서 라이센스 파일을 받으면 100년짜리 라이센스를 준다. 그러니 100년 동안만 무료란 말이다. ^^*
본론으로 들어와서 위 코드를 넣고 수행해 보면 아래와 같은 영상이 나온다. 눈으로 봐서 이해하기 힘들면 예제 프로그램을 실행해 보면 쉽게 이해할 것이다.
예제 프로그램
Original Post : http://neodreamer-dev.tistory.com/39
Labels:
AlphaBlend
,
CodeGear
,
LayeredWindow
,
SetLayeredWindowAttributes
,
TistoryOldPost
,
Turbo C++
,
마우스이벤트무시
,
반투명윈도우
,
투명윈도우
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment