创建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调用如何绘制它?
答案 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一起使用。
请注意,这完全是理论上的,我没有测试过它......