Slightly off-topic: if I want to learn developing Win32 applications, what is be the best place to start and where do I find comprehensive reference material? I find the simplicity and responsiveness of Notepad2 and similar applications very impressive.
Should I get Visual Studio 6.0 or is a MinGW workflow [1] the way to go? Is MSDN still usable as a Win32 reference or is there some old go-to Win32 bible that I should look for?
Petzold's book that dom0 mentioned is/was the definitive Win32 reference albeit very dated now. It obviously will not cover anything in Windows 2000 and later(!).
MSDN is still the go to place for all Win32 documentation although it can be tricky to find exactly what you want as MS prefer to push you towards .NET related stuff. Even finding plain C++ can be a pain with them pushing you towards Android C++ development by default for some reason?!
For software you can go with MinGW-W64 or Visual Studio 2015 Community (you will need to do a custom install and select the VC++ tools as they are not included by default anymore).
There's also "win32.hlp" if you want an older, yet offline reference; it's from the days of 95/NT 4, but surprisingly complete as most of the GUI functionality was already available back then.
The recent versions of VS are somewhat more difficult for generating single-file standalone executables which run on OSes older than Vista.
Just so others know you will need to install the Windows help system to open .hlp on Windows 10 (and maybe 8?) as they are deprecated.
If you want to build single exe for Windows XP you need to install the specific C++ tools for XP option in Visual Studio. Having not had to use it I do not know if this allows you to build an exe that does not rely on the latest VC++ redist though?
There's a command line compiler option to avoid reliance on VC++ redist: /MT (in release mode) or /MTd (in debug mode). Default is /MD (in release mode) or /MDd (in debug mode). With /MT or /MTd Microsoft libc will be linked statically to your application and VC++ redist DLLs won't be required to run the application in the end user environment.
Though there's a shortcoming: if your application consists of EXE file(s) calling into your own DLL(s), then in /MT or /MTd mode you have multiple instances of libc in the process address space, and so tricks like "malloc() in dll, free() in exe" or "open() in dll, close() in exe" will produce weird runtime errors. That won't be a problem if DLL interfaces are strictly C functions and structs, i.e. without classes, STL, smart pointers, exceptions, RTTI-related stuff etc.
Static linking can also make the executable a lot bigger, and if the statically linked library uses new APIs, won't run on older Windows versions (I know about the special XP support option, but I don't know if it'll let you create binaries that will run on Win95.)
The other option (which I believe MinGW uses) is to link with msvcrt.dll, something which MS doesn't officially support and rather strongly discourages but actually works very well in practice and enables the "one binary for Win95 to Win10" effect.
Minimum Windows runtime version depends on libc shipped with MSVC compiler, for Visual Studio 2008 it's Windows 2000 SP4; for VS2010 it's Windows XP SP3; for VS2013/VS2015 it's Windows 7 IIRC. There's also /Zl compiler option to omit libc entirely (e.g. for small programs using only Win32 API).
MSVCRT.DLL used to be default runtime library for code produced by Microsoft Visual Studio 6 compiler. This DLL is still shipped with Windows, albeit its sprintf() doesn't support %ll format specification, its time() function assumes that time_t is 32-bit, and in general it feels very 1998y. It required some redist on Win95 and NT4 IIRC.
Should I get Visual Studio 6.0 or is a MinGW workflow [1] the way to go? Is MSDN still usable as a Win32 reference or is there some old go-to Win32 bible that I should look for?
[1] http://www.transmissionzero.co.uk/computing/win32-apps-with-...