What are the similarities between MFC and WPF?
Is it worthy to learn MFC before WPF?
Software Engineering Stack Exchange is a question and answer site for professionals, academics, and students working within the systems development life cycle. It only takes a minute to sign up.Sign up to join this community
Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.
Both MFC and WPF (along with Windows Forms, VB6 forms, and plenty of other things) contain concepts that come from the Windows UI - the basic set of controls (button, text box, checkbox etc), the idea of properties for those controls (text, contents, checked...) and that some properties are common to all controls while others are just for certain controls. They also have the idea of separating the definition of the UI (I want the button to be blue, and to have Click Me on it) from the code that runs when you interact with the UI.
However, the actual nuts and bolts of how they work, and what you learn while you're first using them, could hardly be more different:
x = new Button(...);kind of thing) while WPF "declares" the UI in XAML (
<Button> ... </Button>kind of thing.)
If you're a C++ developer, don't learn C# so you can learn WPF. Instead, get your feet wet in XAML development by writing C++/XAML apps for Windows 8. (It's not hard.) If you're a C# developer, ignore MFC, it's not for you.
MFC is an old class based wrapper around Win32, its not particularly difficult to learn and use but it is pretty much legacy today.
So they're totally different.
You should look into a few more options before making your mind up. There's the well-respected Qt for C++ developers (and its extensions in the form of QML and Wt), or HTML. Microsoft has said that HTML5 is its (new) primary GUI technology and a lot of other companies are doing work with it, so you might see more developer resources ploughed into that compared to all the other GUI technologies put together.
MFC and WPF are completely different technologies and methodologies.
If you are getting into Windows desktop development right now then I'd recommend just learning WPF - this is the skill that will be transferable to to Metro development (both use XAML to define the UI).
MFC was used for C++ projects before .NET was developed and is effectively dead - except for legacy projects.
MFC was a nice framework for its time. It let you abstract the Win32 API, and made things much simpler to develop, especially when it came to GUI and MVC development. I developed in it for several years, it was much nice than using straight Win32 api.
There is nothing particularly terrible about MFC. Bad software can be written in any language. And there certainly is a learning curve to MFC, as there is to any other language. Add in a badly written application, and I can see confusion happening.
In fact as I've developed WinForms, WPF, etc, I've found the basic concepts of windows development really hasn't changed. You still have buttons, dialog windows, events, threads, mutexes, etc, etc....
If you wish to learn C++ and have a future in the language then avoid MFC like the plague. Nobody uses it anymore unless they are maintaining an old legacy application. I worked at one place where I was assigned to fix a few bugs with a legacy MFC application and silly me, I thought that since I had a little C++ experience that I could just "pick it up". It was one of the few times I found myself completely in over my head and thoroughly confused.
I couldn't tell if the application was designed and written poorly or if MFC was just an awful framework. Fortunately I wasn't the only developer to have problems with it at that company, they eventually decided to rewrite the application in WPF and with good design and unit tests the application turned out rather extraordinary.
There is still work in MFC but you probably don't want these kinds of jobs. WPF is more modern, and if your strengths are in C++ then just about any other C++ UI framework is preferrable to MFC.