Well, it depends on what you want to do. Are you new to programming in general? If so, I would suggest putting together a good programming book or going to college and enrolling in a CS degree program.
If you already know how to program and just want to write Windows programs, you have several options. Which one you choose depends on what you want to do and who your target audience is.
The Win32 API is the lowest level you can get. This is OLD OLD OLD school code C, but you can write small, fast-looking programs. You should do almost everything yourself. The Win32 API is quite complex, and you should know that you need to write better code.
MFC (Microsoft Foundation Classes) - Adopts the Win32 API and encapsulates it in C ++ classes. This is OLD OLD school again, but was recently updated from MS with the new 2008 package, so it is far from dead.
.NET (C #, VB) - the brand spanks new things from MS. It is incredibly easy to write code and create programs. However, it hides all lower-level materials from you, so you just write C # or something else, and it always works.
And, of course, you can always write in Delphi, Qt, WxWidgets, but these are just wrappers for the win32 API.
As for my personal choice, it depends on what I do. At my work, I write C # because the hardware / software is under my control. I know which version of the framework will be installed, how much RAM, hard disk space, etc. For my own projects, I almost always use MFC. It hides the nastiness of the Win32 API and gives me the power of C ++. I would rather do everything .net, absolutely, but I found that many people do not have .net infrastructure, so I greatly limited my user base.