8

我有一个具有广泛 C++ 模型的现有应用程序,我想将它连接到一个漂亮的现代 Windows 7 或 8 UI。我们应用程序的当前(古老)UI 是在早期的 Windows XP / 95/98 时代使用纯 Win32 API 开发的。我们的代码目前正在通过 Visual Studio 2010 编译/链接。

Windows 上似乎有很多不同的开发 API“标准”:Win32、MFC、ATL、COM 和 .NET。在过去的 14 年里,我的工程师几乎一直在拖微软的路线:在 2001 年,它是“MFC 已死——我们必须迁移到 ATL”(我们没有)。然后“.NET 将替换 MFC”(它似乎没有)。

所以现在我们准备好转储旧的 UI 代码。使用一组可靠且高效的标准会很好,而且我们可以快速创建 UI。撇开 QT 不谈(我在 stackoverflow 上阅读了很多争论不休的优点和缺点):

1) Windows 7 和 8 的现代 UI 开发方法是使用 MFC 还是 .NET?

2) 对于 .NET 方法(假设有充分的理由选择 .NET),我们可以将我们的 C++ 模型代码 UNMANAGED 与 .NET 应用程序一起使用吗?

3) 是否必须在 Visual Studio 2012 中进行开发,即使我们的应用最初不是为 Metro 外观设计的?

4) 是否有任何其他 Microsoft 工具包应考虑用于桌面应用程序开发?

斯蒂芬

4

4 回答 4

5

看看我在 2011 年给出的这个答案。我认为它今天仍然有效;考虑到最近从微软转向 C​​++,也许更是如此。我不确定 MFC 中有多少对 win8 的额外支持,但如果您没有完全切换到 Metro(我想您不会;如果您有“产品”,则需要支持较旧的 Windows至少,什么,5年?),这并不重要。

我还没有看到一个感觉像 C++ 一样“可靠”的 .Net/WPF 应用程序(是的,我意识到这些在技术上是正交的,但实际上,谁用 C++ 构建了 .Net UI?)。我理解人们为什么要离开 MFC;这并不是说我不了解它的消极面。IMO,归根结底是:您对快速发展的重视程度如何?对于某些应用程序(业务线、寿命短的产品),上市时间和做出改变的速度比“扎实”地设计更重要。对于其他(专业工具、系统软件)而言,创建具有良好用户体验的可靠软件更为重要。我还没有看到在更“现代”的框架中执行此操作的生产软件(而不是“技术演示”);MFC(或者我应该说' win api 通过 C++' 使用,但 MFC 在这方面有足够的优势让积极因素胜过消极因素)应用程序(仍然)(通常)是最好的工具。国际海事组织。

最后要考虑的一件事是您的开发人员。如果他们已经为 MFC 编程 15 年,那么他们可能会将自己的职业生涯编程到一个角落。如果你坚持继续使用 MFC,你可能会疏远他们。您必须权衡其中的业务风险与技术考虑因素(我从您的问题中得到您是企业主的问题)。如果您希望私下进行,请随时与我联系以进行后续讨论。

于 2013-02-12T10:42:12.810 回答
4
  1. 您可以采用任何一种方法。但是,.NET 在用户界面设计中更为常见,如果您需要灵活的用户界面,它具有许多优势(在更快的开发方面)。

  2. 是的。C++/CLI 可以很好地将本机代码与 .NET 用户界面联系起来。

  3. 不,您可以在 VS2010 中执行此操作。话虽如此,VS 2012 确实有很多优势,尤其是在使用 C++ 时。升级可能是有益的。

  4. 我会看看WPF。新的 Windows 8 用户界面可能很有趣,但可能难以与您以前的代码库一起使用。此外,它不适用于较旧的操作系统。根据我的经验,WPF 是最好的,目前正在改进的选项(.NET 4.5 中有许多改进),它支持将现有代码库与新的用户界面技术混合。

于 2013-02-12T00:33:22.810 回答
1

一个非常容易说的解决方案是将整个 C++ 代码移植到 .NET 的 C# 或 C++/CLI,然后将其与 WPF 接口。这可能很复杂,但是,您可以享受完全在 .NET 中轻松编码的乐趣(最好使用 3.5 SP1 和 Visual Studio 2010)。

您还可以将现有代码连接到 .NET,以通过 COM Interop 使用 WPF。COM Interop 本质上将 .NET 组件注册为系统中的 COM 组件。当它被调用时,CLR 执行代码执行和编组以供您的程序调用(更多信息 - msdn.microsoft.com/en-us/library/zsfww439(v=vs.80).aspx)。

最后一种方法是转储 MFC 并直接调用 Windows (Win32) API。Windows API 比其他方法更容易在您的代码中使用。在现代 Windows API 中,GDI+(图形设备接口)在 DirectX(DWM 和 DXGI)之上实现,可以通过 COM 轻松扩展,是 WPF 和现代 UI 的一种可行的替代方案。

于 2014-02-20T09:03:58.000 回答
0

没有人应该创建基于 MFC 和 Win32 的新项目。Windows 现代 UI 和统一 API 是未来。我不认为 .Net 是每个应用程序的答案,尤其是对于具有大量 C++ 本机代码的项目。我们知道微软正在开发统一的 API。我希望这是这个问题的答案。

于 2014-05-05T18:22:15.477 回答