Excelのウィンドウを不透明にする【ExcelVBA × WindowsAPI】

■SetWindowLongPtr →指定されたウィンドウの属性を変更

画面のウィンドウやオブジェクトを識別する為に この数値(ハンドル)を用いて制御する

■Application.hWndプロパティ → Excelウインドウの最上位レベルのウインドウハンドルを示す整数型(Long)の値を返す

nIndexには-20 新しい拡張ウインドウスタイルを設定 

dwNewLongには524288 レイヤードウィンドウ レイヤーを管理するウィンドウ

■SetLayeredWindowAttributes →レイヤーウインドウの不透明度と透明度のカラーキーを設定

hwnd ウィンドウはどれ? ウインドウハンドルを指定

bAlpha ウィンドウの不透明度は?0~255 0で完全に透明 255で不透明

dwFlags 実行するのはどれ? 2 レイヤード ウィンドウの不透明度を指定 1 透過色を指定

実際に使用したコード

------------------------------------------------

Option Explicit
Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Declare PtrSafe Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As LongPtr, ByVal crKey As Long, ByVal bAlpha As Long, ByVal dwFlags As Long) As Long

Private Sub ScrollBar1_Change()

'ハンドルという変数を整数型で用意
Dim ハンドル As Long

'Excelウインドウのハンドルの値を返す hWndプロパティ
ハンドル = Application.hwnd

'取得したウインドウのスタイルに新しい拡張ウインドウスタイルを設定
SetWindowLongPtr ハンドル, -20, 524288

'透明度を設定
SetLayeredWindowAttributes ハンドル, 0, 255 * 50 / 100, 2

End Sub

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です