【问题标题】:IWebBrowser2 IHTMLDocument2 CTRL+F dialog appears but finds no matchesIWebBrowser2 IHTMLDocument2 CTRL+F 对话框出现但找不到匹配项
【发布时间】:2011-11-14 19:50:51
【问题描述】:

我正在使用 IHTMLDocument2 write(SAFEARRAY) 方法从存储在数据库中的字符串生成 HTML 页面。这工作正常。 当按下 CTRL+F 时,“查找”对话框会按预期出现,但从来没有任何匹配项。 CTRL+F 搜索的是什么?也许搜索查看的对象丢失(我必须创建)? 以下是一些相关代码:

CComPtr<IDispatch> m_spDisp;
CComPtr<IWebBrowser2> m_spWeb2;
HRESULT m_hr;
IHTMLDocument2* m_document;

BOOL CSwiftDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    m_BackMenuButton.SetToolTipText(_T("Back"));
    m_bInitialised = true;
    m_bBackClicked = false;
    m_svURLList.clear();
    m_nCurrentPage = -1;
    m_bitBack.LoadBitmap(IDB_BACK_BITMAP);
        m_BackMenuButton.SetBitmap(m_bitBack);
    m_spGlobal.CreateInstance(__uuidof(GLOBVARSLib::Global ) ); 
    m_browser.Navigate(CSTR m_sURL, NULL, NULL, NULL, NULL);
    GetDocument();
    WriteHTMLString();
    SetWindowSize(512,384);
    return TRUE;
}



void CSwiftDlg::GetDocument()
{
    m_hr = S_OK;
    m_spDisp = m_browser.get_Application();
    if (m_spDisp != NULL && m_spWeb2 ==NULL)
    {
         m_hr = m_spDisp->QueryInterface(IID_IWebBrowser2,(void**)&m_spWeb2);
    }
    if (SUCCEEDED(m_hr) && m_spWeb2 != NULL)
    {
        // get browser document's dispatch interface
        IDispatch *document_dispatch = NULL;
        m_hr = m_spWeb2->get_Document(&document_dispatch);
        if (SUCCEEDED(m_hr) && (document_dispatch != NULL))
        {           // get the actual document interface
            m_hr = document_dispatch->QueryInterface(IID_IHTMLDocument2, (void **)&m_document);
            // release dispatch interface
            document_dispatch->Release();
        }
    }
}


void CSwiftDlg::WriteHTMLString()
{
    if (m_document == NULL)
        GetDocument();  
    SAFEARRAY *empty_array = SafeArrayCreateVector(VT_VARIANT,0,1);
    // construct text to be written to browser as SAFEARRAY
    SAFEARRAY *safe_array = SafeArrayCreateVector(VT_VARIANT,0,1);
    VARIANT *variant;
    SafeArrayAccessData(safe_array,(LPVOID *)&variant);
    variant->vt      = VT_BSTR;
    variant->bstrVal = m_sHTML.AllocSysString();
    SafeArrayUnaccessData(safe_array);
    // write SAFEARRAY to browser document
    m_document->write(empty_array);
    m_document->close();
    m_document->write(safe_array);
}

回答: 正如@Yahia 所建议的,这是一个焦点问题。我在 m_document->write(safe_array) 语句之后添加了 m_document->execCommand("Refresh",...) ,就像我从上下文菜单 Ctrl-F 执行“刷新”时一样,按预期工作。这解决了“焦点问题”。

【问题讨论】:

  • 这通常发生在焦点以某种方式偏离时...请显示一些来源和更多详细信息...
  • 这似乎是一个焦点问题 - 如果我从上下文菜单执行任何操作、编码、刷新等。 Ctrl-F 然后就起作用了。那么问题来了,有什么属性/方法会产生同样的效果呢?

标签: iwebbrowser2 ihtmldocument2


【解决方案1】:

CTRL+F 是焦点感知...您需要在WriteHTMLString(); 和/或SetWindowSize(512,384); 之后在parentWindowparentWindow 上调用focus...

【讨论】:

    猜你喜欢
    • 2016-07-28
    • 1970-01-01
    • 2012-10-27
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多