WPF Стеклянный запасной вариант?

Создать стеклянное окно так же просто, как вызвать DwmExtendFrameIntoClientArea в WPF, но это только половина дела. Если вы отключите Aero и получите XP-подобный скин, то там, где начинается боль:

В XP (или отключенном aero) вы должны вызывать DrawThemeBackground, чтобы получить "прозрачное ощущение", Internet Explorer делает это тоже наверху, попробуйте отключить aero и посмотрите это.

Я подготовил приложение, которое делает именно это, изящно отступая, когда Aero отключен в Windows.Forms.

Вопрос: Но делать это в WPF иначе, OnRender (эквивалент OnPaint в avalon), который дает вам DrawingContext, как рисовать на этом с вызовом DrawAP ThemeBackground WINAPI?

1 ответ

Что ж, DrawThemeBackground нужен дескриптор контекста устройства, который является чистой концепцией Win32... WPF не использует контексты устройства или дескрипторы окна. Однако приложение WPF размещается в окне Win32, и вы можете получить HWND этого окна:

using System.Windows.Interop;

...

IntPtr hwnd = new WindowInteropHelper(this).Handle;

Затем вы можете получить DC для этого окна, используя API GetDC:

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

...

IntPtr hdc = GetDC(hwnd);

Вы должны быть в состоянии использовать DrawThemeBackground с этим DC.

Обратите внимание, что все это чисто теоретически, я не проверял...

Другие вопросы по тегам