WPF玻璃窗后退?

时间:2009-10-03 09:52:49

标签: wpf aero aero-glass

创建Glass窗口就像在WPF中调用DwmExtendFrameIntoClientArea一样简单,但这只是技巧的一半。如果您禁用aero,并获得疼痛开始的类似XP的皮肤:

在XP(或禁用的aero)中,您必须调用DrawThemeBackground以获得“透明感”,Internet Explorer也会在顶部执行此操作,尝试禁用aero并查看。

我已经制作了只是的应用程序,fallback gracefully when Aero is disabled in Windows.Forms.

问题:但是在WPF中这样做是不同的,OnRender(在avalon中的OnPaint等价)给你DrawingContext,用DrawThemeBackground WINAPI调用如何绘制它?

1 个答案:

答案 0 :(得分:2)

好吧,DrawThemeBackground需要一个设备上下文句柄,这是一个纯粹的Win32概念...... WPF不使用设备上下文或窗口句柄。但是,WPF应用程序托管在Win32窗口中,您可以检索该窗口的HWND:

using System.Windows.Interop;

...

IntPtr hwnd = new WindowInteropHelper(this).Handle;

然后,您可以使用GetDC API获取此窗口的DC:

[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hWnd);

...

IntPtr hdc = GetDC(hwnd);

然后,您应该可以将DrawThemeBackground与此DC一起使用。

请注意,这完全是理论上的,我没有测试过它......