簡體   English   中英

關閉WPF模式窗口后如何將MFC對話框置於前台

[英]How do I bring an MFC dialog to foreground after closing WPF modal window

我有一個MFC應用程序,該應用程序通過COM界面發布消息,以在C ++中的另一個進程上打開表單。 該過程依次使用ActiveX控件傳遞消息以打開WinForm或WPF窗口(.NET)。 我正在通過原始MFC對話框的HWND,以使新對話框成為子對話框。

到目前為止,一切工作正常,盡管WPF表單要求我除了通過WindowInteropHelper設置所有者外,還要禁用父級,並且當然在關閉時重新啟用父級。

關閉表單時出現了我遇到的問題。 當我關閉WinForm時,原始對話框將變為活動狀態,但是當我關閉WPF窗體時,任何在較早位置聚焦的窗口將變為活動狀態。 重新激活MFC對話框的唯一方法是單擊標題欄。

我嘗試了多種嘗試調用SetForegroundWindow的方法,並檢查以確保我的進程是當前活動的進程。 如果我輸入一個斷點並繼續,則我的主對話框將正確激活。

因此,我現在已經通過將WPF窗口轉換為UserControl並將該控件托管在(Win)窗體中​​來解決了此問題。

唯一的缺點是,我的WPF應用程序中也使用了此UserControl,因此我也有一個包含UserControl的WPF窗口。 我只是創建了一個簡單的Form,該Form接受構造函數中的控件,然后設置外觀。 這也意味着我可以擺脫用於設置所有者和處理WPF窗口的所有者啟用狀態的代碼。

所以我打開窗口的代碼來自:

MyWindow window = new MyWindow();
WindowInteropHelper helper = new WindowInteropHelper(window);
helper.Owner = owner;
EnableWindow(owner, false); // Platform Invoke
window.Closed += (s, e) => { EnableWindow(owner, true); };
window.ShowDialog();

成為:

HostWinForm WinForm = new HostWinForm(new MyControl());
winForm.ShowDialog();

我不知道是否有一種解決方案可以讓我保留一個WPF窗口並具有模態行為,但是此解決方案對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM