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