Frage

Ich füge C # WPF-Dialoge in eine bestehenden C ++ MFC-Anwendung unter Verwendung einer C ++ / CLI-Schnittstelle Schicht. Ich habe Dinge arbeiten, außer ich ein Problem mit Modalität habe. Zum Beispiel:

  1. MFC-Anwendung zeigt ein WPF-Dialog mit Showdialog. Wie erwartet funktioniert.
  2. Den WPF-Dialog zeigt einen MFC Dialog mit DoModal. Der WPF-Dialog wird hinter der Basis C ++ App versteckt und ist nicht gesperrt, wenn ich manuell IsEnabled ändern. Nicht ideal, aber es funktioniert.
  3. Nun wird der MFC-Dialog geschlossen. Jetzt aus irgendeinem Grunde der Basis MFC-Anwendung aktiviert ist, wenn es nach wie vor aufgrund der WPF deaktiviert werden soll Dialog nicht geschlossen wurde. Das ist schlecht, wie es jetzt den Benutzer erlaubt, verrückte Dinge zu tun, während der WPF-Dialog noch geöffnet ist.

Ich habe das Gefühl, dass es besser funktionieren würde, wenn ich Eltern Dialoge richtig einstellen könnte. Aber bisher habe ich in der Lage gewesen, einen MFC-Dialogs der Eltern als WPF-Dialog zu setzen, oder umgekehrt. Und ich weiß nicht einmal, ob das das Problem beheben würde.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Wenn Sie eine CDialog öffnen, ist der Trick, um eine WindowsInteropHelper zu verwenden, um die Eltern WPF-Dialog des HWND zu erhalten. Dann können Sie CWnd verwenden :: Bringen Sie den HWND in einer CWnd-Klasse wickeln, um die CDialog Konstruktor zu übergeben.

Das Problem, das ich hatte, war, dass ich hatte bereits die CDialog konstruiert., Aber noch nicht angezeigt. Die verschiedenen Versionen von SetParent können nur verwendet werden, wenn Ihr Ziel Kind Fenster bereits einen gültigen Griff haben. Ich hatte eine neue Funktion in meiner CDialog Klasse schreiben m_wndParent zu setzen, das ist, was sie als Mutter verwendet, wenn es endlich den Dialog schafft. Dann ist alles funktioniert super!

Irgendwie Erstellen von WPF-Dialoge von MFC Dialoge „einfach funktioniert“. Es ist Magie.

Andere Tipps

Wenn Sie den WPF-Dialog zeigt, verwenden Sie die HwndSource Klasse , um die WPF-Fenster wickeln? Wenn ja, können Sie in der Lage sein, :: SetParent die WPF-Fenster sowie die HwndSource.Handle Eigenschaft des Teils Eltern des Kindes eingestellt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top