Вопрос

Я добавляю диалоги C # WPF в существующее приложение C ++ MFC, используя интерфейсный уровень C ++ / CLI. У меня все работает, но у меня проблемы с модальностью. Например:

<Ол>
  • Приложение MFC показывает диалог WPF с использованием ShowDialog. Работает как положено.
  • В этом диалоговом окне WPF отображается диалоговое окно MFC с использованием DoModal. Диалоговое окно WPF скрыто за базовым приложением C ++ и не отключается, если я вручную не изменю IsEnabled. Не идеально, но это работает.
  • Теперь этот диалог MFC закрыт. Теперь по какой-то причине базовое приложение MFC включено, когда оно все еще должно быть отключено из-за того, что диалог WPF не был закрыт. Это плохо, так как теперь он позволяет пользователю делать сумасшедшие вещи, пока диалог WPF еще открыт.
  • У меня такое ощущение, что было бы лучше, если бы я мог правильно установить родительские диалоги. Но до сих пор я не смог установить родителя диалога MFC в качестве диалога WPF или наоборот. И я даже не знаю, исправит ли это.

    Есть идеи?

    Это было полезно?

    Решение

    При открытии CDialog уловка заключается в том, чтобы использовать WindowsInteropHelper для получения HWND родительского диалога WPF. Затем вы можете использовать CWnd :: Attach, чтобы обернуть этот HWND в класс CWnd для передачи в конструктор CDialog.

    Проблема, с которой я столкнулся, заключалась в том, что я уже создал CDialog., но пока не отображал. Различные версии SetParent могут использоваться, только если у вашего целевого дочернего окна уже есть действительный дескриптор. Мне пришлось написать новую функцию в моем классе CDialog, чтобы установить m_wndParent, который он использует в качестве родителя, когда в конце концов создает диалог. Тогда все отлично работает!

    Каким-то образом создание диалогов WPF из диалогов MFC " просто работает " ;. Это волшебство.

    Другие советы

    При отображении диалогового окна WPF вы используете класс HwndSource обернуть окно WPF? Если это так, вы можете :: SetParent Окно WPF, а также используйте свойство HwndSource.Handle для установки родителя дочернего элемента.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top