I recommend these books:
- Programming Applications for Windows by Jeffrey Richter, published by Microsoft Press.
- Debugging Windows Applications by John Robbins, published by Microsoft press.
Earlier versions of both books covered Win32 and more recently I think they also cover using .Net.
Petzold's book will also be OK. Do not worry about the difference between Win32 and Win64, its largely a red herring. The API changed in a very few places between Win32 and Win64 IF you used the correct types specified by the API and do not do silly things like casting HANDLEs to DWORDs so that you can store them in a CUIntArray.
Always use containers of the correct type or use templated containers so you can get the correct type. For example: CTypedPtrArray to store handles.
I ported a 2 million line C++ app from Win32 to Win64 in 2000 (I had an early Itanium machine (sounded like a vaccuum cleaner, noisy slow thing) running 64 bit Whistler and a very early version of what became Visual Studio 7.0). The one major change was that changing the WndProc was not compatible (you have to use a different flag). For just about everything else, the bugs were people had been lazy and put HANDLEs or pointers into DWORD sized hashtables (CMAP) or CUIntArray. Changing the containers to the correct types pretty much fixed the problems. The whole program was ported using just one person, we didn't need a team to do it.