Применить размытие aero glass к определенной области управления в WPF

#c# #wpf #pinvoke #wdm

#c# #wpf #pinvoke #wdm

Вопрос:

В своей книге (Pro WPF в C # 2010 Windows Presentation Foundation в .NET 4) Мэтью Макдональд — пишет:

…вы можете использовать DwmEnableBlurBehindWindow(), чтобы применить эффект стекла к определенной области в окне.

Означает ли это, что я могу применить эффект аэростекла к определенным элементам управления (или, по крайней мере, к области, которую они занимают)?

Пожалуйста, приведите пример того, как это сделать с помощью C #.

Комментарии:

1. WPF не использует окно для элемента управления. Так что да. Посетите pinvoke.net для объявления pinvoke. Действительно ли эта книга полезна?

2. Все, что я нашел, это примеры, в которых вам нужно передать Hwnd в DwmEnableBlurBehindWindow() . Поскольку, как я уже знаю, элементы управления WPF не являются отдельными окнами, я предполагаю, что автор ошибается в своем предположении. Это, кстати, может работать в Windows Forms windows, хотя =)

3. WPF сбрасывает все в окне в один HWND.

4. @BoltBlock, конечно, я это знаю. Это не относится к моему вопросу жестко =) Ошибается ли автор вышеупомянутой книги в своем предположении о размытии области Windows.

Ответ №1:

Если я понимаю, что вы намерены применить размытие, реализованное в DWM, к элементу управления, который будет отображать содержимое в окне за ним, то нет: «Эта функция может быть вызвана только в Windows верхнего уровня»..

Однако вы можете применить размытие DWM к окну верхнего уровня, содержащему элемент управления в области элемента управления, и увидеть окна за ним. Проверьте подписи P / Invoke для DwmEnableBlurBehindWindow, CreateRectRgn и DeleteObject, чтобы очистить область размытия.

Комментарии:

1. Как WvmEnableBlurBeindWindow работает вместе с CreateRectRgn?

2. @MaximV.Pavlov: см. [MSDN] [1]. Короче говоря, blurBehind hRgnBlur параметра — это область для размытия, и CreateRectRgn() это простой способ создать область (очевидно, прямоугольную). Другие функции, связанные с HRGN, для создания непрямоугольных областей см. в GDI API. [1]: msdn.microsoft.com/en-us/library/windows/desktop /…