2009-12-11 2 views
2

Мы размещаем наше прозрачное окно приложения над окном другого процесса. В нашем окне содержатся дочерние элементы управления. Мы создаем окно WS_EX_LAYERED, используя colorkey для выборочной прозрачности. Главное окно полностью прозрачно, поэтому оно функционирует только как контейнер для дочерних элементов управления.WS_EX_LAYERED colorkey - проблемы с Vista

Это прекрасно работает на XP и Vista без Aero. Однако, на Vista с Aero клики не проходят через прозрачную область. Что мы можем сделать?

Использование WS_EX_TRANSPARENT завершается неудачно, поэтому наши собственные элементы управления не работают, конечно.

Я рассмотрел прячась родительское окно (WS_SHOWWINDOW), но я абсолютно уверен, что это будет скрывать все дети, и AFAIK изменение размеров окна до минимального размера, с любой комбинацией CLIPCHILDREN & CLIPSIBLINGS потерпит неудачу аналогичным образом ...

Спасибо за любую помощь.

ответ

1

Другого варианта заключается в использовании области окна и не WS_EX_LAYERED

+0

Спасибо, я знаю регионы, но я думаю, что было бы довольно утомительно создавать регионы с более чем 30 текстами и элементами кнопок. Но все же, возможно, стоит пересмотреть. – Adam

+1

Ну, все они детские элементы управления, и легко получить их RECT – Anders

+0

утомительно? вот почему вы программист - автоматизировать скуку. Генерация области из прямых является тривиальной, из других форм немного сложнее. но обрезка окна на основе областей намного лучше поддерживается в окнах 6.0 и 6.1, чем WS_EX_LAYERED с colorkey. –

0
  • WS_EX_LAYERED что обрабатывает графической окно прозрачности, кликов это просто побочный эффект, что случилось работать на старых Windows, операционные системы ,
  • WS_EX_TRANSPARENT - это то, что делает мышь transparent. Графическая прозрачность не гарантируется с этим флагом. Вы должны вручную нарисовать элементы управления (используя функции GDI) (например, в приложении directX) и захватить позицию курсора с помощью крючка низкого уровня.