WPFとレイヤードウィンドウ

WPFでレイヤードウィンドウ(Layered Windows)を有効にする方法をメモ。
非矩形ウィンドウの作り方ともいう。

レイヤードウィンドウを有効にするには、以下の3つのプロパティを設定。

AllowsTransparency=True
WindowStyle=None
Background=Transparent

でも、この方法だとレイヤードウィンドウでサポートされているPerPixelαブレンドの機能が使えないので何か損してる気分。
そこで、HwndSourceParameters.UsesPerPixelOpacityをtrueにするとPerPixelαブレンドが有効に。
でも、この方法はHwndSourceを作るところから始めないといけないので激しくメンドクサイ...
.NET Framework 3.5とかで、WindowsクラスにPerPixelOpacityを有効にするプロパティが欲しいなぁ。

あと、.NET Framework 3.5以上だと、Windows XPでもレイヤードウィンドウのハードウェアアクセラレーションがサポートされる模様。(Windows Vistaでは、.NET Framework 3.0でハードウェアによるアクセラレーションを行う)

Performance
- Fixed animation glitching issues.
- Layered windows are now hardware accelerated.
- Many other fixes to improve cold start, data binding, etc.

Tim Sneath : What's New in WPF 3.5? Here's Fifteen Cool Features...

そういえば、.NET Framework 3.5はLINQとかが目立ちますが、何気にWPFにも素晴らしい機能追加があったりで嬉しい限り。UIElement3DとかViewport2DVisual3Dとか。

参考:

Window.AllowsTransparency, XamlDebuggingInformation, WPF
http://blogs.msdn.com/hiroyuk/archive/2006/08/25/720963.aspx

What’s new in WPF 3.5
http://blogs.msdn.com/wpf3d/archive/2007/07/30/what-s-new-in-wpf-3-5.aspx