2011-09-11 10 views
0

IHTMLDocument2 write(SAFEARRAY)メソッドを使用して、データベースに格納された文字列からHTMLページを生成しています。これは問題なくOKです。 CTRL + Fを押すと、[検索]ダイアログボックスが表示されますが、一致するものはありません。 CTRL + Fで何が検索されていますか?おそらくオブジェクトが見つからない(私が作成しなければならない)検索が見えるでしょうか? @Yahiaは、それがフォーカス問題だった、示唆したように :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); 
} 

回答: は、ここではいくつかの関連するコードです。コンテキストメニューからCtrl + Fを "リフレッシュ"したときのように、m_document-> write(safe_array)文の後にm_document-> execCommand( "Refresh"、...)を追加しました。それは "焦点の問題"を修正しました。

+0

焦点は何とかオフになっているとき、通常この問題が発生した...表示してくださいいくつかのソースと詳細... – Yahia

+0

それは、フォーカスの問題のようです - 私はコンテキストメニュー、エンコーディング、リフレッシュなどから任意のアクションを実行する場合。 Ctrl-Fを押してから、同じ効果が得られるプロパティ/メソッドは何ですか? – andywebsdale

+0

下記の私の答えを見てください – Yahia

答えて

1

CTRL + Fがフォーカスを意識している...あなたはWriteHTMLString();および/またはSetWindowSize(512,384);m_documentparentWindowfocusを呼び出す必要があります...

関連する問題