728x90

폼의 배경을 투명하게 만드는 코드입니다. 투명하게 만드는 코드라고는 하지만

실제적으론 투명하게 되는 것이 아니고 폼에 의해 가려진 윈도우의 배경을 폼의

배경화면으로 살짝 옮기는 것입니다. 테스트 하실때 일단 폼을 투명하게 하고

폼상단의 바를 클릭하여 드래그를 해보면 알수 있을 것입니다.


1. 모듈에 다음과 같은 API Function을 선언합니다


Public Const GWL_EXSTYLE = (-20)

Public Const WS_EX_NOTRANSPARENT = &H0&

Public Const WS_EX_TRANSPARENT = &H20&

Public Const SWP_FRAMECHANGED = &H20

Public Const SWP_NOMOVE = &H2

Public Const SWP_NOSIZE = &H1

Public Const SWP_SHOWME = SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE

Public Const HWND_NOTOPMOST = -2


Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _

       (ByVal hwnd As Long, _

        ByVal nIndex As Long, _

        ByVal dwNewLong As Long) As Long


Declare Function SetWindowPos Lib "user32" _

       (ByVal hwnd As Long, _

        ByVal hWndInsertAfter As Long, _

        ByVal x As Long, _

        ByVal y As Long, _

        ByVal cx As Long, _

        ByVal cy As Long, _

        ByVal wFlags As Long) As Long


2. 폼을 하나 추가시킨후 폼에 두개의 CommandButton 을 올려놓습니다.

   그리고 각각의 CommandButton 에 다음과 같이 코딩하십시요.


' 폼을 투명하게 만든다

Private Sub Command1_Click()

    SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_TRANSPARENT

    SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0&, 0&, 0&, 0&, SWP_SHOWME

End Sub


' 폼을 원래대로 되돌린다

Private Sub Command1_Click()

    SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_NOTRANSPARENT

    SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0&, 0&, 0&, 0&, SWP_SHOWME

    Me.Refresh

End Sub


3. 실행을 한후 CommandButton1 을 클릭하게 되면 폼이 투명하게 변하고

   CommandButton2 를 클릭하게 원래대로 되돌아 옵니다.

   폼을 투명하게 한후 폼상단의 바를 클릭하여 드래그 해보세요.

   그러면 위에서 이야기한 내용을 알게 될것입니다.

+ Recent posts