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.
Обратите внимание, что все это чисто теоретически, я не проверял...