Какой лучший способ рисования оверлейной графики в Windows?
Я работаю с приложением Win32, которое должно создавать различные типы окон. В частности, эти окна часто не прямоугольные, имеют тени или в основном прозрачные.
Я сейчас пользуюсь WS_EX_LAYERED
с UpdateLayeredWindow
создать прозрачные окна, на которых я могу рисовать произвольную графику. Однако я считаю, что многослойные окна ограничивают то, что вы не можете иметь многослойные дочерние окна, и при этом многослойное окно не может должным образом содержать "нормальные" элементы управления Win32.
Нашей кодовой базе уже несколько лет, в основном используются Win32 и GDI, но мы находимся в процессе модернизации, и пришло время взглянуть на новые технологии.
Я подумал о том, чтобы сделать свое собственное оконное управление в WPF, но меня беспокоит то, что я читал о проблемах "воздушного пространства". Кажется, что WPF использует многослойные окна для выполнения альфа-смешения на пиксель, и поэтому он также будет страдать от ограничений, с которыми я сталкивался ранее.
Я не знаю много (что-нибудь, действительно) о Direct2D, но эта технология звучит так, как будто она может быть интересной. Тем не менее, я не могу найти никаких ссылок на то, что он может делать оверлейные окна.
Итак, все это подводит меня к моей проблеме: какова лучшая технология для создания оверлейных окон под Windows? (Vista и Win7 как минимум, XP было бы неплохо иметь)
Я пренебрегаю некоторыми, особенно хорошими технологиями? Мы ценим любые предложения.
2 ответа
Я рекомендую Direct2D и DirectWrite, поскольку вы получаете высококачественный рендеринг, который также смехотворно быстр по сравнению с GDI или чем-то, что делается в пространстве.Net. Единственная проблема заключается в том, что вам нужна Vista или более поздняя ОС для ее использования.
WPF может сделать то, что вы ищете, очень легко, но эта особенность WPF (окна с прозрачностью на пиксель) имеет тенденцию быть очень проблематичной из-за ошибок графических драйверов (очевидно, производители графического оборудования не тестируют многослойные окна Direct3D с альфа-значение пикселя очень хорошо).
WPF использует многоуровневые окна для прозрачности, но он не использует "нормальные" элементы управления win32, все элементы управления wpf в окне отображают их самостоятельно, используя только одно окно win32, все они поддерживают прозрачность.
Проблема "воздушного пространства" возникает только тогда, когда вы размещаете элемент управления WinForms в окне WPF.