Смешивание MFC и WPF: модальные диалоги
-
07-07-2019 - |
Вопрос
Я добавляю диалоги C # WPF в существующее приложение C ++ MFC, используя интерфейсный уровень C ++ / CLI. У меня все работает, но у меня проблемы с модальностью. Например:
<Ол>У меня такое ощущение, что было бы лучше, если бы я мог правильно установить родительские диалоги. Но до сих пор я не смог установить родителя диалога 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 для установки родителя дочернего элемента.