トップ回答者
Aero Glassのように半透明なウィンドウの背景をぼかしたい

質問
-
Aeroのように半透明なウィンドウの背景をぼかしたいのですが、どのようにすればよいでしょうか?
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowStyle="None" Title="MainWindow" Height="350" Width="525" AllowsTransparency="True" Background="Transparent"> <Grid Background="#50000000"> <Grid.Effect> <BlurEffect Radius="10" KernelType="Gaussian" /> </Grid.Effect> </Grid> </Window>
とすれば、半透明なウィンドウを作ることはできますが、Aero Glassのように背景をぼかすという表現にはなりません。
XP、(Aeroが無効な)Vista/7、(AeroGlassが廃止されるらしい)Windows8でもできるようにしたいのですが、可能でしょうか?
回答
-
テーマを変更しても変わらない事が狙いなので、DWMに依存しない方法がないものかと思いました。
非常に困難か、無理じゃないでしょうか。
DWM が無効な場合、一つのスクリーンをすべてのプログラムが共有して描画するような形になります。(参考)
下にあるウィンドウの描画を一度普通にさせて、その描画内容を取得し、ぼやかして、自分のウィンドウ描画と混ぜるわけですよね。難しいか、できたとしてもパフォーマンスの低下を招くのがオチだと思っています。(他のウィンドウに描画させ、取得する部分は API 使いまくりになりそう)
OS が用意している仕組みはレイヤードウィンドウのように「ぼかす」がない処理だけです。- 編集済み AzuleanMVP 2012年6月3日 2:05
- 回答の候補に設定 山本春海 2012年6月19日 6:10
- 回答としてマーク 山本春海 2012年6月29日 9:06
すべての返信
-
透明度はデスクトップのテーマで変更できます。ハードコーディングで透明度を決めてしまうとテーマを変更している環境では逆に変になってしまうと思います。
Windows API Code Pack for Microsoft .NET FrameworkのGlassWindowクラスを使用すればデスクトップテーマにそったウィンドウが作成できるかなとか。(よくわかってない。)
# ちなみにWin8でAero Glassの廃止のニュースもありましたが現状では何もないのであのニュースはなんだったのやら。
-
テーマを変更しても変わらない事が狙いなので、DWMに依存しない方法がないものかと思いました。
非常に困難か、無理じゃないでしょうか。
DWM が無効な場合、一つのスクリーンをすべてのプログラムが共有して描画するような形になります。(参考)
下にあるウィンドウの描画を一度普通にさせて、その描画内容を取得し、ぼやかして、自分のウィンドウ描画と混ぜるわけですよね。難しいか、できたとしてもパフォーマンスの低下を招くのがオチだと思っています。(他のウィンドウに描画させ、取得する部分は API 使いまくりになりそう)
OS が用意している仕組みはレイヤードウィンドウのように「ぼかす」がない処理だけです。- 編集済み AzuleanMVP 2012年6月3日 2:05
- 回答の候補に設定 山本春海 2012年6月19日 6:10
- 回答としてマーク 山本春海 2012年6月29日 9:06
-
こんにちは、VB User1 さん。
フォーラムのご利用ありがとうございます。オペレーターの山本です。
参考になる情報をいただいているように思われましたので、勝手ながら私のほうで一旦回答としてマークさせていただきました。
アドバイスくださったみなさん、情報ありがとうございます。いただいた情報の中で、解決に役立った投稿や、参考になる情報など有効な情報には回答としてマークすることをお願いしています。
今後、同じ問題でこのスレッドを参照される方にも、有効な情報を活用いただけるかと思いますので、ご協力よろしくお願いいたします。
_____________________
日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海