C and Win32 are used a lot less these days - except for maintenance - C++ and MFC are more common, but also dated.
C# or C++ and .NET are a lot more common these days, and may be a better investment.
Having said that, if you are good at C and Win32, and can live with maintenance rather than new projects, there are some good jobs out there - a bit like COBOL which still needs coders despite pretty much going out of fashion for new projects in the late 80's...
I would be tempted to go with the more modern stuff, myself. C and Win32 are definitely "doing things the hard way" these days!
Sometimes I really feel like I have chosen a wrong path while learning C, Win32.
I think your whole approach is wrong. This is not a "path". There are things you need to know regardless of your "path". However, it depends on what do you want to become. Do you want to reach at least the position of a professional who drives his career, or you agree to become a "coder" who can be hired for some projects and when the market, trends and other people drive your career?
You can select some language for you
current developing needs out of tens of them, but you also need to take into account the cultural background. C and C++ can be considered good or bad, but among other things you need to understand other developers and their work be able to communicate with them. For this reason, you still need to understand both C and C++ quite well, regardless what you use for development.
To make a step further, I would say you need to understand how a machine works, from the low level. It is impossible to know well without some experience in Assembly Language (optionally inline Assembler used in C or C++ or other high-level languages, that would be more or less enough). What, also beyond your career path? In this case I would ask again if you really want to achieve some minimal professional level or not.
—SA
Updated 25-Jul-11 4:52am
v4
AFAIK there are mainly two areas where C-Programming (rather than C++) is still highly in demand: Embedded programming and old desktop applications that need to be maintained. Apart from that, most new desktop applications tend to be developed in C++ rather than C, even if the managers responsible for the definition can't even tell the difference (that said, with that kind of managers a project might just aas well be done in C#).
I do not think the latter is a real option for you - see my comment on Solution 1! And even in embedded programming, many companies are already moving towards C++! So, either way, chances are high that you will be forced into C++, sooner or later.
Unfortunately for you there are still a lot of experienced C programmers around who managers will likely prefer over a new C++ programmer, no matter whether they're hiring for C or C++. If they hire new programmers, they'll want someone who's either familiar with the newest technologies (e. g. someone fresh from university or the like), or who brings some familiarity with the business itself (e. g. mechanical or electrical engineers who are familiar with the devices that you are supposed to develop (embedded) programs for).
I'm sorry to say that, but learning C in an effort to be hired for programming is a bit like learning to tend to horses and all about coach driving when you aim to be a taxi driver. It's not that there aren't any horse coaches any more, they're just very hard to find.
The best advice I can give regarding language is to
1. decide what kind of software you'd like to work on:
(a) C++, C#, Pascal (Delphi or whatever other brand you can find), and similar languages are best suited for desktop or, possibly, embedded applications.
(b) Ruby, Java, Perl, PHP, are aimed more at web applications (that list may not be very representative, I'm not well versed in this area)
(c) other languages may be more suited to database programming (don't ask me, apart from Cobol I really can't say which ;) )
2. Pick a language fitting for your preferred type of software, and get the hang of it, doing some small projects.
3. Find out about the newet technologies in this area by googling or asking around and try to learn more about it.
As for Win32, that actually isn't too bad: Win64 isn't all that much different - in fact almost all of the Win32 API can be found in Win64, although some might be marked as deprectaed, and others may behave a bit different. Also I'm not that sure how many companies already switched their development to Win32, since Win32 programs do run on Win64 without problems if you take care about a few things.
That said, Win32 is just the 'naked' API of the OS, and almost nobody directly programs on top of that. MFC is one of the libraries that wrap the Windows API in a layer of classes that are (presumably) easier to use, and take away some of the effort required to make a program run smoothly. That said, MFC is also already a rather ancient piece of software, and that's why I put 'presumably' in brackets above: it greatly suffers from legacy code dating back to the 90s, when most of the coding was still done in C, and, unfortunately, you can still see the old data structures and types at the interface. These are probably among the reasons for the newer libraries and frameworks being developed, such as .NET, or QT.
So, in this regard, again I advise you to think about what your goals are. It's probably just as well that you already know the Win32 API, since it's the basis these frameworks are built upon. But you really need to familiarize yourself with at least one of the common frameworks, and even though MFC is often required in job offerings, if you are fammiliar with .NET or another, newer, framework, that would probably serve you better in the long run!
P.S.:
I seem to have ignored the fact that you mentioned you wanted to be a systems programmer. So, regarding choice of language, C++ or perhaps C# really seems to be the best option. If the former, then learning MFC or a similar framework that you have access to is definitely recommended. If the latter, then, of course, you need to familiarize yourself with .NET. You could also use Visual Studio (express version can be had for free) to program managed C++/CLI, using .NET. In fact, I believe that this will be both easier to learn and wil serve you better in the long run than learning (unmanaged) C++ with MFC.
Updated 24-Jul-11 22:56pm
v2
If you have a choice between learning C with Win32 or C++ with MFC, I would go to the later option.
C++ is much more powerfull and safe than C. Even if you don't master every aspect of C++, it still better than plain C. At least there is room for improvement.
MFC will help you a lot for Windows application developement compared to Win32 alone as some difficult tasks are handled by the framework. On the other hand, since MFC is a thin layer over Win32... you will somehow be not that far from the Win32 API.
As I also mentionned in a reply in another solution, .NET developement particulary in C# and WinForms is a lot easier.
But since you seems interested by system developement, it might make sence to learn a minimum of C++/MFC to have at least a good idea of how it works.