在派生的 CView 类的方法中,我调用了 CWnd 的 MessageBox 方法。这是一个停靠视图,而不是 MDI 子视图。从 MessageBox 返回后,焦点转到 Active MDI 子项,而不是返回到停靠视图。
认为这是 MFC 行为“异常”,我尝试更改代码以使用 Win32 ::MessageBox 并将视图的 GetSafeHwnd() 传递给父 HWND 参数,并且视图仍然没有关注消散 MessageBox ,但 Active MDI 子项获得焦点,就像 MFC 调用一样。
此外,我从视图中看到了基于 CDialog 的窗口的类似行为,而不仅仅是 MessageBox 的。
我通过在从 MessageBox 返回后调用 SetFocus() 进行了解决,并且有效。但是,我不想以编程方式始终将焦点重新设置给我(在某些情况下,视图或其子项在对话框/消息框之前没有焦点,所以我实际上需要在对话框/消息框,然后只有在我有焦点时才恢复焦点,在调用 DoModal/MessageBox 之后)。
这是一个 MDI Windows 行为错误吗?这不是错误,而是 MDI 应用程序的“所需功能”吗?难道我做错了什么?有人有什么想法或意见吗?