hirax.net::Keywords::「WS_EX_LAYERED」のブログ



2009-07-15[n年前へ]

エクセルのワークシート・ウィンドウだけを半透明化することができるか? 

 「エクセルで電界シミュレーション」と「ウィンドウ半透明化マクロ」で、エクセルのアプリケーションウィンドウ全体を半透明化するマクロを使ってみた。しかし、やはり、「エクセルのアプリケーションウィンドウ全体を半透明化するのではなくて、エクセルのウィンドウの中で開いている特定のワークシートだけを半透明化したい」と感じるに違いない。

 それなら、「エクセルで電界シミュレーション」と「ウィンドウ半透明化マクロ」で使ったVBAマクロの下記の部分を(もちろんWin32 API 関数は定義した上で)、

mywnd=FindWindow("XLMAIN", 
                 Application.Caption)
(たとえばExcel 2003なら)次のように書き換えてやれば良いように思える。
mywnd=FindWindow("XLMAIN", 
                  Application.Caption)
mywnd=FindWindowEx(mywnd,0,"XLDESK",
                   vbNullString)
mywnd=FindWindowEx(mywnd,0,"EXCEL7",
                    ActiveSheet.Name)

 しかし、これは実際には動かない。なぜなら、半透明化=WS_EX_LAYEREDは「親ウィンドウ」しかサポートしていないからである。たとえば、MSDNのWindow Featuresには、

 Note that WS_EX_LAYERED cannot be used for child windows.
とある。つまり、エクセルのアプリケーション・ウィンドウの孫ウィンドウであるワークシート・ウィンドウだけを半透明化させることは(現状では)できない、ということになる。



■Powered by yagm.net