3

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

在 XP(或禁用 aero)中,您必须调用 DrawThemeBackground 才能获得“透明感”,Internet Explorer 在其顶部也这样做,尝试禁用 aero 并查看它。

我已经编写了执行此操作的应用程序,当Windows.Forms 中禁用 Aero 时优雅地回退。

问题:但是在 WPF 中执行它是不同的,它为您提供 DrawingContext 的 OnRender(在 avalon 中等效于 OnPaint),如何使用 DrawThemeBackground WINAPI 调用来绘制它?

4

1 回答 1

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。

请注意,这都是纯粹的理论,我没有测试它......

于 2009-10-04T22:36:18.413 回答