WPF Стеклянный запасной вариант? - PullRequest
3 голосов
/ 03 октября 2009

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

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

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

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

1 Ответ

2 голосов
/ 05 октября 2009

Ну, 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.

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

...