【问题标题】:handle of DISPID_ONVISIBLEDISPID_ONVISIBLE 的句柄
【发布时间】:2011-10-30 01:57:36
【问题描述】:

我尝试隐藏我放入 DISPID_NEWWINDOW2 的 IWebBrowser2。

但是没有运气:-(

IWebBrowser2 在导航后始终可见。这就是为什么我试图处理 DISIP_ONVISIBLE 并调用 put_Visible(VARIANT_FALSE) 隐藏 IWebBrowser2 但是我只有在自己调用 put_Visible() 时才会收到此事件...

如何解决我的任务?

感谢您的帮助。

【问题讨论】:

  • 尝试隐藏弹出窗口没有什么意义。他们只会消耗资源并最终轰炸您的程序。将 *Cancel 参数设置为 VARIANT_FALSE 以使弹出窗口无法显示。
  • 真的我需要在父级 IWebBrowser2 中打开链接
  • 但是如何从 NEWWINDOW2 获取此链接?我认为在这种情况下导航不等于新窗口

标签: c++ com atl wtl


【解决方案1】:

实现NewWindow2NewWindow3 并将ppDisp 设置为IWebBrowser2 的新实例。
要确保此新实例不可见,请使用 put_Visible 或在控件的容器上调用 ShowWindow(SW_HIDE)
您还可以设置 *Cancel = VARIANT_TRUE 以完全禁用弹出窗口。
实施NewWindow3 将为您提供目标网址。

STDMETHODIMP CMyBrowser::OnNewWindow3(IDispatch **ppDisp, 
                                      VARIANT_BOOL *Cancel, 
                                      DWORD dwFlags, 
                                      BSTR bstrUrlContext, 
                                      BSTR bstrUrl)
{
  // spWebBrowser = create a newly instance of IWebBrowser2
  ppDisp = (IDispatch*)spWebBrowser;
  return S_OK;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2012-09-26
    • 2014-05-22
    • 1970-01-01
    相关资源
    最近更新 更多