Поделиться через


Взаимодействие с WPF. Общие сведения об областях "airspace" и областях окна

Обновлен: Ноябрь 2007

Концепция "airspace" определяет порядок совместного использования областей отрисовки внутри общего окна верхнего уровня двумя частями взаимодействующего приложения. В этом разделе рассматриваются влияние концепции "airspace" на проектирование представления, а также требования к входным данным для взаимодействующего приложения WPF.

Airspace

В окне верхнего уровня каждый дескриптор HWND, который выполнен с использованием одной из технологий взаимодействующего приложения, имеет собственную область "airspace". Каждая точка в окне принадлежит ровно одному дескриптору HWND, который определяет область "airspace" для этого дескриптора HWND (строго говоря, при наличии нескольких дескрипторов HWND WPF существует несколько областей "airspace" WPF; однако для лучшего понимания концепции предположим, что в примерах этого раздела существует только одна область "airspace"). Концепция "airspace" подразумевает, что все уровни или другие окна, которые могут отображаться над этой точкой во время существования приложения, должны быть частью одной и той же технологии уровня отображения. Отображение точек WPF над Win32 приводит к нежелательным результатам и настоятельно не рекомендуется при взаимодействии с API-интерфейсы.

Примеры областей "airspace"

В первом примере представлены приложения, в которых используются одновременно Win32, DirectX и WPF. В каждой технологии используется собственный отдельный, неперекрывающийся набор точек, поэтому проблемы областей "airspace" отсутствуют.

Окно без ограничения пространства

Предположим, что для этого приложения создается анимация, определяемая положением указателя мыши, которая может быть отображена в любой из трех областей. Со временем это приведет к нарушению области "airspace". Независимо от того, какая технология используется для анимации, ее использование приведет к нарушению областей "airspace" двух других технологий. Это показано на следующем рисунке, на котором выполняется перемещение по окну зеленого круга:

Схема взаимодействия

Другим примером нарушения области "airspace" является применение эффектов прозрачности или альфа-смешения между различными технологиями. На приведенном ниже рисунке поле WPF нарушает области "airspace" Win32 и DirectX. Поскольку точки в этом поле WPF являются полупрозрачными, они должны принадлежать DirectX и WPF, что невозможно. Это приводит к нарушению областей "airspace" и невозможности построения приложения:

Схема взаимодействия

В трех предыдущих примерах используются прямоугольные области. Однако область "airspace" не обязательно должна быть прямоугольной. Она может представлять собой прямоугольник с отверстием. Например, область "airspace" Win32 включает в себя все объекты, за исключением областей "airspace" WPF и DirectX:

Схема взаимодействия

Область "airspace" может быть полностью непрямоугольной или иметь произвольную форму, описываемую дескриптором региона HRGN Win32:

Схема взаимодействия

Прозрачность и окна верхнего уровня

В диспетчере окон (как в Windows Vista, так и в Microsoft Windows XP) обрабатываются только реальные дескрипторы процессов HWND Win32. Таким образом, каждый объект WPF Window является дескриптором HWND. Дескриптор HWND Window должен соответствовать общим правилам, установленным для дескрипторов HWND. В коде WPF этого дескриптора HWND могут выполняться любые операции, поддерживаемые в WPF API-интерфейсы. Однако для взаимодействия с другими дескрипторами HWND на рабочем столе в WPF должны соблюдаться правила обработки и отрисовки Win32. В WPF реализуется поддержка непрямоугольных окон с помощью дескрипторов HRGN Win32 API-интерфейсы, а также поддержка многоуровневых окон для поточечного альфа-смешения.

Постоянные ключевые альфа-значения и значения цвета не поддерживаются. Возможности многоуровневых окон в Win32 зависят от платформы.

Использование многоуровневых окон позволяет сделать все окно прозрачным (полупрозрачным), указав альфа-значение, которое применяется к каждой точке окна. (В Win32 фактически поддерживается поточечное альфа-смешение. Однако на практике этот режим очень трудно использовать, поскольку в нем необходимо вручную рисовать дескриптор HWND каждого дочернего окна, включая диалоговые окна и раскрывающиеся меню.)

В WPF поддерживаются дескрипторы HRGN, однако для них не предусмотрены управляемые интерфейсы API-интерфейсы. Можно использовать вызов неуправляемого кода и класс HwndSource для вызова соответствующего интерфейса Win32 API-интерфейсы. Дополнительные сведения см. в разделе Вызов неуправляемых функций из управляемого кода.

В различных операционных системах поддерживают различные возможности многоуровневых окон WPF. Это связано с тем, что DirectX используется в WPF для отрисовки, а многоуровневые окна в основном предназначены для отрисовки Интерфейс GDI, а не для отрисовки DirectX:

  • В WPF поддерживается аппаратное ускорение многоуровневых окон в Windows Vista. Аппаратное ускорение многоуровневых окон в Microsoft Windows XP требует поддержки Microsoft DirectX, поэтому доступные возможности будут зависеть от версии Microsoft DirectX, установленной на компьютере.

  • В WPF не поддерживаются ключевые значения прозрачности цвета, поскольку в WPF не обеспечивается гарантированную точечную отрисовку необходимого цвета, особенно при использовании аппаратного ускорения.

  • При работе в Microsoft Windows XP многоуровневые окна, расположенные над поверхностями DirectX, мерцают при отображении приложения DirectX. (Используется следующая фактическая последовательность отрисовки: многоуровневое окно скрывается в Интерфейс графических устройств (GDI) Microsoft Windows, после чего оно отрисовывается в DirectX и повторно отображается в Интерфейс графических устройств (GDI) Microsoft Windows.) Это ограничение также распространяется на многоуровневые окна, отличные от WPF.

См. также

Задачи

Руководство по созданию содержимого WPF, размещенного в приложении Win32

Учебник: создание приложения WPF размещающего содержимое Win32

Основные понятия

Общие сведения о взаимодействии WPF и Win32