2010-02-25 4 views
3

У меня есть элемент управления ActiveX, который помещается в контейнер браузера IE. Элемент управления создает еще одно диалоговое окно с включенными свойствами WS_POPUP и WS_LAYERED, чтобы иметь возможность использовать функцию SetLayeredWindowAttributes (...) для достижения прозрачности с цветовой меткой и альфа-смешивания сверху элемента управления.С элементом управления ActiveX в контейнере окна браузера, как я могу определить, когда пользователь меняет вкладку от элемента управления activex

Поскольку свойство WS_LAYERED не может использоваться в сочетании с свойством WS_CHILD, управление видимостью окна не является автоматическим. Мне нужно определить, когда элемент управления ActiveX больше не отображается (т. Е. Поскольку вкладка браузера была изменена или сведена к минимуму), поэтому я могу изменить видимость окна оверлея.

Я попытался использовать некоторые из существующих оконных сообщений (WM_), чтобы определить это изменение, но не видел, чтобы они срабатывали при изменении вкладки браузера IE. Кто-нибудь знает лучший способ захвата, когда происходят изменения видимости?

ответ

2

Если вы не видите уведомление WM_SHOWWINDOW, ваше окно будет покрыто более чем скрытым. Нет сообщения Windows, которое сообщит вам, когда ваш элемент управления ActiveX включен. Вам нужно искать уведомления из браузера.

Или придумайте решение, которое не использует окно WS_POPUP. Возможно, вы можете использовать AlphaBlend, чтобы сделать свою собственную цветокорректировку, а не полагаться на подразумеваемое поведение AlphaBlend для SetLayeredWindowAttributes.

+0

Да, уведомление WM_SHOWWINDOW в элементе управления не происходит ни при изменении вкладки, ни даже при уменьшении окна браузера. Как мне перехватить и интерпретировать уведомления из браузера? – flawlesslyfaulted

+0

Я могу создать окно «OWNED», как указано в msdn, но это разрешает проблему минимизации, а не проблему изменения вкладок. http://msdn.microsoft.com/en-us/library/ms632599(VS.85).aspx#owned_windows "-Общее окно всегда находится над его владельцем в z-порядке. -Система автоматически уничтожает принадлежащее ему окно, когда его владелец уничтожается. -Укрытое окно скрыто, когда его владелец сведен к минимуму ». – flawlesslyfaulted

+0

Если браузер не является _giving_ вашим контролем каких-либо уведомлений, вам необходимо искать решение, которое не использует окно WS_POPUP. Я не думаю, что вы сможете что-то сделать надежно. Всплывающее окно просто мертвое, извините. –

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