После того, как метод Navigate2 возвращает S_OK, застрял на READYSTATE в READYSTATE_LOADING
Я работаю над приложением с архитектурой MFC Document View, которое имеет несколько документов и представлений и интерфейс окна с вкладками.
Мне было поручено автоматическое переключение на другую вкладку при нажатии кнопки OK на одной из других вкладок. При нажатии на другую вкладку она использует оболочку C++ поверх IWebBrowser2 для перехода на определенную веб-страницу.
Когда это делается вручную, нажав на вкладку, все в порядке, и веб-страница в представлении загружается успешно.
В моей первой попытке сделать это, вкладка успешно переключилась в ответ на вызов
AfxGetMainWnd()->SendMessageToDescendants(SOME_MESSAGE, ...);
однако при отправке этого сообщения Windows в неправильной точке приложение будет аварийно завершать работу после возврата элемента управления, поскольку цепочка событий привела к тому, что диалоговое окно (*), которое отправило сообщение, больше не существует.
Затем я нашел правильное место для совершения звонка, но теперь, когда активирована другая вкладка, она больше не отображает веб-страницу так, как должна.
Для устранения этой проблемы я добавил код для проверки READYSTATE как в ситуации, когда она работает, так и в ситуации, когда это не так. Когда страница не загружается (несмотря на вызов Navigate2, возвращающий S_OK), READYSTATE просто остается в READYSTATE_LOADING.
К сожалению, теперь я нахожусь во многих изменениях, когда у меня это частично работало.
Я добавил операторы TRACE к наиболее очевидным событиям, таким как OnSetFocus, CView::OnActivateView, но все трассировки отображаются в одном и том же порядке, несмотря на разное поведение
* размещено в представлении