В методе производного класса CView я вызываю метод MessageBox CWnd. Это закрепленный вид, а не дочерний объект MDI. По возвращении из MessageBox фокус переходит к дочернему элементу Active MDI, а не к закрепленному представлению.
Думая, что это было «аномалией» поведения MFC, я попытался изменить код для использования Win32 :: MessageBox и передать GetSafeHwnd () представления для родительского паранетера HWND, и представление STILL не фокусируется на удалении MessageBox , но ребенок Active MDI получает фокус, как и вызов MFC.
Кроме того, я вижу похожее поведение с окнами на основе CDialog, а не только с MessageBox.
Я сделал обходной путь, вызвав SetFocus () ПОСЛЕ возвращения из MessageBox, и это работает. Тем не мение, Я не хочу, чтобы программно ВСЕГДА возвращалось ко мне (есть некоторые ситуации, когда представление или один из его дочерних элементов НЕ имеют фокуса ПЕРЕД диалоговым окном / сообщением, поэтому мне действительно нужно проверить это ПЕРЕД диалоговым окном / окном сообщения, а затем восстановить фокус только в том случае, если у меня был Фокус, ПОСЛЕ вызова в DoModal / MessageBox).
Это ошибка поведения MDI Windows? Разве это не ошибка, а «нужная особенность» приложений MDI? Я делаю что-то неправильно? У кого-нибудь есть идеи или комментарии?
Задача ещё не решена.
Других решений пока нет …