Каков наилучший метод для рисования наложенной графики в Windows?

StackOverflow https://stackoverflow.com/questions/1678378

  •  16-09-2019
  •  | 
  •  

Вопрос

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

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

Нашей кодовой базе несколько лет, в основном мы используем Win32 и GDI, но мы находимся в процессе модернизации, и пришло время взглянуть на более новые технологии.

Я рассматривал возможность создания собственного окна в WPF, но меня беспокоит то, что я прочитал о проблемах с "воздушным пространством".Похоже, что WPF использует многоуровневые окна для выполнения альфа-микширования по пикселям, и поэтому кажется, что он также будет страдать от ограничений, с которыми я сталкивался ранее.

Я мало что знаю (вообще ничего, на самом деле) о Direct2D, но эта технология, похоже, может быть интересной.Тем не менее, я не могу найти никаких ссылок на то, что он может выполнять наложение окон.

Итак, все это подводит меня к моей проблеме:Какая наилучшая технология для создания оверлейных окон под Windows?(Vista и Win7 как минимум, неплохо было бы иметь XP)

Пренебрегаю ли я какой-то особенно хорошей технологией?Будем признательны за любые предложения.

Это было полезно?

Решение

Я рекомендую Direct2D и DirectWrite, поскольку вы получаете высококачественный рендеринг, который также смехотворно быстр по сравнению с GDI или чем-либо еще, выполняемым в .Сетевое пространство.Единственная проблема заключается в том, что для его использования вам нужна ОС Vista или более поздней версии.

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

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

WPF использует многоуровневые окна для прозрачности, но он не использует "обычные" элементы управления win32, все элементы управления wpf в окне визуализируются самостоятельно, используя только одно окно win32, все они поддерживают прозрачность.

Проблема с "воздушным пространством" возникает только тогда, когда вы размещаете элемент управления WinForms внутри окна WPF.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top