Как разместить Flash-контент в приложении WPF и использовать прозрачность?

Как я могу разместить флэш-контент внутри формы WPF и по-прежнему использовать прозрачность / альфа-канал в моем окне WPF? Размещение флэш-элементов управления WinForms не позволяет этого.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
2 616
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Можете ли вы использовать Expression для преобразования флэш-содержимого в XAML? Я считаю, что есть инструменты там или сбоку, которые делают это.

Хотя я этого не делал, вы, вероятно, можете использовать элемент управления WebBrowser из WPF 3.5 с пакетом обновления 1 (sp1), чтобы обернуть свой Flash-контент в WPF. Я не уверен, как это повлияет на прозрачность.

Для чего это стоит: я пробовал это, и элемент управления WebBrowser прекрасно размещает Flash-контент, но вы не можете нарушить ограничения воздушного пространства, упомянутые выше.

Lee Roth 05.06.2009 23:13
Ответ принят как подходящий

Если элемент управления, который вы используете для отображения содержимого Flash, не встроен в WPF, вы столкнетесь с этими проблемами «воздушного пространства». Все технологии отображения от Win32 до WinForms использовали HWND «под капотом», но WPF использует DirectX. Однако диспетчер окон в Windows по-прежнему понимает только HWND, поэтому приложения WPF имеют одно окно на основе HWND верхнего уровня, и все, что находится под ним, выполняется в DirectX (на самом деле такие вещи, как контекстные меню и всплывающие подсказки, также имеют HWND верхнего уровня) . У Адама Натана очень хорошее описание взаимодействия с WPF в Эта статья.

Просто боролся с той же проблемой, как загрузить и сделать WPF прозрачным с возможностью отображения Flash, потому что, если вы включите в MainWindow «Разрешить прозрачность», Flash не будет отображаться после запуска приложения.

1) Я использовал элемент управления WebBrowser для воспроизведения файлов Flash (.swf). Они есть на моем компьютере, но в него можно играть из Интернета или где бы вы ни разместили их. Не забудьте назвать свой элемент управления WebBrowser Control, чтобы получить к нему доступ на C#.

 private void Window_Loaded(object sender, RoutedEventArgs e)
 {   
    MyHelper.ExtendFrame(this, new Thickness(-1));    
    this.MyBrowser.Navigate(@"C:\Happy\Download\flash\PlayWithMEGame.swf");         
 }

2) Теперь о прозрачности. Я установил в WPF «false» на «Разрешить прозрачность» и установил «Window Style» на «None». После этого я использовал информацию из ЗДЕСЬ и ЗДЕСЬ и создал следующий код, который произвел желаемый эффект разрешения прозрачности в MainWindow и одновременного запуска Flash, вот мой код:

public class MyHelper
{
    public static bool ExtendFrame(Window window, Thickness margin)
    {
        IntPtr hwnd = new WindowInteropHelper(window).Handle;
        window.Background = Brushes.Transparent;
        HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;
        MARGINS margins = new MARGINS(margin);
        DwmExtendFrameIntoClientArea(hwnd, ref margins);
        return true;
    }
    [DllImport("dwmapi.dll", PreserveSig = false)]
    static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);
}

 struct MARGINS
    {
        public MARGINS(Thickness t)
        {
            Left = (int)t.Left;
            Right = (int)t.Right;
            Top = (int)t.Top;
            Bottom = (int)t.Bottom;
        }
        public int Left;
        public int Right;
        public int Top;
        public int Bottom;
    }

И вызвал его из Window_Loaded () + вам нужна строка «ниже» для работы «DllImport».

using System.Runtime.InteropServices;
using System.Windows.Interop;

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