gpt4 book ai didi

WPF 玻璃窗口后备?

转载 作者:行者123 更新时间:2023-12-02 14:17:42 25 4
gpt4 key购买 nike

创建 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 调用来绘制它?

最佳答案

嗯,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 结合使用。

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

关于WPF 玻璃窗口后备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1513371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com