Фокус не возвращается в CView после закрытия окна сообщения

В методе производного класса 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? Я делаю что-то неправильно? У кого-нибудь есть идеи или комментарии?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]