2011-09-11 59 views
0

我通過使用IHTMLDocument2寫入(SAFEARRAY)方法從存儲在數據庫中的字符串生成HTML頁面。這工作正常。 按下CTRL + F時,按預期方式顯示查找對話框,但從未有任何匹配。 CTRL + F正在搜索什麼?也許一個對象不見了(我必須創建)搜索的目的是什麼? 下面是一些相關的代碼:IWebBrowser2 IHTMLDocument2 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按預期工作時那樣「刷新」一樣。這就解決了「焦點問題」。

+0

通常當焦點是有點過這種情況......請出示一些來源和更多細節... – Yahia

+0

它似乎是一個焦點問題 - 如果我從上下文菜單,編碼,刷新等執行任何操作。 Ctrl-F然後工作。所以問題是,什麼是屬性/方法會有相同的效果? – andywebsdale

+0

請參閱下面的答案 – Yahia

回答