문제

C# WPF 대화 상자를 C ++/CLI 인터페이스 계층을 사용하여 기존 C ++ MFC 앱에 추가합니다. 양식에 문제가있는 것을 제외하고는 일이 작동합니다. 예를 들어:

  1. MFC 앱은 showdialog를 사용하여 WPF 대화 상자를 보여줍니다. 예상대로 작동합니다.
  2. WPF 대화 상자는 Domodal을 사용한 MFC 대화 상자를 보여줍니다. WPF 대화 상자는 기본 C ++ 앱 뒤에 숨겨져 있으며 ISENABLED를 수동으로 변경하지 않는 한 비활성화되지 않습니다. 이상적이지는 않지만 작동합니다.
  3. 이제 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 속성을 사용하여 하위 자녀의 부모를 설정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top