A lot of questions for one question.
1.) There is no real different between a empty project and a non empty project. As far as I know, precompiled headers are off in empty projects.
2.) stdafx.h is used by microsoft for the standard includes. It also acts as the single include for precompiled headers. If you use precompiled headers, you have to include stdafx.h. The details for that I explained here:
https://stackoverflow.com/a/18685377/1922748
3.) By default, Microsoft uses UNICODE strings, they use 16bit instead of 8bit. A char is always 8bit, So microsoft defined macros for that. If you compile it (see the settings page) with _UNICODE the macro is
#define THCAR short
with "multiple bytes" it is
#define TCHAR char
the same is with main and _tmain
4.) It is not old books, it is different projects.
_tWinMain
is the entrypoint for window based application like the browser you are using.
_tmain
is the entrypoint for console applications.