我被這個難住了!
我有自己的CHtmlView派生類,最近添加了對Find的支持。我是這樣做的:
void CChristianLifeMinistryEditorDlg::OnEditFind()
{
m_pHtmlPreview->ExecWB(OLECMDID_FIND, OLECMDEXECOPT_PROMPTUSER, nullptr, nullptr);
}
在引擎蓋下,代碼然后執行以下操作:
HRESULT CChristianLifeMinistryHtmlView::ExecWB(OLECMDID cmdID, OLECMDEXECOPT cmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
{
ASSERT(m_pBrowserApp != nullptr);
const auto hr = m_pBrowserApp->ExecWB(cmdID, cmdexecopt, pvaIn, pvaOut);
return hr;
}
它作業正常。但只有當我在瀏覽器控制元件中以這種方式呈現我的頁面時:
if (m_pHtmlPreview != nullptr)
{
CString strURL = strPreviewXML;
if (iBookmarkId != -1)
strURL.Format(_T("%s#week%d"), (LPCTSTR)strPreviewXML, iBookmarkId);
m_pHtmlPreview->Navigate2(strPreviewXML, 0, nullptr);
//m_pHtmlPreview->Navigate2(strURL, 0, nullptr);
}
簡而言之,如果我導航到 XML 檔案本身,那么結果就會起作用。但是,如果我嘗試導航到同一個 XMl 檔案,但使用我的錨點,雖然它顯示在瀏覽器控制元件的正確位置,但查找功能將不起作用:

我將其更改回導航到的那一刻:
m_pHtmlPreview->Navigate2(strPreviewXML, 0, nullptr);
然后保證查找工具作業。但這意味著我不能再跳轉到轉換后的 HTML 輸出的正確部分。我試著做:
m_pHtmlPreview->Navigate2(strPreviewXML, 0, nullptr);
m_pHtmlPreview->Navigate2(strURL, 0, nullptr);
我認為如果我先導航到頁面,然后導航到帶有錨點的頁面,那么 Find 會起作用。但沒有喜悅。有什么可以做的嗎?
uj5u.com熱心網友回復:
當您嘗試導航到在 URL 中有書簽的 XML 檔案時,查找功能的機制似乎不喜歡它。
我已經有了將 XML 轉換為 HTMl 的代碼,所以我將其添加為第二步:
if (m_pHtmlPreview != nullptr)
{
CString strURL = strPreviewXML;
//if (iBookmarkId != -1)
// strURL.Format(_T("%s#week%d"), (LPCTSTR)strPreviewXML, iBookmarkId);
//m_pHtmlPreview->Navigate2(strPreviewXML, 0, nullptr);
CString strFileXSLPath = theApp.GetWorkingPath() strFileXSL;
if (theApp.MSAToolsInterface().TransformXMLToHTML(strFileXSLPath, strPreviewXML, m_strPreviewHTML))
{
strURL = m_strPreviewHTML;
if(iBookmarkId != -1)
strURL.Format(_T("%s#week%d"), (LPCTSTR)m_strPreviewHTML, iBookmarkId);
}
m_pHtmlPreview->Navigate2(strURL, 0, nullptr);
}
我發現:
- 錨仍然正常作業并跳到我想要的地方。
- Find 繼續正常作業,而之前它會停止作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/411218.html
標籤:
