DWM(Aero Glass)の透過関係API

気分転換にファイラの背景を透過させようとしてみたけど結局断念。

実験して分かったこと。

APIでトップレベルウィンドウ以外を指定できない。DWMの管理単位ということか。

・DwmExtendFrameIntoClientArea()はDwmEnableBlurBehindWindow()の機能を制限したもの、では全くない。

・GDIによる描画では基本的にアルファ値がうまくない。

・DwmEnableBlurBehindWindow()で指定できるリージョンは「ぼやけるかどうか」。

・DwmEnableBlurBehindWindow()を使うととにかくウィンドウ全体が透過してしまう。

・DWMのAPIを使わない状態だとトップレベルウィンドウのクライアント領域は(GDIで描こうが)透過しないようになっている。

・DwmExtendFrameIntoClientArea()はこの「透過しない保護領域」の大きさを変更できる。DwmEnableBlurBehindWindow()はそういう保護が全くなくなってしまう。ウィンドウ全域をアルファ値が指定できる方法で描画する必要が出てくる。

・黒い文字が透けてしまうとよく言われるが、黒だけが透けているわけではない。白や明るい色は裏に黒いものがあっても明るいままなので気づきにくいだけ。カラーキーとは違う。

・上にメニューバーと下にステータスバーがあるウィンドウではDwmExtendFrameIntoClientArea()は「使いどころがない」

WTLのCAeroControlImplで保護できるのは指定したウィンドウだけで、子ウィンドウまでは無理なのかな(WS_CLIPCHILDRENとかそういうあたりの理解が不足しているのでこれ以上は何とも…)

参考URL:

http://home.att.ne.jp/banana/akatsuki/doc/atlwtl2/dwm01/index.html

http://d.hatena.ne.jp/NyaRuRu/20060628

http://msdn.microsoft.com/ja-jp/magazine/cc163435.aspx