MFC的替代品

时间:2010-11-02 17:49:58

标签: c++ windows user-interface

https://stackoverflow.com/questions/149698/what-is-a-good-mfc-starting-book

许多赞成的评论声称有更好的选择。我想知道它们可能是什么。

我的主要要求是UI使用本机小部件,以便我们的自动化软件可以工作。业主绘制的窗户更难驾驶。

我并不是特别喜欢MFC的设计,所以替代方案会很好。我发现的只有一个是WX,这是我们已经尝试过的并且正在考虑放弃的。我们需要一些不会迫使我们与一堆我们不关心的跨平台包装进行斗争的东西。我们正在编写一个Windows应用程序,市场营销并没有针对Mac或Linux提供一个单一的废话(是的,它也让我的屁股受伤)。

我已经看了一下.NET选项。问题是我不太了解它,但据我所知,我们必须使用C#来获得MFC随时可用的许多选项。例如,C ++ / CLI工具包似乎没有乍一看的停靠窗口。事实上,WinFroms直接选项似乎也没有。看起来我们必须制作一个WPF项目,而这看起来根本不是我们真正想要的东西(除了另一个工具包之外,我们还有大量的废话要学习)。搬出C ++也需要大量的包装,我并不特别喜欢我从自动包装器中看到的结果。

我对.NET选项的另一个问题是我们有一个非常强大的绘图应用程序(除了需要很多表单)。我知道你可以用.NET之类的JIT语言获得类似的结果,但我也知道你必须要小心谨慎。这是我想在此时避免担心的问题。

.NET的另一个,也许是最重要的问题(至少是切换语言)是我们有大量的接口逻辑,虽然应该是API不可知的,但是用C ++编写的。

那么其他选择是什么?这些人真的有分数,还是只是对任何不是他们最喜欢的语言或工具包的东西大喊大叫?

注意:
这是什么问题?我特别说到移植到其他平台甚至都不是一个考虑因素,而且我必须拥有使用本机小部件集的东西,所以我们不必完全改变测试用于自动化产品的所有内容!有人真的读过我的问题吗?

6 个答案:

答案 0 :(得分:12)

Qt是目前基于C ++的gui工具包的唯一真正答案(至少对于完整的桌面应用程序而言)。即使对于纯粹的Windows应用程序来说它也是值得的 - 它还与visual studio(获得vs-addin)有很好的集成,而且记录很清楚

wx有一些不错的观点,一个是它与使用中的MFC非常相似,但随着Qt的推移,LGPL wx的真正优势已经丢失。

修改 Qt小部件不是原生的但他们确实使用本机样式API,因此它们与本机小部件无法区分 - 如果您使用默认样式。

答案 1 :(得分:4)

使用C ++ / CLI,Windows窗体可以正常工作。 Windows窗体也恰好是WIN32句柄的包装器。

与C ++ / Windows Forms相比,C#/ Windows Forms的功能没有区别。 (他们只是编译不同)就像你可以用C#和VB.NET做同样的事情......

如果您正在寻找停靠窗口,则有许多第三方库可以执行此操作。 (有些是开源的,有些是你可以购买的。)由于CLR,你可以直接包含用不同语言编写的集合。

答案 2 :(得分:3)

MFC当时并不差,但它有点老了。一个很好的例子是用更好的STL集合替换的集合。但是你问的是GUI的东西。有WTL(Windows模板库),我认为它现在已经开源了。比MFC更轻的占地面积,但它的设计工作方式相同 - 例如。大多数类具有相同的名称和方法名称。

在缺点方面,我发现文档相对较少,并且它似乎与Visual Studio Wizards不兼容。这可能是我的问题 - 让它与VS向导一起工作将是非常重要的恕我直言。

答案 3 :(得分:2)

我处于大致相同的位置:大型应用程序,本机代码,使用MFC作为前端。我没有看到任何真正引人注目的替代方案,或者没有其他原因可以改变原因。

话虽如此,让我提出意见。如果我正在做一个需要保留/继承大量本机代码的新项目,我会考虑尝试使用主要的本机(C ++ / CLI)主应用程序来执行WPF前端。这是使用Visual Studio 2010完成的,并且它大部分都是高性能的,所以它至少是可能的。 WPF具有一些UI优势,因为它是CLR代码,因此可以更容易地进行工作和测试(从自动化角度来看)。我不确定它是否值得投资和学习曲线,但它是我考虑使用具有大量本机代码的现代纯Windows应用程序的替代方案。

希望有所帮助。

答案 4 :(得分:2)

提供我在其他答案中没有提到的内容:

从它的声音来看,你需要原生控制的唯一原因是自动化软件。并且需要自动化软件工作的唯一原因是用于测试。我假设正在使用一系列自动化测试来确保软件按预期工作。

如果是这种情况,那么需要考虑以下事项:在C#/ WPF领域中有一种称为Model-View-ViewModel的合理流行的设计模式。这里没有详细介绍,基本思想是你可以将实际的GUI控件(View)与处理这些控件如何与应用程序中其余业务逻辑交互的代码分开。该代码就是所谓的ViewModel。除此之外,这适用于可以通过典型的单元测试方法测试ViewModel(以及应用程序的所有其余逻辑)而不需要实际存在GUI控件的设计。

因此,无论使用哪种自动化软件测试都可能被直接的单元测试代码所取代。

然而,我在这个领域的经验并不像我想的那么广泛。所以如果你考虑到这一点,我强烈建议进一步研究。首先,像“模型 - 视图 - 视图模型”和“MVVM”这样的谷歌搜索术语最终应该会对该部分进行更详细的讨论。

答案 5 :(得分:1)

我见过Qt用得相当广泛。我个人没有使用Qt,但我看到很多关于它的问题,远远超过wXwidgets或MFC。我从那开始。