После того, как метод Navigate2 возвращает S_OK, застрял на READYSTATE в READYSTATE_LOADING - PullRequest
1 голос
/ 06 мая 2010

Я работаю над архитектурным приложением MFC Document View, которое имеет несколько документов и представлений и интерфейс окна с вкладками.

Мне было поручено автоматическое переключение на другую вкладку по нажатию кнопки OK на одной из других вкладок. При нажатии на другую вкладку она использует оболочку C ++ поверх IWebBrowser2 для перехода на определенную веб-страницу.

Когда это делается вручную, нажав на вкладку, все в порядке, и веб-страница в представлении загружается успешно.

В моей первой попытке сделать это, вкладка успешно переключилась в ответ на вызов

 AfxGetMainWnd()->SendMessageToDescendants(SOME_MESSAGE, ...);

однако, отправив это сообщение Windows в неправильную точку, приложение завершится сбоем после возврата элемента управления, потому что цепочка событий вызвала (немодальный) диалог (*), который отправил сообщение, чтобы больше не существовать.

Затем я нашел правильное место для вызова, но теперь, когда активирована другая вкладка, она больше не отображает веб-страницу так, как должна.

Для устранения этой проблемы я добавил код для проверки READYSTATE как в ситуации, когда она работает, так и в ситуации, когда это не так. Когда страница не загружается (несмотря на вызов Navigate2, возвращающий S_OK), READYSTATE просто остается в READYSTATE_LOADING.

К сожалению, теперь я нахожусь во многих правках, когда у меня это частично работало.

Я добавил операторы TRACE для наиболее очевидных событий, таких как OnSetFocus, CView :: OnActivateView, но все трассировки отображаются в одном и том же порядке, несмотря на различное поведение

* размещено в представлении

...