2010-05-23 35 views
2

我們正在將一個MFC應用程序移植到WPF,並且可能沒有時間移植整個應用程序。 MFC應用程序有許多基於CDialog的窗口,我們正在考慮在MFC中留下一些這些窗口,並在WPF窗口中顯示它們,所以我們可以從WPF控制它們的模式。將MFC CDialog置於WPF形式

有沒有簡單的方法來實現這一目標?如果沒有,你能推薦另一種方法來處理這個問題嗎?

感謝,
splintor

回答

3

我回頭看了一下這個類似的遺留應用程序,我從WPF and Win32 Interoperation Overviewhost MFC class inherited from CWnd in WPF一起開始。參考(和搜索)HwndHost Class,連同Hosting a Simple Win32 Control in a WPF Application

問題是,它從來沒有運行良好 - 我覺得它損害了WPF應用程序,我無法讓它在任何可靠的地方工作,所以我放棄了這種方法。

因此,採取不同的方式,我將MFC應用程序重新構建爲一個獨立的「對話框提供程序」,它擁有所有的對話框。這只是做了所有的對話工作,並通知了WPF應用程序的結果。這工作並使應用程序向前移動。我也嘗試Leveraging the .NET Framework Inside an MFC Application,但它並沒有起作用,時間是關鍵。

最終結果是用AWK編寫的Q轉換器,該轉換器將.rc和.h文件作爲.rc文件,併爲編輯中的每個對話框生成XAML & C#。如果您已經使用類嚮導構建了MFC對話框,那麼應該有有用的分隔符,這些分隔符在此過程中非常有用。

例有用的分隔符:

//{{AFX_DATA_INIT(CDialogFileProperties) 
-2

如果使用標準的通用對話框,然後只用WPF當量,否則你可能必須讓他們從頭WPF。或者使用顯示wpf窗口內的對話框的Windows窗體主機控件。

+0

但我怎麼做呢?如何將CDialog放入WPF窗口中?這是我的問題... – splintor 2010-05-23 20:54:49

+0

我對MFC沒有任何瞭解,但是你可以導出一個C++函數來顯示對話框,但不會在wpf窗口中。那將在它自己的窗口中。 – 2010-05-23 20:58:46

+0

但是,從代碼維護的角度來看,您最好在WPF上進行類似的對話。 – 2010-05-23 21:00:00