2009-11-05 2 views
4

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

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

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

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

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

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

Я пренебрегаю некоторыми, особенно хорошими технологиями? Мы ценим любые предложения.

ответ

2

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

4

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

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

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

Смежные вопросы