I used MFC and Windows Forms for a very long time. I am from the video game industry, so for many years I had to write a lot of desktop applications, and before .net, MFC was extremely useful. Even before that, I wrote tools in pure Win32.
MFC definitely had its quirks, but overall it made life a lot easier. It was very easy to integrate OpenGL and Direct3D into custom views, and once you got stuck, writing custom controls was part of the cake. Best of all, I could just code in pure C ++, which just turned out to be my language of choice. Plus, I found MFC to be very efficient and fast.
Gradually, MFC began to gain support for an external management library, especially the docking / toolbar library, so my tools, such as 3D models and level editors, looked pretty sweet.
Most of the applications I wrote created the user interface programmatically, so the dialog / window design tool was more than enough for my needs.
MFC 9 is also very cool, especially with the ribbon / dock management library that Microsoft released as part of the Feature Pack. So, of course, life in an old dog! :)
When .net 1.0 came out, I found the transition quite simple because it supported managed C ++. It was ugly, but gave a relatively simple tilt to the .net frame. But the turning point for me was that I started writing tools that needed Windows Forms Designer, while .net 2.0. I decided to start again and learn C #, which I really liked, although I will never be used to having new () without delete ();). Then I began to write user controls, I find the whole experience is very beautiful and understandable. The .net structure was huge, well supported, and as a rule, it was easier for me to do almost everything in C # /. Net. In addition, the compilation was fast, and the refactoring ability in Visual Studio was awesome.
The beauty of C # /. NET - this does not limit you to just writing in managed code. You can still use unmanaged code if performance is a problem, for example, or if you need to use code between platforms. For example, my math libraries are written in C / C ++, which I put in libraries that allow C # to wrap / use the same code, although this is only temporary. I'm going to port these libraries to C # on time, so everything is clean .net.
The last experience I want to mention is that I spent the last few months programming a console game and wasted my time programming InterWeb. I used the Microsoft stack while programming in ASP.net/C#, and I have to say that it is very good, with all the knowledge about C # that may be applicable. The only learning curve was ASP.net, not the language and support libraries. With the advent of .net 3.5 (LINQ is sweet) life in .NET networks with C # is wonderful.
In any case, I do not want to turn this into my life story, but I just wanted to give a brief experience of the one who went through all the technology that you asked for. I would also like to mention that it is useful for you to try different languages ​​/ frameworks. I have been coding the iPhone for a year now and I really liked Objective-C. All this is programming, and all is good.
As for MFC / .net, both have their pros and cons, and I really don't mind MFC at all, but in terms of moving forward, I would probably stick with C # /. net, but please, please understand how this works. The only sermon I will say is to understand how memory works in .net, although "all this will take care of you";)
Your knowledge of C / C ++ should be completely independent of whether you use MFC or not, this is still a critical language (especially in console programming for video games), but it is becoming more and more difficult to program desktop applications on Windows argue with .net. It is fast, simple, has excellent tool support, excellent third-party libraries, a huge growing community, is now a cross-platform (Mono) and allows you to move between all current / new Microsoft technologies (ASP.net, WPF, Silverlight, WCF, etc.) d.).
For all this, I still configured Visual Studio as a C ++ environment. Some habits never die;)