MFC 및 WPF 혼합 : 모달 대화 상자
-
07-07-2019 - |
문제
C# WPF 대화 상자를 C ++/CLI 인터페이스 계층을 사용하여 기존 C ++ MFC 앱에 추가합니다. 양식에 문제가있는 것을 제외하고는 일이 작동합니다. 예를 들어:
- MFC 앱은 showdialog를 사용하여 WPF 대화 상자를 보여줍니다. 예상대로 작동합니다.
- WPF 대화 상자는 Domodal을 사용한 MFC 대화 상자를 보여줍니다. WPF 대화 상자는 기본 C ++ 앱 뒤에 숨겨져 있으며 ISENABLED를 수동으로 변경하지 않는 한 비활성화되지 않습니다. 이상적이지는 않지만 작동합니다.
- 이제 MFC 대화 상자가 닫힙니다. 이제 어떤 이유로 WPF 대화 상자가 닫히지 않았기 때문에 여전히 비활성화 해야하는 기본 MFC 앱이 활성화되어 있습니다. WPF 대화 상자가 여전히 열려있는 동안 사용자가 미친 짓을 할 수있게되므로 나쁘다.
부모 대화를 올바르게 설정할 수 있다면 더 잘 작동한다는 느낌이 들었습니다. 그러나 지금까지 나는 MFC 대화 상자의 부모를 WPF 대화 상자로 설정하거나 그 반대도 마찬가지입니다. 그리고 그게 고칠지조차 모르겠습니다.
어떤 아이디어?
해결책
CDIALOG를 열 때 트릭은 WindowsInterOphelper를 사용하여 상위 WPF 대화 상자의 HWND를 얻는 것입니다. 그런 다음 cwnd :: 첨부를 사용하여 CWND 클래스의 HWND 랩을 사용하여 CDIALOG의 생성자로 전달할 수 있습니다.
내가 가진 문제는 이미 CDIALOG를 구성했지만 아직 표시되지 않았다는 것입니다. 다양한 버전의 세트 회전자는 대상 자식 창에 이미 유효한 핸들이있는 경우에만 사용할 수 있습니다. M_WNDPARENT를 설정하기 위해 CDIALOG 클래스에 새로운 기능을 작성해야했습니다. 이것이 마침내 대화를 생성 할 때 부모로 사용하는 것입니다. 그러면 모든 것이 잘 작동합니다!
어떻게 든 MFC 대화 상자에서 "Just Works"에서 WPF 대화 상자를 만듭니다. 마법입니다.
다른 팁
WPF 대화 상자를 표시 할 때 hwndsource 클래스 WPF 창을 감싸려면? 그렇다면, 당신은 할 수 있습니다 :: setParent WPF 창과 hwndsource.handle 속성을 사용하여 하위 자녀의 부모를 설정합니다.