Windows桌面应用程序的现代UI的正确方法是什么?

时间:2013-02-12 00:25:43

标签: .net visual-studio-2010 winapi user-interface mfc

我有一个广泛的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和Windows 7的现代UI开发方法8是使用MFC还是.NET?

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

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

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

斯蒂芬

4 个答案:

答案 0 :(得分:4)

  1. 你可以采用任何一种方法。但是,.NET在用户界面设计中更为常见,如果您需要灵活的用户界面,则具有许多优势(在更快的开发方面)。

  2. 是。 C ++ / CLI适用于使用.NET用户界面桥接本机代码。

  3. 没有。你可以在VS2010中做到这一点。话虽如此,VS 2012确实有很多优点,特别是在使用C ++时。升级可能会有所帮助。

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

答案 1 :(得分:4)

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

我还没有看到一个.Net / WPF应用程序感觉像C ++那样“稳固”(是的,我知道那些在技术上是正交的,但实际上,谁在C ++中构建.Net UI?)。我明白为什么人们想要离开MFC;这不像我不理解其消极方面。 IMO,它归结为:您对快速发展有多大价值?对于某些应用(业务范围,寿命短的产品),上市时间和更改速度比“稳固”设计更重要。对于其他(专业工具,系统软件),创建具有出色用户体验的可靠软件更为重要。我还没有展示出在更“现代”的框架中做到这一点的制作软件(而不是“技术演示”); MFC(或者我应该说'通过C ++使用'赢得api',但MFC在这方面已经有足够的力量让它胜过负面因素)应用程序(仍然)(通常)是最好的工具。 IMO。

最后要考虑的是你的开发者。如果他们已经为MFC编程了15年,他们很可能将他们的职业生涯编入一个角落。如果您坚持继续使用MFC,您可能会疏远它们。您必须权衡其中的业务风险与技术考虑因素(我从您的问题中得知您是业主)。如果您愿意私下这样做,请随时与我联系进行后续讨论。

答案 2 :(得分: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和Modern UI的可行替代方案。

答案 3 :(得分:0)

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