윈도우를 투명하게 만들기 [Bottom] [Top]

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

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

Bitmap 모양 그대로 투명 윈도우 만들기 (MFC) [Bottom] [Top]

이 방법은 전체 윈도우의 알파값을 조정하는 투명윈도우가 아니라, 윈도우 모양 자체를 자기 마음대로 만드는 방법입니다. 참고로 이 상태에서 resize 하면 상당한 부담이 가니 자제 하시는게 쾌적한 프로그래밍을 위해 좋습니다.

어떤 bitmap 으로든 윈도우를 만들었다면 특정색(투명화시킬 부분색)을 없애주면 됩니다. 만약 특정부위에 투명화 시킬 색이 있다면 그 부분만 검사해서 투명화 시켜주면 빠른 투명화가 가능합니다. 다음 코드는 코드구루에서 받은 어떤 소스를 수정한 것입니다.

먼저 멤버변수로 BOOL bRun = TRUE; 을 만들어주시고, dialog에 원하는 bitmap 을 입힙니다. 그리고, 다음 코드를 OnPaint 맨뒤에 넣어주세요.

만약 resize 를 해야하는 윈도우라면, OnSize( UINT nType, int cx, int cy ) 안에

해주면 다시 검사후 투명화 시킵니다.

Bitmap 을 이용한 투명윈도우 만들기 [Bottom] [Top]

이전 소스를 찾아보면 비슷한게 있습니다. 그러나 이것과 그것의 차이는 USER32.DLL 모듈의 함수를 사용함으로 성능이 월등이 좋다는 겁니다.

샘플은 코드 프로젝트의 CDialogSK_demo 입니다.

초간단 투명윈도우 (win2k 이상) [Bottom] [Top]

m_slider 는 Slider Control 변수.


CategoryCpp CategoryWin32

투명 윈도우 프로그래밍하기 (last edited 2008-06-21 11:04:25 by viper)