关于WPF,Win32,MFC的棘手问题

时间:2010-03-20 21:46:45

标签: wpf winapi api mfc

假设您是一名具有C ++和C#基础知识的IT学生。我们假设您要设计以下应用:

  1. 需要提供一些性能,如存档,加密算法,编解码器
  2. 使用一些系统调用
  3. 有一个gui
  4. 你想要学习一个Api,它可以让你编写像前面描述的那样的应用程序,并且:

    1. 是主流
    2. 是未来证明
    3. 让你找到一份体面的工作
    4. 很容易 - 我的意思很容易像VCL,不像winapi那样容易
    5. 那么,做出这些假设,你会选择什么Api? MFC,WPF,其他?我非常喜欢VCL和QT,但它们不是主流,我认为很少有雇主会要求你在QT或Visual C ++ Builder中编写应用......

      感谢您的回答。

2 个答案:

答案 0 :(得分:13)

  

注意:以下答案是在几年前编写的,其中考虑了桌面应用程序开发。今天(2018年),您可能只是构建一个Web应用程序,最终得到一些合理的跨平台和独立于设备的东西。 (例如,在服务器端使用ASP.NET Core,在客户端使用诸如React,Vue.js或Angular之类的UI框架/库)。

  • Win32 API - 如果我是你,我会忘记它。直接通过Win32 API编写Windows应用程序只有在使用纯C进行编程,或者您确实需要进行大量系统调用,或者如果您担心更“舒适”引入的额外开销时才有意义。平台或框架(例如下面提到的那些)。直接通过Win32 API编程UI是令人厌倦,凌乱的,你需要处理很多细节。它根本不是平台独立的,但你可能会或可能不会关注它。

  • MFC - 如果您使用C ++进行编程并在Windows平台上修复,则可能是一个选项。我从来没有理解它的优点,除了它使Win32 API更加舒适(AFAIK它基本上是围绕Win32 API的面向对象的包装器的集合,它带走了它的一些复杂性/混乱)。此外,它也不是非常独立于平台。

  • Qt wxWidgets - 相当广泛的UI框架。可能是平台独立性发挥作用的好选择。 AFAIK这两个框架都是针对C ++语言的。

  • WinForms(。NET) - 与MFC类似,它也基于Win32 API(USER32和GDI +)。 AFAIK WinForms框架现在被移植到Mono,因此有点跨平台。但是,它并不是最先进的技术。对于复杂的UI,它有时也会有些迟缓。如果我今天必须决定使用哪个框架,我宁愿选择......:

  • WPF(.NET) - 比WinForms更现代,具有更多图形功能,显然,渲染速度更快,因为它不再基于Win32 API(GDI)。 (它运行在.NET上,我找到了一个很好的开发平台。用C#编程比用C ++编程更容易恕我直言,这也是针对Win32 API,MFC,Qt和wxWidgets的一个参数。)注意WPF不是跨平台的,到目前为止它只存在于Windows平台上。

  • 当然还有 Java ,包括随附的UI框架。我不能说太多,因为我不是Java人,但我可以想象Java将是平台独立性的最佳选择;它是某些行业的主导平台(通过.NET)(例如移动电话,银行业务,由于非常可靠的JVM和安全考虑因素)。

所以 我的推荐 将是.NET框架,而WPF是用户界面,如果你计划主要留在微软世界。请记住,你仍然可以通过P / Invoke使用Win32 API(你不会接近“系统调用”)。

答案 1 :(得分:7)

如果您喜欢使用C#进行编码并使用.Net框架,我建议您查看WPF。 WPF是一个很棒的GUI框架,你可以做任何事情 - 并使它闪耀! WinForms可能更容易掌握,但我会说WPF更“未来证明”。另一个积极的事情是WPF与Silverlight非常相似,所以如果你能很好地处理WPF,你也应该能够编写Silverlight应用程序 - 如果你感兴趣的话。请不要费心学习MFC ..我不敢相信有很多人今天使用MFC的原因不是他们之前使用它的原因,也没有机会改变......

.Net程序员有很多好工作,所以除了C#之外能够处理一些GUI框架,并且有关.Net框架的一般知识是值得的。

当谈到能够“提供诸如存档器,加密算法,编解码器等一些性能”的观点时,这实际上不应该取决于您选择的GUI框架。这种代码将在GUI层之外的层中写入,并且通常将绑定到GUI。使用WPF,您可以编写例如C#中的加密算法在某些类中独立于GUI层,然后用WPF编写的View将绑定到C#代码并从此处获得答案。但是,如果你使用WinForms,你仍然会做同样的事情,性能依赖于算法 - 而不是GUI。

在开始使用WPF时,有很多关于SO的问题有助于此。所以你应该通过快速搜索找到很好的帮助。

祝你好运!