Let’s suppose you’re an IT student with a basic knowledge of C++ and C#. Let’s suppose that you want to design apps that:
- need to deliver some performance like archivers, cryptographic algorithms, codecs
- make use of some system calls
- have a gui
and you want to learn an Api that will enable you to write apps like those described earlier and:
- is mainstream
- is future proof
- entitles you to find a decent job
- is easy enough – I mean easy like VCL, not easy like winapi
So, making these assumptions, what Api will you choose? MFC, WPF, other? I really like VCL and QT, but they’re not mainstream and I think few employers will want you to write apps in QT or Visual C++ Builder…
Thanks for answers.
Win32 API — I’d forget about it, if I were you. Programming a Windows application directly via the Win32 API only makes sense if you’re programming in pure C, or if you really need to do a lot of system calls, or if you’re concerned about the additional overhead introduced by more “comfortable” platforms or frameworks (such as the ones named below). Programming UIs directly through the Win32 API is tiresome, messy, and you need to deal with lots of details. It’s also not platform-independent at all, but you may or may not be concerned about that.
MFC — Perhaps an option if you’re programming in C++ and fixed on the Windows platform. I never understood what’s so great about it, other than it makes the Win32 API much more comfortable (AFAIK it’s basically a collection of object-oriented wrappers around the Win32 API that take away some of it’s complexity / messyness). Also, it’s also not very platform-independent.
Qt, wxWidgets — Fairly widespread UI frameworks. Might be good options where platform independence plays a role. AFAIK both frameworks are targeted at the C++ language.
WinForms (.NET) — Similar to MFC, this is also based on the Win32 API (USER32 and GDI+). AFAIK the WinForms framework is now being ported to Mono, and therefore somewhat cross-platform. However, it’s not exactly the most up-to-date technology. For complex UIs it can also be somewhat sluggish sometimes. If I had to decide today which framework to use, I’d rather choose…:
WPF (.NET) — More modern than WinForms, with more graphical capabilities and, apparently, faster rendering, as it is no longer based on the Win32 API (GDI). (And it runs on .NET, which I find a great platform to develop for. Programming in C# is so much easier than programming in C++ IMHO, which is also an argument against Win32 API, MFC, Qt, and wxWidgets.) Note that WPF is not cross-platform, it exists only on the Windows platform so far.
Then of course there’s Java, including the UI frameworks that come with it. I can’t say much about that since I’m not a Java person, but I could imagine that Java would be the best choice for platform independence; and it’s the dominant platform (over .NET) in certain industries (e.g. mobile phones, banking, due to the very solid JVM and security considerations).
So my recommendation would be the .NET framework, and WPF for the UI, if you’re planning to stay mostly in the Microsoft world. Remember that you can still use the Win32 API (you won’t come closer to “system calls” than that) via P/Invoke.