透明なウィンドウを作成するには

リストボックスの項目を検索してみます。
キーワードは「SetLayeredWindowAttributes」と「WS_EX_LAYEREDウィンドウスタイル」です。

SetLayeredWindowAttributes()関数はWindows2000から追加された関数なので
それ以前のWindowsでは動作しません。

SetLayeredWindowAttributes()関数は拡張ウィンドウスタイル「WS_EX_LAYERED」を持つウィンドウを
指定されたアルファー値または透過色に従ってウィンドウを透明にします。

プログラムでは両方の場合を実行できるようにしてあります。
なおSetLayeredWindowAttributes()関数は256色以下のディスプレイでは透明にはなりません。


ウィンドウ全体を透過した場合

透明色を指定した場合
'ウィンドウに関するデータを取得
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 GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" _
    (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    'nIndexの定数
    Private Const GWL_EXSTYLE = (-20)                   '拡張ウィンドウスタイル
'透明なウィンドウを作る
Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" _
    (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Long, ByVal dwFlags As Long) As Long
    'dwFlagsの定数
    Private Const LWA_COLORKEY = 1                      'crKeyを透明色として使う
    Private Const LWA_ALPHA = 2                         'bAlphaをアルファー値として使う
'拡張ウィンドウ属性
Private Const WS_EX_LAYERED = &H80000                   '透明なウィンドウ属性

'(Windows2000以上) Private Sub Command1_Click() Dim dwStyle As Long '拡張ウィンドウスタイルにWS_EX_LAYEREDを追加する dwStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE) dwStyle = dwStyle Or WS_EX_LAYERED Call SetWindowLong(Me.hWnd, GWL_EXSTYLE, dwStyle) 'ウィンドウ全体を透明にする Call SetLayeredWindowAttributes(Me.hWnd, 0, 150, LWA_ALPHA) End Sub
Private Sub Command2_Click() Dim dwStyle As Long '拡張ウィンドウスタイルにWS_EX_LAYEREDを追加する dwStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE) dwStyle = dwStyle Or WS_EX_LAYERED Call SetWindowLong(Me.hWnd, GWL_EXSTYLE, dwStyle) '透明色を指定して透明にする Call SetLayeredWindowAttributes(Me.hWnd, Me.Frame1.BackColor, 150, LWA_COLORKEY) End Sub
Private Sub Form_Load() Me.Label1.Caption = "透明なウィンドウを作成する" & vbCrLf & _ "(256以下では透明なウィンドウは作成されません)" End Sub
ダウンロード