代码之家  ›  专栏  ›  技术社区  ›  splintor

将MFC CDialog放入WPF窗体

  •  2
  • splintor  · 技术社区  · 14 年前

    我们正在将一个MFC应用程序移植到WPF,可能没有时间移植整个应用程序。MFC应用程序有许多基于CDialog的窗口,我们正在考虑将其中一些窗口留在MFC中,并将它们显示在WPF窗口中,这样我们就可以从WPF控制它们的形式。

    有没有一个简单的方法可以做到这一点?如果没有,你能推荐另一种处理方法吗?

    谢谢,
    夹板

    2 回复  |  直到 14 年前
        1
  •  3
  •   Richard Harrison    14 年前

    我之前研究过这个类似的遗留应用程序,我从 WPF and Win32 Interoperation Overview 一起 host 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&D转换器,它使用.rc、cpp和.h,并以可编辑的形式为每个对话框生成xaml&c。如果您已经使用类向导构建了您的MFC对话框,那么应该有一些有用的分隔符,在这个过程中非常有用。

    有用分隔符示例:

    //{{AFX_DATA_INIT(CDialogFileProperties)
    
        2
  •  -2
  •   Rick Rat    14 年前

    如果您使用的是标准的公共对话框,那么只需使用WPF等价物,否则您可能必须在WPF中从头开始创建它们。或者使用在WPF窗口中显示对话框的Windows窗体宿主控件。

    推荐文章