If you want a really good explanation of the theory of Windows programming or if you want a lot of detail on the more advanced aspects such as multithreading, OLE Automation, Networking, etc., then go for C++ Windows NT Programming.
A little while ago, I decided it was time to start doing some Windows programming. I further decided to forgo the pleasures of 16-bit Windows programming and jump straight into 32-bit programming on Windows NT4. As a Windows programming novice, I knew I would need a lot of help, so I looked around for some suitable books. Fortunately, these two both appearedon the next book review list. As a complete beginner, I really needed a good introduction to the myriad aspects of Windows programming. Between these two books, I got pretty much what I wanted. Neither was perfect, though. Without both, there would have been a few holes.
I started with C++ Windows NT Programming .The first three chapters of this book (about 170 pages) give a good introduction. They start by explaining the general programming model of Windows and the core elements such as controls and messages. There is also a good explanation of using the registry. A big section is devoted to the internal workings of Windows (OS Model, Processes and Threads, Virtual Memory, etc.) which is invaluable for understanding what programs have to cope with. Finally, there is a reasonable introduction to the Win32 API. Not an API reference, but an explanation of how it is structured and how you should use it. After this, the gradient starts to get a bit steep. Subsequent chapters launch into OLE, Processes, Multithreading, DLLs. Interprocess Communication and Networking and, finally, NT Graphics. At this point, I felt I was getting in too deep too quickly, so I went back and started at the beginning of the other book, Norton Guide to Windows 95/NT4 Programming with MFC.
The first part of this book introduces the basic concepts, such as the anatomy of a Windows program, Windows programming issues and memory management. As a first introduction to the principles of Windows programming, I found it a bit light and was glad that I had read the introduction in C++ Windows NT Programming first. After this, however, the book improved greatly. The Norton Guide ramps up the technical skill level much more slowly. It takes a lot more time (and paper) to cover the more basic area such as MFC, Controls, Resources, Dialogues and File I/O. This is all covered in a lot of detail and pretty well explained. It is only towards the back of the book that you start to get onto more high level features such as Multi-threading, Sockets and OLE Automation.
If you are only in the market for one book, which one should you buy? Both are quite well written but if, like me, you are a real beginner, go for the Norton Book. The introductory material isn't quite so good, but the bulk of the book is at the right level of complexity for a beginner. If you want a really good explanation of the theory of Windows programming or if you want a lot of detail on the more advanced aspects such as multithreading, OLE Automation, Networking, etc., then go for C++ Windows NT Programming. Personally, I was glad to have both and am happy to recommend either.
By the way, the Norton Book covers up to MFC 4.2, C++ Windows NT Programming only to MFC 4.1