창(폼)에 특정 색을 투명화 시키는 예입니다.
아래 그림은 처음 폼 이미지 입니다.


다음 이미지는 특정 색을 투명화 시키기 위해 레이블의 배경색을 변경시킨 이미지 입니다.

다음 이미지, 레이블의 배경색을 투명화 시킨 이미지 입니다.  배경색을 투명화시켜서 레이블 영역의 투면화 되어 바탕화면의 이미지가 보이게 됩니다. 다른 윈도우가 아래에 있다면 그 윈도우 내용이 보이게 됩니다. 그리고 투명화 된 부분에서는 이벤트가 발생하지 않습니다.


투명화시에 폼의 캡션바의 색도 투명화시킨 색과 같은 색이 있다면 투명화 됩니다.

아래는 VB6로 구현한 소스입니다.
' 폼에 레이블을 하나 올린다
Option Explicit

Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long ' 윈도우 속성을 얻는다.
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long ' 윈도우 속성을 설정한다.
Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Const LWA_COLORKEY = 1
Private Const GWL_EXSTYLE As Long = -20 ' 확장 윈도우 스타일
Private Const WS_EX_LAYERED As Long = &H80000 ' 윈도우 확장 스타일, 2000 이후 추가된 속성, 레이어드 윈도우를 생성한다.

Private Sub Form_Load()
    Label1.BackColor = &HD7E390
    Call SetWindowLong(Me.hwnd, GWL_EXSTYLE, GetWindowLong(Me.hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED) ' 투명폼을 적용하기 위해, 레이어 스타일 윈도우를 적용시킨다
    SetLayeredWindowAttributes Me.hwnd, Label1.BackColor, 0, LWA_COLORKEY
End Sub

+ Recent posts