我正在开发一个 MFC 文档视图架构应用程序,它具有多个文档和视图以及一个选项卡式窗口界面。
我的任务是在按下其他选项卡中的 OK 按钮时自动切换到另一个选项卡。单击另一个选项卡时,它使用 IWebBrowser2 上的 C++ 包装器导航到特定网页。
当通过单击选项卡手动完成此操作时,一切都很好,并且视图中的网页成功加载。
在我第一次尝试这样做时,选项卡成功切换以响应对
AfxGetMainWnd()->SendMessageToDescendants(SOME_MESSAGE, ...);
但是,通过在错误的位置发送此 Windows 消息,应用程序将在控制返回后崩溃,因为事件链导致发送消息的(无模式)对话框 (*) 不再存在。
然后我找到了拨打电话的正确位置,但现在当另一个选项卡被激活时,它不再显示应有的网页。
为了调试这个问题,我添加了代码来检查 READYSTATE 在它工作的情况和它不工作的情况下。当页面加载失败时(尽管调用 Navigate2 返回 S_OK),READYSTATE 只是停留在 READYSTATE_LOADING。
不幸的是,与我部分工作时相比,现在我要进行许多编辑。
我已将 TRACE 语句添加到最明显的事件中,例如 OnSetFocus、CView::OnActivateView,但尽管行为不同,但所有跟踪都以相同的顺序出现
* 托管在视图中