【问题标题】:With an ActiveX control in an browser window container, how do I detect when user changes tab away from activex control使用浏览器窗口容器中的 ActiveX 控件,如何检测用户何时将选项卡从 activex 控件更改
【发布时间】:2011-01-21 05:42:50
【问题描述】:

我有一个放置在 IE 浏览器容器中的 ActiveX 控件。控件创建另一个启用了 WS_POPUP 和 WS_LAYERED 属性的对话框窗口,以便能够使用 SetLayeredWindowAttributes(...) 函数在控件顶部完成颜色键控透明度和 alpha 混合。

因为 WS_LAYERED 属性不能与 WS_CHILD 属性一起使用,所以窗口可见性的管理不是自动的。我需要能够检测 ActiveX 控件何时不再可见(即因为浏览器选项卡已更改或最小化),以便我可以更改覆盖窗口的可见性。

我已尝试使用一些现有的窗口消息 (WM_) 来确定此更改,但在更改 IE 浏览器选项卡时没有看到它们触发。有谁知道在发生这些可见性变化时捕获的最佳方法?

【问题讨论】:

    标签: windows mfc activex visibility layered


    【解决方案1】:

    如果您没有看到WM_SHOWWINDOW 通知,则您的窗口被覆盖而不是隐藏。没有 Windows 消息会告诉您 ActiveX 控件何时被覆盖。您需要从浏览器中查找通知。

    或者想出一个不使用 WS_POPUP 窗口的解决方案。也许您可以使用 AlphaBlend 来进行自己的颜色键控,而不是依赖于 SetLayeredWindowAttributes 的隐含 AlphaBlend 行为。

    【讨论】:

    • 是的,控件中的 WM_SHOWWINDOW 通知不会在选项卡更改或浏览器窗口最小化时发生。我将如何拦截和解释来自浏览器的通知?
    • 我可以创建一个 msdn 上提到的“OWNED”窗口,但这只能解决最小化问题而不是选项卡更改问题。 msdn.microsoft.com/en-us/library/… "-拥有的窗口在 z 顺序中总是在其所有者之上。-当所有者被销毁时,系统会自动销毁拥有的窗口。-当其所有者最小化时,隐藏的拥有的窗口。"
    • 如果浏览器没有给予您的控件任何通知,那么您需要寻找不使用 WS_POPUP 窗口的解决方案。我认为您无法可靠地拦截任何东西。弹出窗口只是一个死胡同,抱歉。
    • 是的,你永远不应该创建一个无主的弹出窗口,所以浏览器的最小化不是问题,但是除非浏览器提供,否则仍然没有通用的切换标签的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-04-10
    • 2012-03-08
    • 2012-11-05
    • 2016-05-29
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多