Сбои CDHtmlDialog при переходе в PDF после перехода в Google - PullRequest
0 голосов
/ 16 октября 2019

Переход со страницы www.google.com в файл PDF приводит к исключению в CDHtmlDialog. Это исключение отсутствует при переходе от страниц, отличных от Google (например, www.wikipedia.org).

Переопределяет события OnBeforeNavigate, OnNavigateComplete и OnDocumentComplete. Затем обнаружил, что в сценарии проблемы при загрузке pdf-файла «OnNavigateComplete» вызывается дважды. Последовательность вызова выглядит следующим образом: OnBeforeNavigate => OnNavigateComplete => OnNavigateComplete

Поскольку «OnNavigateComplete» вызывается без вызова «OnBeforeNavigate», «m_spHtmlDoc» в CDHtmlDialog не вызывается, так как «mNspigtocDialog» не вызывает NULL и не становится NULLOnNavigateComplete». ASSERT (m_spHtmlDoc == NULL);

Заголовок:

class CClientAppDlg : public CDHtmlDialog

cpp:

CClientAppDlg::CClientAppDlg(CWnd* pParent /*=nullptr*/)
    : CDHtmlDialog(IDD_CLIENTAPP_DIALOG, 0, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CClientAppDlg::OnBnClickedNavigate()
{
    UpdateData(TRUE);
    Navigate(m_csNavURL); // Get URL from edit box and navigate
    UpdateData (FALSE);
}

void CClientAppDlg::OnBeforeNavigate( LPDISPATCH pDisp, LPCTSTR szUrl)
{
    CDHtmlDialog::OnBeforeNavigate(pDisp, szUrl);
}

void CClientAppDlg::OnNavigateComplete( LPDISPATCH pDisp, LPCTSTR szUrl)
{
    CDHtmlDialog::OnNavigateComplete(pDisp, szUrl);
}

void CClientAppDlg::OnDocumentComplete(LPDISPATCH pDisp, LPCTSTR szUrl)
{
    CDHtmlDialog::OnDocumentComplete(pDisp, szUrl);
}
  1. Почему "OnNavigateComplete" вызывается дважды и вызывает исключение?
  2. Почему это происходит только при переходе со страницы Google?

1 Ответ

0 голосов
/ 18 октября 2019

Я думаю, я получил решение. CDHtmlDialog для отображения HTML. При загрузке файлов, отличных от файлов HTML, поведение может быть неопределенным. Так встроенный файл PDF в файл HTML и загружается. Тогда проблема решена.

<embed src="E:/sample.pdf" width="500" height="375" type="application/pdf">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...