我目前正在处理非常大的旧版MFC MDI应用程序。它具有大量UI元素-可停靠的工具栏,自定义树控件,上下文菜单等。它是图像处理应用程序,因此主 View 使用DirectX和OpenGL进行渲染。该产品已有10年的历史了,此处的重点之一是更新产品的外观。

知道Microsoft在提供C++/MFC与.NET之间的互操作性方面做得很好,我认为逐步增加代码库是有意义的。我现在正在努力的是从哪里开始。

一种方法是使用WPF淘汰MFC框架,并尽可能多地重用C++代码。这将使我们能够最大程度地利用WPF架构的好处,但是这意味着漫长的开发周期,直到我们再次完全发挥作用。

另一种方法是用WPF对应的控件一次替换MFC控件。这将使我们能够逐步工作。我对这种方法的担忧是,这意味着托管和非托管代码之间将有很多连接点,而且我不确定从何处着手替换主菜单和工具栏之类的东西。

还是这里没有其他选择?

任何建议或有关此主题的信息的链接将不胜感激。

更新: DavidK提出了一些很好的问题,因此我在此添加了动机。

1)产品的 future 发展

该产品仍在积极开发中,并定期添加新功能。我认为尝试缓慢地向C#/WPF迁移非常有意义。以我对C#/WPF的有限经验,我发现与使用C++/MFC相比,生产率得到了惊人的提高。

使用WPF的另一大好处是能够利用多头系统。 MFC应用程序仅限于单个顶级框架,因此很难利用多个监视器。

2)员工保留和招聘

找到愿意在MFC上工作的开发人员越来越难。对于当前开发人员的职业发展而言,接触更新的技术也很重要。

最佳答案

再来一遍,因为我已经成功地用WPF替换了顶层MFC UI(主框架,窗口和工具栏)。

事实证明,我们的核心绘图代码只需要交给HWND即可呈现。这使得重用我们现有的大部分C++代码库非常容易。

这是我采用的方法的关键部分的简要概述:

  • 使用.NET的HwndHost类来托管HWND,以将C++绘图代码呈现为
  • 为需要公开给WPF/C#UI代码
  • 的任何 native C++代码创建C++/CLI包装器
  • 在 native C++代码中按原样保留大多数MFC对话框。这样可以最大程度地减少完成UI所需的工作量。可以将MFC对话框随时间迁移到WPF。

  • 附带说明一下,我们正在使用Divelements中的SandDock和SandRibbon,到目前为止对它们非常满意。

    关于c# - 将大型MFC应用程序迁移到WPF/.NET有哪些技术?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/836511/

    10-13 06:31